Adjusts JsonApi adapter to serialize relationships in a nested relationships hash

This commit is contained in:
Benedikt Deicke
2015-05-21 16:35:35 +02:00
parent ca41901fb8
commit 4f576a1463
9 changed files with 150 additions and 150 deletions

View File

@@ -29,7 +29,7 @@ module ActiveModel
end
else
@hash[:data] = attributes_for_serializer(serializer, @options)
add_resource_links(@hash[:data], serializer)
add_resource_relationships(@hash[:data], serializer)
end
@hash
end
@@ -41,18 +41,18 @@ module ActiveModel
private
def add_links(resource, name, serializers)
resource[:links] ||= {}
resource[:links][name] ||= { linkage: [] }
resource[:links][name][:linkage] += serializers.map { |serializer| { type: serializer.type, id: serializer.id.to_s } }
def add_relationships(resource, name, serializers)
resource[:relationships] ||= {}
resource[:relationships][name] ||= { data: [] }
resource[:relationships][name][:data] += serializers.map { |serializer| { type: serializer.type, id: serializer.id.to_s } }
end
def add_link(resource, name, serializer, val=nil)
resource[:links] ||= {}
resource[:links][name] = { linkage: nil }
def add_relationship(resource, name, serializer, val=nil)
resource[:relationships] ||= {}
resource[:relationships][name] = { data: nil }
if serializer && serializer.object
resource[:links][name][:linkage] = { type: serializer.type, id: serializer.id.to_s }
resource[:relationships][name][:data] = { type: serializer.type, id: serializer.id.to_s }
end
end
@@ -68,7 +68,7 @@ module ActiveModel
serializers.each do |serializer|
attrs = attributes_for_serializer(serializer, @options)
add_resource_links(attrs, serializer, add_included: false)
add_resource_relationships(attrs, serializer, add_included: false)
@hash[:included].push(attrs) unless @hash[:included].include?(attrs)
end
@@ -128,19 +128,19 @@ module ActiveModel
end
end
def add_resource_links(attrs, serializer, options = {})
def add_resource_relationships(attrs, serializer, options = {})
options[:add_included] = options.fetch(:add_included, true)
serializer.each_association do |name, association, opts|
attrs[:links] ||= {}
attrs[:relationships] ||= {}
if association.respond_to?(:each)
add_links(attrs, name, association)
add_relationships(attrs, name, association)
else
if opts[:virtual_value]
add_link(attrs, name, nil, opts[:virtual_value])
add_relationship(attrs, name, nil, opts[:virtual_value])
else
add_link(attrs, name, association)
add_relationship(attrs, name, association)
end
end