mirror of
https://github.com/ditkrg/rswag.git
synced 2026-01-25 15:22:56 +00:00
Add upgrades for consumes and produces in content with schemas
This commit is contained in:
@@ -149,11 +149,6 @@ module Rswag
|
||||
def schema(value)
|
||||
metadata[:response][:schema] = value
|
||||
end
|
||||
## OA3
|
||||
# def schema(value, content_type: 'application/json')
|
||||
# content_hash = {content_type => {schema: value}}
|
||||
# metadata[:response][:content] = content_hash
|
||||
# end
|
||||
|
||||
def header(name, attributes)
|
||||
metadata[:response][:headers] ||= {}
|
||||
|
||||
@@ -41,13 +41,10 @@ module Rswag
|
||||
def validate_body!(metadata, swagger_doc, body)
|
||||
response_schema = metadata[:response][:schema]
|
||||
return if response_schema.nil?
|
||||
## OA3
|
||||
# test_schemas = extract_schemas(metadata)
|
||||
# return if test_schemas.nil? || test_schemas.empty?
|
||||
|
||||
version = @config.get_swagger_doc_version(metadata[:swagger_doc])
|
||||
schemas = definitions_or_component_schemas(swagger_doc, version)
|
||||
|
||||
# validation_schema = test_schemas[:schema] # response_schema
|
||||
validation_schema = response_schema
|
||||
.merge('$schema' => 'http://tempuri.org/rswag/specs/extended_schema')
|
||||
.merge(schemas)
|
||||
@@ -55,15 +52,6 @@ module Rswag
|
||||
errors = JSON::Validator.fully_validate(validation_schema, body)
|
||||
raise UnexpectedResponse, "Expected response body to match schema: #{errors[0]}" if errors.any?
|
||||
end
|
||||
## OA3
|
||||
# def extract_schemas(metadata)
|
||||
# metadata[:operation] = {produces: []} if metadata[:operation].nil?
|
||||
# produces = Array(metadata[:operation][:produces])
|
||||
|
||||
# producer_content = produces.first || 'application/json'
|
||||
# response_content = metadata[:response][:content] || {producer_content => {}}
|
||||
# response_content[producer_content]
|
||||
# end
|
||||
|
||||
def definitions_or_component_schemas(swagger_doc, version)
|
||||
if version.start_with?('2')
|
||||
|
||||
@@ -37,6 +37,8 @@ module Rswag
|
||||
upgrade_request_type!(metadata)
|
||||
upgrade_servers!(swagger_doc)
|
||||
upgrade_oauth!(swagger_doc)
|
||||
upgrade_request_consumes!(swagger_doc, metadata)
|
||||
upgrade_response_produces!(swagger_doc, metadata)
|
||||
end
|
||||
|
||||
swagger_doc.deep_merge!(metadata_to_swagger(metadata))
|
||||
@@ -79,6 +81,32 @@ module Rswag
|
||||
|
||||
private
|
||||
|
||||
def upgrade_request_consumes!(swagger_doc, metadata)
|
||||
# Content-Type header
|
||||
mime_list = Array(metadata[:operation].delete(:consumes) || swagger_doc[:consumes])
|
||||
target_node = metadata[:response]
|
||||
upgrade_content!(mime_list, target_node)
|
||||
end
|
||||
|
||||
def upgrade_response_produces!(swagger_doc, metadata)
|
||||
# Accept header
|
||||
mime_list = Array(metadata[:operation].delete(:produces) || swagger_doc[:produces])
|
||||
target_node = metadata[:response]
|
||||
upgrade_content!(mime_list, target_node)
|
||||
metadata[:response].delete(:schema)
|
||||
end
|
||||
|
||||
def upgrade_content!(mime_list, target_node)
|
||||
target_node.merge!(content: {})
|
||||
schema = target_node[:schema]
|
||||
return if mime_list.empty?
|
||||
|
||||
mime_list.each do |mime_type|
|
||||
# TODO upgrade to have content-type specific schema
|
||||
target_node[:content][mime_type] = { schema: schema }
|
||||
end
|
||||
end
|
||||
|
||||
def pretty_generate(doc)
|
||||
if @config.swagger_format == :yaml
|
||||
clean_doc = yaml_prepare(doc)
|
||||
|
||||
Reference in New Issue
Block a user