@@ -9,6 +9,11 @@ def initialize(serializer, options = {})
9
9
super
10
10
@hash = { data : [ ] }
11
11
12
+ @options [ :include ] ||= [ ]
13
+ if @options [ :include ] . is_a? ( String )
14
+ @options [ :include ] = @options [ :include ] . split ( ',' )
15
+ end
16
+
12
17
if fields = options . delete ( :fields )
13
18
@fieldset = ActiveModel ::Serializer ::Fieldset . new ( fields , serializer . json_key )
14
19
else
@@ -119,47 +124,43 @@ def add_included_relationships(serializer)
119
124
end
120
125
end
121
126
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
126
133
end
134
+
127
135
resource_path = [ parent , resource_name ] . compact . join ( '.' )
136
+
128
137
if include_assoc? ( resource_path )
129
138
@hash [ :included ] ||= [ ]
130
139
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?
135
143
136
- @hash [ :included ] . push ( attrs ) unless @hash [ :included ] . include? ( attrs )
137
- end
144
+ @hash [ :included ] . push ( attrs ) unless @hash [ :included ] . include? ( attrs )
138
145
end
139
146
140
- serializers . each do | serializer |
147
+ if include_nested_assoc? ( resource_path )
141
148
serializer . associations . each do |association |
142
149
add_included ( association . key , association . serializer , resource_path ) if association . serializer
143
- end if include_nested_assoc? ( resource_path )
150
+ end
144
151
end
145
152
end
146
153
147
154
def include_assoc? ( assoc )
148
- return false unless @options [ :include ]
149
155
check_assoc ( "#{ assoc } $" )
150
156
end
151
157
152
158
def include_nested_assoc? ( assoc )
153
- return false unless @options [ :include ]
154
159
check_assoc ( "#{ assoc } ." )
155
160
end
156
161
157
162
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 ( '.' , '\.' ) } / ) }
163
164
end
164
165
165
166
def add_links ( options )
0 commit comments