Skip to content

Commit f95f736

Browse files
committed
Refactor add_resource_relationship.
1 parent 8482abf commit f95f736

File tree

1 file changed

+14
-31
lines changed

1 file changed

+14
-31
lines changed

lib/active_model/serializer/adapter/json_api.rb

Lines changed: 14 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -55,25 +55,6 @@ def resource_identifier(serializer)
5555
{ id: id, type: type }
5656
end
5757

58-
def add_relationships(resource, name, serializers)
59-
resource[:relationships] ||= {}
60-
resource[:relationships][name] ||= { data: [] }
61-
resource[:relationships][name][:data] += serializers.map { |serializer| resource_identifier(serializer) }
62-
end
63-
64-
def add_relationship(resource, name, serializer, val=nil)
65-
resource[:relationships] ||= {}
66-
67-
resource[:relationships][name] ||= {}
68-
resource[:relationships][name][:data] = if val
69-
val
70-
elsif serializer && serializer.object
71-
resource_identifier(serializer)
72-
else
73-
nil
74-
end
75-
end
76-
7758
def add_included(resource_name, serializers, parent = nil)
7859
unless serializers.respond_to?(:each)
7960
return unless serializers.object
@@ -148,22 +129,24 @@ def check_assoc(assoc)
148129
def add_resource_relationships(attrs, serializer, options = {})
149130
options[:add_included] = options.fetch(:add_included, true)
150131

132+
attrs[:relationships] ||= {} if serializer.associations.any?
151133
serializer.associations.each do |association|
152134
key = association.key
153135
serializer = association.serializer
154136
opts = association.options
155-
156-
attrs[:relationships] ||= {}
157-
158-
if serializer.respond_to?(:each)
159-
add_relationships(attrs, key, serializer)
160-
else
161-
if opts[:virtual_value]
162-
add_relationship(attrs, key, nil, opts[:virtual_value])
163-
else
164-
add_relationship(attrs, key, serializer)
165-
end
166-
end
137+
value = if serializer.respond_to?(:each)
138+
serializer.map { |s| resource_identifier(s) }
139+
else
140+
if opts[:virtual_value]
141+
opts[:virtual_value]
142+
elsif serializer && serializer.object
143+
resource_identifier(serializer)
144+
else
145+
nil
146+
end
147+
end
148+
149+
attrs[:relationships][association.key] = { data: value }
167150

168151
if options[:add_included]
169152
Array(serializer).each do |s|

0 commit comments

Comments
 (0)