Skip to content

Commit 91c5cbe

Browse files
committed
Cleanup add_included.
1 parent f7612f2 commit 91c5cbe

File tree

1 file changed

+20
-19
lines changed

1 file changed

+20
-19
lines changed

lib/active_model/serializer/adapter/json_api.rb

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ def initialize(serializer, options = {})
99
super
1010
@hash = { data: [] }
1111

12+
@options[:include] ||= []
13+
if @options[:include].is_a?(String)
14+
@options[:include] = @options[:include].split(',')
15+
end
16+
1217
if fields = options.delete(:fields)
1318
@fieldset = ActiveModel::Serializer::Fieldset.new(fields, serializer.json_key)
1419
else
@@ -119,47 +124,43 @@ def add_included_relationships(serializer)
119124
end
120125
end
121126

122-
def add_included(resource_name, serializers, parent = nil)
123-
unless serializers.respond_to?(:each)
124-
return unless serializers.object
125-
serializers = Array(serializers)
127+
def add_included(resource_name, serializer, parent = nil)
128+
if serializer.respond_to?(:each)
129+
serializer.each { |s| add_included(resource_name, s, parent) }
130+
return
131+
else
132+
return unless serializer.object
126133
end
134+
127135
resource_path = [parent, resource_name].compact.join('.')
136+
128137
if include_assoc?(resource_path)
129138
@hash[:included] ||= []
130139

131-
serializers.each do |serializer|
132-
attrs = attributes_for(serializer, @options)
133-
relationships = relationships_for(serializer)
134-
attrs[:relationships] = relationships if relationships.any?
140+
attrs = attributes_for(serializer, @options)
141+
relationships = relationships_for(serializer)
142+
attrs[:relationships] = relationships if relationships.any?
135143

136-
@hash[:included].push(attrs) unless @hash[:included].include?(attrs)
137-
end
144+
@hash[:included].push(attrs) unless @hash[:included].include?(attrs)
138145
end
139146

140-
serializers.each do |serializer|
147+
if include_nested_assoc?(resource_path)
141148
serializer.associations.each do |association|
142149
add_included(association.key, association.serializer, resource_path) if association.serializer
143-
end if include_nested_assoc?(resource_path)
150+
end
144151
end
145152
end
146153

147154
def include_assoc?(assoc)
148-
return false unless @options[:include]
149155
check_assoc("#{assoc}$")
150156
end
151157

152158
def include_nested_assoc?(assoc)
153-
return false unless @options[:include]
154159
check_assoc("#{assoc}.")
155160
end
156161

157162
def check_assoc(assoc)
158-
include_opt = @options[:include]
159-
include_opt = include_opt.split(',') if include_opt.is_a?(String)
160-
include_opt.any? do |s|
161-
s.match(/^#{assoc.gsub('.', '\.')}/)
162-
end
163+
@options[:include].any? { |s| s.match(/^#{assoc.gsub('.', '\.')}/) }
163164
end
164165

165166
def add_links(options)

0 commit comments

Comments
 (0)