@@ -188,10 +188,46 @@ def get_schema(field)
188188 end
189189
190190 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+ binding . pry
230+ parameters . values + extract_unknown_parameters ( example , query : false )
195231 end
196232
197233 def extract_request_body ( example )
@@ -210,7 +246,7 @@ def extract_request_body(example)
210246
211247 schema = get_schema ( body )
212248 example . extended_parameters . select { |p | p [ :in ] . nil? } . each do |parameter |
213- inject_body_parameter ( schema , parameter )
249+ inject_schema_parameter ( schema , parameter )
214250 end
215251
216252 OpenApi ::RequestBody . new (
@@ -225,6 +261,7 @@ def extract_parameter(opts)
225261 OpenApi ::Parameter . new (
226262 name : opts [ :name ] ,
227263 in : opts [ :in ] ,
264+ style : opts [ :style ] ,
228265 description : opts [ :description ] ,
229266 required : opts [ :required ] ,
230267 deprecated : opts [ :deprecated ] ,
@@ -233,10 +270,10 @@ def extract_parameter(opts)
233270 )
234271 end
235272
236- def extract_unknown_parameters ( example )
273+ def extract_unknown_parameters ( example , query : true , headers : true )
237274 parameters = [ ]
238275 example . requests . each do |req |
239- req [ :request_query_parameters ] . each do |name , value |
276+ query && req [ :request_query_parameters ] . each do |name , value |
240277 parameters . push ( OpenApi ::Parameter . new (
241278 name : name ,
242279 in : :query ,
@@ -245,7 +282,7 @@ def extract_unknown_parameters(example)
245282 example : value
246283 ) )
247284 end
248- req [ :request_headers ] . each do |name , value |
285+ headers && req [ :request_headers ] . each do |name , value |
249286 parameters . push ( OpenApi ::Parameter . new (
250287 name : name ,
251288 in : :header ,
@@ -262,7 +299,7 @@ def extract_known_parameters(parameters)
262299 . map { |parameter | extract_parameter ( parameter ) }
263300 end
264301
265- def inject_body_parameter ( schema , parameter )
302+ def inject_schema_parameter ( schema , parameter )
266303 scope = schema
267304 parameter [ :scope ] && Array ( parameter [ :scope ] ) . each do |curr |
268305 scope . properties [ curr . to_s ] ||= OpenApi ::Schema . new ( type : 'object' , properties : { } )
@@ -272,8 +309,9 @@ def inject_body_parameter(schema, parameter)
272309 return unless scope . properties
273310
274311 if parameter [ :required ]
312+ name = parameter [ :name ] . to_s
275313 scope . required ||= [ ]
276- scope . required << parameter [ : name] . to_s
314+ scope . required << name unless scope . required . include? ( name )
277315 end
278316
279317 scope . properties [ parameter [ :name ] . to_s ] ||= get_schema ( parameter [ :value ] )
0 commit comments