lib/rspec/rails/api/open_api_renderer.rb in rspec-rails-api-0.2.2 vs lib/rspec/rails/api/open_api_renderer.rb in rspec-rails-api-0.2.3
- old
+ new
@@ -140,11 +140,12 @@
if %i[post put patch].include? action_config
if path_config[:actions][action_config][:params].keys.count.positive?
schema = path_config[:actions][action_config][:params]
schema_ref = escape_operation_id("#{action_config}_#{path}")
- request_body = process_request_body schema: schema, ref: schema_ref
+ examples = process_examples(path_config[:actions][action_config][:statuses])
+ request_body = process_request_body schema: schema, ref: schema_ref, examples: examples
end
end
path_config[:actions][action_config][:statuses].each do |status_key, status|
content = status[:example][:response]
@@ -164,36 +165,50 @@
action
end
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
- def process_request_body(schema: nil, ref: nil)
+ def process_request_body(schema: nil, ref: nil, examples: {})
Utils.deep_set @api_components, "schemas.#{ref}", schema
{
# description: '',
required: true,
content: {
'application/json' => {
- schema: { '$ref' => "#/components/schemas/#{ref}" },
+ schema: { '$ref' => "#/components/schemas/#{ref}" },
+ examples: examples,
},
},
}
end
def process_response(status: nil, status_config: nil, content: nil)
response = {
description: status_config[:description],
}
- return response unless status.to_s != '204' && content # No content
+ return response if status.to_s == '204' && content # No content
response[:content] = {
'application/json': {
examples: { default: { value: JSON.pretty_generate(JSON.parse(content)) } },
},
}
response
+ end
+
+ def process_examples(statuses)
+ request_examples = {}
+
+ statuses.each do |code, request|
+ request_examples[code] = {
+ summary: "Example for a #{code} code",
+ value: request[:example][:params],
+ }
+ end
+
+ request_examples
end
def path_with_params(string)
string.gsub(/(?::(\w*))/) do |e|
"{#{e.sub(':', '')}}"