JsonApi adapter: serialize association

This commit is contained in:
Tema Bolshakov
2014-08-29 11:37:27 +04:00
parent 6496b08464
commit 6bb4501f67
4 changed files with 88 additions and 37 deletions

View File

@@ -3,19 +3,33 @@ module ActiveModel
class Adapter
class JsonApiAdapter < Adapter
def serializable_hash(options = {})
hash = serializer.attributes
@hash = serializer.attributes
associations = serializer.associations(only: [:id]).each_with_object({}) do |(attr, value), h|
h[attr] = case value
when ActiveModel::Serializer::ArraySerializer
value.map(&:id)
when ActiveModel::Serializer
# process belongs_to association
else
# what?
end
serializer.associations.each do |name, association|
@hash[:links] ||= {}
@hash[:linked] ||= {}
if association.respond_to?(:each)
add_links(name, association)
else
add_link(name, association)
end
end
hash.merge(associations)
@hash
end
def add_links(name, serializers)
@hash[:links][name] ||= []
@hash[:linked][name] ||= []
@hash[:links][name] += serializers.map(&:id)
@hash[:linked][name] += serializers.map(&:attributes)
end
def add_link(name, serializer)
plural_name = name.to_s.pluralize.to_sym
@hash[:linked][plural_name] ||= []
@hash[:links][name] = serializer.id
@hash[:linked][plural_name].push serializer.attributes
end
end
end