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(':', '')}}"