@@ -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