File tree 1 file changed +20
-1
lines changed
lib/rspec_api_documentation/writers
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)
208
208
body = example . requests . map { |req | JSON . parse ( req [ :request_body ] ) rescue nil } . compact . reduce ( { } , :merge )
209
209
return nil if body . empty?
210
210
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
+
211
216
OpenApi ::RequestBody . new (
212
217
content : {
213
- 'application/json' => OpenApi ::Media . new ( schema : get_schema ( body ) , example : body )
218
+ 'application/json' => OpenApi ::Media . new ( schema : schema , example : body )
214
219
}
215
220
)
216
221
end
@@ -255,6 +260,20 @@ def extract_known_parameters(parameters)
255
260
parameters . select { |parameter | %w( query path header cookie ) . include? ( parameter [ :in ] . to_s ) }
256
261
. map { |parameter | extract_parameter ( parameter ) }
257
262
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
258
277
end
259
278
260
279
class OpenApiExample
You can’t perform that action at this time.
0 commit comments