File tree Expand file tree Collapse file tree 1 file changed +20
-1
lines changed
lib/rspec_api_documentation/writers Expand file tree Collapse file tree 1 file changed +20
-1
lines changed Original file line number Diff line number Diff line change @@ -208,9 +208,14 @@ def extract_request_body(example)
208208 body = example . requests . map { |req | JSON . parse ( req [ :request_body ] ) rescue nil } . compact . reduce ( { } , :merge )
209209 return nil if body . empty?
210210
211+ schema = get_schema ( body )
212+ example . extended_parameters . select { |p | p [ :in ] . nil? } . each do |parameter |
213+ inject_body_parameter ( schema , parameter )
214+ end
215+
211216 OpenApi ::RequestBody . new (
212217 content : {
213- 'application/json' => OpenApi ::Media . new ( schema : get_schema ( body ) , example : body )
218+ 'application/json' => OpenApi ::Media . new ( schema : schema , example : body )
214219 }
215220 )
216221 end
@@ -255,6 +260,20 @@ def extract_known_parameters(parameters)
255260 parameters . select { |parameter | %w( query path header cookie ) . include? ( parameter [ :in ] . to_s ) }
256261 . map { |parameter | extract_parameter ( parameter ) }
257262 end
263+
264+ def inject_body_parameter ( schema , parameter )
265+ scope = schema
266+ parameter [ :scope ] && Array ( parameter [ :scope ] ) . each do |curr |
267+ scope . properties [ curr . to_s ] ||= OpenApi ::Schema . new ( type : 'object' , properties : { } )
268+ scope = scope . properties [ curr . to_s ]
269+ end
270+
271+ scope . required ||= [ ]
272+ scope . required << parameter [ :name ] . to_s if parameter [ :required ]
273+
274+ scope . properties [ parameter [ :name ] . to_s ] ||= get_schema ( parameter [ :value ] )
275+ scope . properties [ parameter [ :name ] . to_s ] . description = parameter [ :description ] if parameter [ :description ]
276+ end
258277 end
259278
260279 class OpenApiExample
You can’t perform that action at this time.
0 commit comments