2016-09-24 03:00:46 +00:00
|
|
|
# frozen_string_literal: true
|
2016-09-21 17:22:40 +00:00
|
|
|
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
|