@@ -172,19 +172,28 @@ def properties_for_param(prefix, definition)
172
172
properties_for_ref ( prefix , definition [ 'name' ] , definition , required )
173
173
end
174
174
175
- def properties_for_ref ( prefix , name , schema , required , list = false )
175
+ # rubocop:disable Metrics/ParameterLists
176
+ def add_property ( ret , prefix , name , schema , required , list )
176
177
key = "#{ prefix } #{ name } "
178
+ ret [ :required ] . add ( key ) if required && required . include? ( name )
179
+ loc = if schema [ 'in' ]
180
+ schema [ 'in' ]
181
+ else
182
+ 'body'
183
+ end
184
+ ret [ :all ] . add ( "#{ key } (in: #{ loc } , type: #{ schema [ 'type' ] } #{ '[]' if list } )" )
185
+ end
186
+ # rubocop:enable Metrics/ParameterLists
187
+
188
+ def properties_for_ref ( prefix , name , schema , required , list = false )
177
189
ret = { required : Set . new , all : Set . new }
178
- if schema . key? ( '$ref' )
190
+ if schema [ '$ref' ]
179
191
merge_refs! ( ret , nested ( schema [ '$ref' ] , prefix , name , list ) )
192
+ elsif schema [ 'properties' ]
193
+ prefix = "#{ name } #{ '[]' if list } /"
194
+ merge_refs! ( ret , properties ( schema [ 'properties' ] , schema [ 'required' ] , prefix ) )
180
195
else
181
- ret [ :required ] . add ( key ) if required && required . include? ( name )
182
- loc = if schema [ 'in' ]
183
- schema [ 'in' ]
184
- else
185
- 'body'
186
- end
187
- ret [ :all ] . add ( "#{ key } (in: #{ loc } , type: #{ schema [ 'type' ] } #{ '[]' if list } )" )
196
+ add_property ( ret , prefix , name , schema , required , list )
188
197
end
189
198
ret
190
199
end
@@ -211,16 +220,15 @@ def hash_property(definition, prefix, name = '')
211
220
"#{ key } (in: body, type: Hash[string, #{ type } ])"
212
221
end
213
222
214
- # rubocop:disable Metrics/CyclomaticComplexity
215
223
def properties ( properties , required , prefix = '' )
216
224
ret = { required : Set . new , all : Set . new }
217
225
properties . each do |name , schema |
218
226
if schema [ 'type' ] == 'array'
219
227
merge_refs! ( ret , properties_for_ref ( prefix , name , schema [ 'items' ] , required , true ) )
220
- elsif schema [ 'type' ] == 'object'
228
+ elsif schema [ 'type' ] == 'object' || schema [ 'properties' ]
221
229
if schema [ 'allOf' ]
222
230
# TODO: handle nested allOfs.
223
- elsif schema [ 'type' ] && schema [ 'type' ] == 'object' && schema [ ' properties']
231
+ elsif schema [ 'properties' ]
224
232
merge_refs! ( ret , properties ( schema [ 'properties' ] , required , "#{ prefix } #{ name } /" ) )
225
233
else
226
234
ret [ :all ] . add ( hash_property ( schema , prefix , name ) )
@@ -231,7 +239,6 @@ def properties(properties, required, prefix = '')
231
239
end
232
240
ret
233
241
end
234
- # rubocop:enable Metrics/CyclomaticComplexity
235
242
236
243
def request_params_inner ( params )
237
244
ret = { required : Set . new , all : Set . new }
0 commit comments