Compare commits

..

No commits in common. "master" and "2.4.0" have entirely different histories.

13 changed files with 20 additions and 71 deletions

View File

@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
ruby: [2.6, 2.7, truffleruby-head] ruby: [2.6, 2.7]
rails: [5.2.4.4, 6.0.3.4] rails: [5.2.4.4, 6.0.3.4]
env: env:
RAILS_VERSION: ${{ matrix.rails }} RAILS_VERSION: ${{ matrix.rails }}
@ -31,7 +31,6 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: | run: |
gem update --system
bundle install bundle install
cd rswag-ui && npm install cd rswag-ui && npm install

View File

@ -5,9 +5,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
## [Unreleased] ## [Unreleased]
### Changed
- Update swagger-ui to 3.52.5
## [2.4.0] - 2021-02-09 ## [2.4.0] - 2021-02-09
### Added ### Added
- Added `SWAGGER_DRY_RUN` env variable [#274](https://github.com/rswag/rswag/pull/274) - Added `SWAGGER_DRY_RUN` env variable [#274](https://github.com/rswag/rswag/pull/274)

View File

@ -25,25 +25,23 @@ end
gem 'rswag-api', path: './rswag-api' gem 'rswag-api', path: './rswag-api'
gem 'rswag-ui', path: './rswag-ui' gem 'rswag-ui', path: './rswag-ui'
group :development, :test do
gem 'rswag-specs', path: './rswag-specs'
end
group :test do group :test do
gem 'capybara' gem 'capybara'
gem 'geckodriver-helper' gem 'geckodriver-helper'
gem 'generator_spec' gem 'generator_spec'
gem 'rspec-rails' gem 'rspec-rails'
gem 'selenium-webdriver' gem 'selenium-webdriver'
gem 'rswag-specs', path: './rswag-specs'
gem 'test-unit' gem 'test-unit'
end end
group :development do group :development do
gem 'rswag-specs', path: './rswag-specs'
gem 'rubocop' gem 'rubocop'
end end
group :assets do group :assets do
gem 'mini_racer' gem 'therubyracer'
gem 'uglifier' gem 'uglifier'
end end

View File

@ -5,8 +5,6 @@ rswag
OpenApi 3.0 and Swagger 2.0 compatible! OpenApi 3.0 and Swagger 2.0 compatible!
Seeking maintainers! Got a pet-bug that needs fixing? Just let us know in your issue/pr that you'd like to step up to help.
Rswag extends rspec-rails "request specs" with a Swagger-based DSL for describing and testing API operations. You describe your API operations with a succinct, intuitive syntax, and it automaticaly runs the tests. Once you have green tests, run a rake task to auto-generate corresponding Swagger files and expose them as YAML or JSON endpoints. Rswag also provides an embedded version of the awesome [swagger-ui](https://github.com/swagger-api/swagger-ui) that's powered by the exposed file. This toolchain makes it seamless to go from integration specs, which youre probably doing in some form already, to living documentation for your API consumers. Rswag extends rspec-rails "request specs" with a Swagger-based DSL for describing and testing API operations. You describe your API operations with a succinct, intuitive syntax, and it automaticaly runs the tests. Once you have green tests, run a rake task to auto-generate corresponding Swagger files and expose them as YAML or JSON endpoints. Rswag also provides an embedded version of the awesome [swagger-ui](https://github.com/swagger-api/swagger-ui) that's powered by the exposed file. This toolchain makes it seamless to go from integration specs, which youre probably doing in some form already, to living documentation for your API consumers.
Api Rswag creates [Swagger](http://swagger.io) tooling for Rails API's. Generate beautiful API documentation, including a UI to explore and test operations, directly from your rspec integration tests. Api Rswag creates [Swagger](http://swagger.io) tooling for Rails API's. Generate beautiful API documentation, including a UI to explore and test operations, directly from your rspec integration tests.
@ -20,7 +18,7 @@ Once you have an API that can describe itself in Swagger, you've opened the trea
|Rswag Version|Swagger (OpenAPI) Spec.|swagger-ui| |Rswag Version|Swagger (OpenAPI) Spec.|swagger-ui|
|----------|----------|----------| |----------|----------|----------|
|[master](https://github.com/rswag/rswag/tree/master)|3.0.3|3.52.5| |[master](https://github.com/rswag/rswag/tree/master)|3.0.3|3.42.0|
|[2.3.0](https://github.com/rswag/rswag/tree/2.3.0)|3.0.3|3.23.11| |[2.3.0](https://github.com/rswag/rswag/tree/2.3.0)|3.0.3|3.23.11|
|[2.2.0](https://github.com/rswag/rswag/tree/2.2.0)|2.0|3.18.2| |[2.2.0](https://github.com/rswag/rswag/tree/2.2.0)|2.0|3.18.2|
|[1.6.0](https://github.com/rswag/rswag/tree/1.6.0)|2.0|2.2.5| |[1.6.0](https://github.com/rswag/rswag/tree/1.6.0)|2.0|2.2.5|
@ -138,7 +136,7 @@ There is also a generator which can help get you started `rails generate rspec:s
path '/blogs/{id}' do path '/blogs/{id}' do
get 'Retrieves a blog' do get 'Retrieves a blog' do
tags 'Blogs', 'Another Tag' tags 'Blogs'
produces 'application/json', 'application/xml' produces 'application/json', 'application/xml'
parameter name: :id, in: :path, type: :string parameter name: :id, in: :path, type: :string

View File

@ -15,5 +15,5 @@ Gem::Specification.new do |s|
s.files = Dir['{lib}/**/*'] + ['MIT-LICENSE', 'Rakefile'] s.files = Dir['{lib}/**/*'] + ['MIT-LICENSE', 'Rakefile']
s.add_dependency 'railties', '>= 3.1', '< 7.1' s.add_dependency 'railties', '>= 3.1', '< 7.0'
end end

View File

@ -194,36 +194,12 @@ module Rswag
def build_json_payload(parameters, example) def build_json_payload(parameters, example)
body_param = parameters.select { |p| p[:in] == :body }.first body_param = parameters.select { |p| p[:in] == :body }.first
body_param ? example.send(body_param[:name]).to_json : nil
return nil unless body_param
raise(MissingParameterError, body_param[:name]) unless example.respond_to?(body_param[:name])
example.send(body_param[:name]).to_json
end end
def doc_version(doc) def doc_version(doc)
doc[:openapi] || doc[:swagger] || '3' doc[:openapi] || doc[:swagger] || '3'
end end
end end
class MissingParameterError < StandardError
attr_reader :body_param
def initialize(body_param)
@body_param = body_param
end
def message
<<~MSG
Missing parameter '#{body_param}'
Please check your spec. It looks like you defined a body parameter,
but did not declare usage via let. Try adding:
let(:#{body_param}) {}
MSG
end
end
end end
end end

View File

@ -50,11 +50,7 @@ module Rswag
.merge(schemas) .merge(schemas)
errors = JSON::Validator.fully_validate(validation_schema, body) errors = JSON::Validator.fully_validate(validation_schema, body)
return unless errors.any? raise UnexpectedResponse, "Expected response body to match schema: #{errors[0]}" if errors.any?
raise UnexpectedResponse,
"Expected response body to match schema: #{errors[0]}\n" \
"Response body: #{JSON.pretty_generate(JSON.parse(body))}"
end end
def definitions_or_component_schemas(swagger_doc, version) def definitions_or_component_schemas(swagger_doc, version)
@ -66,7 +62,7 @@ module Rswag
swagger_doc.slice(:definitions) swagger_doc.slice(:definitions)
else else
components = swagger_doc[:components] || {} components = swagger_doc[:components] || {}
{ components: components } { components: { schemas: components[:schemas] } }
end end
end end
end end

View File

@ -15,7 +15,7 @@ Gem::Specification.new do |s|
s.files = Dir['{lib}/**/*'] + ['MIT-LICENSE', 'Rakefile'] s.files = Dir['{lib}/**/*'] + ['MIT-LICENSE', 'Rakefile']
s.add_dependency 'activesupport', '>= 3.1', '< 7.1' s.add_dependency 'activesupport', '>= 3.1', '< 7.0'
s.add_dependency 'railties', '>= 3.1', '< 7.1' s.add_dependency 'railties', '>= 3.1', '< 7.0'
s.add_dependency 'json-schema', '~> 2.2' s.add_dependency 'json-schema', '~> 2.2'
end end

View File

@ -160,21 +160,6 @@ module Rswag
end end
end end
context 'missing body parameter' do
before do
metadata[:operation][:parameters] = [{ name: 'comment', in: :body, schema: { type: 'object' } }]
allow(example).to receive(:comment).and_raise(NoMethodError, "undefined method 'comment'")
allow(example).to receive(:respond_to?).with(:'Content-Type')
allow(example).to receive(:respond_to?).with('comment').and_return(false)
end
it 'uses the referenced metadata to build the request' do
expect do
request[:payload]
end.to raise_error(Rswag::Specs::MissingParameterError, /Missing parameter 'comment'/)
end
end
context 'form payload' do context 'form payload' do
before do before do
metadata[:operation][:consumes] = ['multipart/form-data'] metadata[:operation][:consumes] = ['multipart/form-data']

View File

@ -5,9 +5,9 @@
"requires": true, "requires": true,
"dependencies": { "dependencies": {
"swagger-ui-dist": { "swagger-ui-dist": {
"version": "3.52.5", "version": "3.42.0",
"resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-3.52.5.tgz", "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-3.42.0.tgz",
"integrity": "sha512-8z18eX8G/jbTXYzyNIaobrnD7PSN7yU/YkSasMmajrXtw0FGS64XjrKn5v37d36qmU3o1xLeuYnktshRr7uIFw==" "integrity": "sha512-hTNX6cX7KWtBZgk6ZQSOzsBJhqdCmD5NOIjb6dBPKSnYZidSkIXOcaPMR3+kwxLrj8bDC881bSDlNbLsHikacg=="
} }
} }
} }

View File

@ -3,6 +3,6 @@
"version": "1.0.0", "version": "1.0.0",
"private": true, "private": true,
"dependencies": { "dependencies": {
"swagger-ui-dist": "3.52.5" "swagger-ui-dist": "3.42.0"
} }
} }

View File

@ -15,6 +15,6 @@ Gem::Specification.new do |s|
s.files = Dir.glob('{lib,node_modules}/**/*') + ['MIT-LICENSE', 'Rakefile' ] s.files = Dir.glob('{lib,node_modules}/**/*') + ['MIT-LICENSE', 'Rakefile' ]
s.add_dependency 'actionpack', '>=3.1', '< 7.1' s.add_dependency 'actionpack', '>=3.1', '< 7.0'
s.add_dependency 'railties', '>= 3.1', '< 7.1' s.add_dependency 'railties', '>= 3.1', '< 7.0'
end end