@@ -188,10 +188,45 @@ def get_schema(field)
188
188
end
189
189
190
190
def extract_parameters ( example )
191
- known_parameters = extract_known_parameters ( example . extended_parameters . reject { |p | p [ :in ] . nil? } )
192
- known_param_names = known_parameters . map { |p | p . name }
193
- unknown_parameters = extract_unknown_parameters ( example ) . reject { |p | known_param_names . include? ( p . name ) }
194
- known_parameters + unknown_parameters
191
+ if example . http_method != :get
192
+ known_parameters = extract_known_parameters ( example . extended_parameters . reject { |p | p [ :in ] . nil? } )
193
+ known_param_names = known_parameters . map { |p | p . name }
194
+ unknown_parameters = extract_unknown_parameters ( example ) . reject { |p | known_param_names . include? ( p . name ) }
195
+ return known_parameters + unknown_parameters
196
+ end
197
+
198
+ parameters = example . extended_parameters . map . to_h do |parameter |
199
+ opts = if parameter [ :scope ] && !parameter [ :in ]
200
+ {
201
+ **parameter ,
202
+ name : Array ( parameter [ :scope ] ) . first ,
203
+ description : nil ,
204
+ value : { } ,
205
+ style : :deepObject ,
206
+ in : :query ,
207
+ }
208
+ else
209
+ {
210
+ in : :query ,
211
+ **parameter ,
212
+ }
213
+ end
214
+
215
+ [ opts [ :name ] . to_sym , extract_parameter ( opts ) ]
216
+ end
217
+
218
+ example . extended_parameters . each do |parameter |
219
+ next unless parameter [ :scope ]
220
+
221
+ scope = Array ( parameter [ :scope ] )
222
+ schema = parameters [ scope . shift . to_sym ] . schema
223
+ inject_schema_parameter ( schema , {
224
+ **parameter ,
225
+ scope : scope ,
226
+ } )
227
+ end
228
+
229
+ parameters . values + extract_unknown_parameters ( example , query : false )
195
230
end
196
231
197
232
def extract_request_body ( example )
@@ -210,7 +245,7 @@ def extract_request_body(example)
210
245
211
246
schema = get_schema ( body )
212
247
example . extended_parameters . select { |p | p [ :in ] . nil? } . each do |parameter |
213
- inject_body_parameter ( schema , parameter )
248
+ inject_schema_parameter ( schema , parameter )
214
249
end
215
250
216
251
OpenApi ::RequestBody . new (
@@ -225,6 +260,7 @@ def extract_parameter(opts)
225
260
OpenApi ::Parameter . new (
226
261
name : opts [ :name ] ,
227
262
in : opts [ :in ] ,
263
+ style : opts [ :style ] ,
228
264
description : opts [ :description ] ,
229
265
required : opts [ :required ] ,
230
266
deprecated : opts [ :deprecated ] ,
@@ -233,10 +269,10 @@ def extract_parameter(opts)
233
269
)
234
270
end
235
271
236
- def extract_unknown_parameters ( example )
272
+ def extract_unknown_parameters ( example , query : true , headers : true )
237
273
parameters = [ ]
238
274
example . requests . each do |req |
239
- req [ :request_query_parameters ] . each do |name , value |
275
+ query && req [ :request_query_parameters ] . each do |name , value |
240
276
parameters . push ( OpenApi ::Parameter . new (
241
277
name : name ,
242
278
in : :query ,
@@ -245,7 +281,7 @@ def extract_unknown_parameters(example)
245
281
example : value
246
282
) )
247
283
end
248
- req [ :request_headers ] . each do |name , value |
284
+ headers && req [ :request_headers ] . each do |name , value |
249
285
parameters . push ( OpenApi ::Parameter . new (
250
286
name : name ,
251
287
in : :header ,
@@ -262,7 +298,7 @@ def extract_known_parameters(parameters)
262
298
. map { |parameter | extract_parameter ( parameter ) }
263
299
end
264
300
265
- def inject_body_parameter ( schema , parameter )
301
+ def inject_schema_parameter ( schema , parameter )
266
302
scope = schema
267
303
parameter [ :scope ] && Array ( parameter [ :scope ] ) . each do |curr |
268
304
scope . properties [ curr . to_s ] ||= OpenApi ::Schema . new ( type : 'object' , properties : { } )
@@ -272,8 +308,9 @@ def inject_body_parameter(schema, parameter)
272
308
return unless scope . properties
273
309
274
310
if parameter [ :required ]
311
+ name = parameter [ :name ] . to_s
275
312
scope . required ||= [ ]
276
- scope . required << parameter [ : name] . to_s
313
+ scope . required << name unless scope . required . include? ( name )
277
314
end
278
315
279
316
scope . properties [ parameter [ :name ] . to_s ] ||= get_schema ( parameter [ :value ] )
0 commit comments