mirror of
https://github.com/ditkrg/rswag.git
synced 2026-01-22 22:06:43 +00:00
add upgrade parameters refs to openapi3
This commit is contained in:
parent
70eb277e04
commit
9414ca16b6
@ -3,6 +3,7 @@
|
||||
require 'active_support/core_ext/hash/slice'
|
||||
require 'active_support/core_ext/hash/conversions'
|
||||
require 'json'
|
||||
require 'byebug'
|
||||
|
||||
module Rswag
|
||||
module Specs
|
||||
@ -54,12 +55,39 @@ module Rswag
|
||||
end
|
||||
|
||||
def resolve_parameter(ref, swagger_doc)
|
||||
key = ref.sub('#/parameters/', '').to_sym
|
||||
definitions = swagger_doc[:parameters]
|
||||
key = key_version(ref, swagger_doc)
|
||||
definitions = definition_version(swagger_doc)
|
||||
|
||||
raise "Referenced parameter '#{ref}' must be defined" unless definitions && definitions[key]
|
||||
definitions[key]
|
||||
end
|
||||
|
||||
def key_version(ref, swagger_doc)
|
||||
if doc_version(swagger_doc).start_with?('2')
|
||||
ref.sub('#/parameters/', '').to_sym
|
||||
else # Openapi3
|
||||
if ref.start_with?('#/parameters/')
|
||||
ActiveSupport::Deprecation.warn('Rswag::Specs: WARNING: #/parameters/ refs are replaced in OpenAPI3! Rename to #/components/parameters/')
|
||||
ref.sub('#/parameters/', '').to_sym
|
||||
else
|
||||
ref.sub('#/components/parameters/', '').to_sym
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def definition_version(swagger_doc)
|
||||
if doc_version(swagger_doc).start_with?('2')
|
||||
swagger_doc[:parameters]
|
||||
else # Openapi3
|
||||
if swagger_doc.has_key?(:parameters)
|
||||
swagger_doc[:parameters]
|
||||
else
|
||||
components = swagger_doc[:components] || {}
|
||||
components[:parameters]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def add_verb(request, metadata)
|
||||
request[:verb] = metadata[:operation][:verb]
|
||||
end
|
||||
@ -167,6 +195,10 @@ module Rswag
|
||||
# source_body_param ||= body_param[:param_value]
|
||||
# source_body_param ? source_body_param.to_json : nil
|
||||
# end
|
||||
|
||||
def doc_version(doc)
|
||||
doc[:openapi] || doc[:swagger] || '3'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -66,7 +66,7 @@ module Rswag
|
||||
# end
|
||||
|
||||
def definitions_or_component_schemas(swagger_doc, version)
|
||||
if version.starts_with?('2')
|
||||
if version.start_with?('2')
|
||||
swagger_doc.slice(:definitions)
|
||||
else # Openapi3
|
||||
if swagger_doc.has_key?(:definitions)
|
||||
|
||||
@ -34,7 +34,7 @@ module Rswag
|
||||
|
||||
swagger_doc = @config.get_swagger_doc(metadata[:swagger_doc])
|
||||
|
||||
if doc_version(swagger_doc).starts_with?('3')
|
||||
if !doc_version(swagger_doc).start_with?('2')
|
||||
upgrade_request_type!(metadata)
|
||||
end
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ module Rswag
|
||||
allow(config).to receive(:get_swagger_doc).and_return(swagger_doc)
|
||||
end
|
||||
let(:config) { double('config') }
|
||||
let(:swagger_doc) { {} }
|
||||
let(:swagger_doc) { { swagger: '2.0' } }
|
||||
let(:example) { double('example') }
|
||||
let(:metadata) do
|
||||
{
|
||||
@ -314,14 +314,45 @@ module Rswag
|
||||
end
|
||||
|
||||
context 'referenced parameters' do
|
||||
before do
|
||||
swagger_doc[:parameters] = { q1: { name: 'q1', in: :query, type: :string } }
|
||||
metadata[:operation][:parameters] = [ { '$ref' => '#/parameters/q1' } ]
|
||||
allow(example).to receive(:q1).and_return('foo')
|
||||
context 'swagger 2.0' do
|
||||
before do
|
||||
swagger_doc[:parameters] = { q1: { name: 'q1', in: :query, type: :string } }
|
||||
metadata[:operation][:parameters] = [ { '$ref' => '#/parameters/q1' } ]
|
||||
allow(example).to receive(:q1).and_return('foo')
|
||||
end
|
||||
|
||||
it 'uses the referenced metadata to build the request' do
|
||||
expect(request[:path]).to eq('/blogs?q1=foo')
|
||||
end
|
||||
end
|
||||
|
||||
it 'uses the referenced metadata to build the request' do
|
||||
expect(request[:path]).to eq('/blogs?q1=foo')
|
||||
context 'openapi 3.0.1' do
|
||||
let(:swagger_doc) { { openapi: '3.0.1' } }
|
||||
before do
|
||||
swagger_doc[:components] = { parameters: { q1: { name: 'q1', in: :query, type: :string } } }
|
||||
metadata[:operation][:parameters] = [ { '$ref' => '#/components/parameters/q1' } ]
|
||||
allow(example).to receive(:q1).and_return('foo')
|
||||
end
|
||||
|
||||
it 'uses the referenced metadata to build the request' do
|
||||
expect(request[:path]).to eq('/blogs?q1=foo')
|
||||
end
|
||||
end
|
||||
|
||||
context 'openapi 3.0.1 upgrade notice' do
|
||||
let(:swagger_doc) { { openapi: '3.0.1' } }
|
||||
before do
|
||||
allow(ActiveSupport::Deprecation).to receive(:warn)
|
||||
swagger_doc[:parameters] = { q1: { name: 'q1', in: :query, type: :string } }
|
||||
metadata[:operation][:parameters] = [ { '$ref' => '#/parameters/q1' } ]
|
||||
allow(example).to receive(:q1).and_return('foo')
|
||||
end
|
||||
|
||||
it 'warns the user to upgrade' do
|
||||
expect(request[:path]).to eq('/blogs?q1=foo')
|
||||
expect(ActiveSupport::Deprecation).to have_received(:warn)
|
||||
.with('Rswag::Specs: WARNING: #/parameters/ refs are replaced in OpenAPI3! Rename to #/components/parameters/')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user