module Api module V2 class ApplicationSerializer < ActiveModel::Serializer def self.embeddable {} end def embeds @embeds ||= (scope[:embeds] || []).select { |e| self.class.embeddable.keys.include?(e) } end def self.embed_dat embeddable.each_pair do |key, opts| attr = opts.delete(:attr) || key if attr.to_s.pluralize == attr.to_s attribute "#{attr.to_s.singularize}_ids".to_sym, opts.merge(unless: -> { embeds.include?(key) }) do object.send(attr).map(&:id) end has_many attr, opts.merge(if: -> { embeds.include?(key) }) else id_opts = opts.merge(key: "#{key}_id") attribute "#{attr}_id".to_sym, id_opts.merge(unless: -> { embeds.include?(key) }) attribute key, opts.merge(if: -> { embeds.include?(key) }) end end end end end end