grape-swagger 0.32.1 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -2
- data/.rubocop_todo.yml +9 -10
- data/.travis.yml +4 -9
- data/CHANGELOG.md +9 -0
- data/Gemfile +3 -8
- data/README.md +39 -0
- data/grape-swagger.gemspec +1 -1
- data/lib/grape-swagger/doc_methods.rb +4 -2
- data/lib/grape-swagger/doc_methods/operation_id.rb +1 -1
- data/lib/grape-swagger/endpoint.rb +22 -12
- data/lib/grape-swagger/version.rb +1 -1
- data/spec/lib/operation_id_spec.rb +3 -0
- data/spec/lib/optional_object_spec.rb +0 -1
- data/spec/spec_helper.rb +4 -4
- data/spec/swagger_v2/api_swagger_v2_response_spec.rb +34 -0
- data/spec/swagger_v2/guarded_endpoint_spec.rb +81 -33
- metadata +4 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd05d00a2d4f16e3ecfa826aa0053928231d9e3f2e3316ea1f612c804284d858
|
4
|
+
data.tar.gz: 7b6637a45c95035939be0a52312f6f16f62bf1f67d788c1d1e6884b1611f6322
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05541a6f1670c730a7fb3c7c4acc422aeecdf562fc3f77477e0721628dac3aeec147ce0653d74a1a7560ddd36fc90075fae23ae58d1ed424445290e801d2856e
|
7
|
+
data.tar.gz: ac5ce4eadc5bc9dd4ecdac8bd514a339c9157b77f661c8e696c6a527dfc0a2d6d09acc8527351ac1ba0cbbf0e8894959baa5daa7eb0cd41997ca1b9dd9ddb065
|
data/.rubocop.yml
CHANGED
@@ -4,12 +4,12 @@ AllCops:
|
|
4
4
|
Exclude:
|
5
5
|
- vendor/**/*
|
6
6
|
- example/**/*
|
7
|
-
TargetRubyVersion: 2.
|
7
|
+
TargetRubyVersion: 2.6
|
8
8
|
|
9
9
|
Layout/EmptyLinesAroundArguments:
|
10
10
|
Enabled: false
|
11
11
|
|
12
|
-
Layout/
|
12
|
+
Layout/IndentFirstHashElement:
|
13
13
|
EnforcedStyle: consistent
|
14
14
|
|
15
15
|
Metrics/BlockLength:
|
data/.rubocop_todo.yml
CHANGED
@@ -1,18 +1,11 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on
|
3
|
+
# on 2019-06-05 12:13:59 +0000 using RuboCop version 0.71.0.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
-
# Offense count: 1
|
10
|
-
# Configuration parameters: Include.
|
11
|
-
# Include: **/*.gemfile, **/Gemfile, **/gems.rb
|
12
|
-
Bundler/DuplicatedGem:
|
13
|
-
Exclude:
|
14
|
-
- 'Gemfile'
|
15
|
-
|
16
9
|
# Offense count: 1
|
17
10
|
# Configuration parameters: Include.
|
18
11
|
# Include: **/*.gemspec
|
@@ -20,9 +13,15 @@ Gemspec/RequiredRubyVersion:
|
|
20
13
|
Exclude:
|
21
14
|
- 'grape-swagger.gemspec'
|
22
15
|
|
16
|
+
# Offense count: 1
|
17
|
+
# Cop supports --auto-correct.
|
18
|
+
Lint/UnneededCopEnableDirective:
|
19
|
+
Exclude:
|
20
|
+
- 'spec/lib/optional_object_spec.rb'
|
21
|
+
|
23
22
|
# Offense count: 30
|
24
23
|
Metrics/AbcSize:
|
25
|
-
Max:
|
24
|
+
Max: 59
|
26
25
|
|
27
26
|
# Offense count: 10
|
28
27
|
Metrics/CyclomaticComplexity:
|
@@ -31,7 +30,7 @@ Metrics/CyclomaticComplexity:
|
|
31
30
|
# Offense count: 22
|
32
31
|
# Configuration parameters: CountComments, ExcludedMethods.
|
33
32
|
Metrics/MethodLength:
|
34
|
-
Max:
|
33
|
+
Max: 45
|
35
34
|
|
36
35
|
# Offense count: 7
|
37
36
|
Metrics/PerceivedComplexity:
|
data/.travis.yml
CHANGED
@@ -1,25 +1,20 @@
|
|
1
1
|
language: ruby
|
2
2
|
|
3
|
-
sudo: false
|
4
|
-
|
5
3
|
before_install:
|
6
|
-
- gem update --system
|
7
4
|
- gem install bundler
|
8
5
|
|
9
6
|
after_success:
|
10
|
-
# - coveralls
|
11
7
|
- bundle exec danger
|
12
8
|
|
13
9
|
rvm:
|
14
|
-
- 2.4.
|
15
|
-
- 2.5.
|
16
|
-
- 2.6.
|
10
|
+
- 2.4.6
|
11
|
+
- 2.5.5
|
12
|
+
- 2.6.3
|
17
13
|
env:
|
18
14
|
- MODEL_PARSER=grape-swagger-entity
|
19
15
|
- MODEL_PARSER=grape-swagger-representable
|
20
|
-
- GRAPE_VERSION=0.19.2
|
21
16
|
- GRAPE_VERSION=1.0.3
|
22
|
-
- GRAPE_VERSION=1.2.
|
17
|
+
- GRAPE_VERSION=1.2.4
|
23
18
|
- GRAPE_VERSION=HEAD
|
24
19
|
|
25
20
|
matrix:
|
data/CHANGELOG.md
CHANGED
@@ -8,6 +8,15 @@
|
|
8
8
|
|
9
9
|
* Your contribution here.
|
10
10
|
|
11
|
+
### 0.33.0 (June 21, 2019)
|
12
|
+
|
13
|
+
#### Fixes
|
14
|
+
|
15
|
+
* [#747](https://github.com/ruby-grape/grape-swagger/pull/747): Allow multiple different success responses - [@charanftp3](https://github.com/charanpanchagnula).
|
16
|
+
* [#746](https://github.com/ruby-grape/grape-swagger/pull/746): Fix path with optional format - [@fnordfish](https://github.com/fnordfish).
|
17
|
+
* [#743](https://github.com/ruby-grape/grape-swagger/pull/743): CI: use 2.4.6, 2.5.5 - [@olleolleolle](https://github.com/olleolleolle).
|
18
|
+
* [#737](https://github.com/ruby-grape/grape-swagger/pull/737): Add swagger endpoint guard to both doc endpoints - [@urkle](https://github.com/urkle).
|
19
|
+
|
11
20
|
### 0.32.1 (December 7, 2018)
|
12
21
|
|
13
22
|
#### Fixes
|
data/Gemfile
CHANGED
@@ -25,17 +25,12 @@ group :development, :test do
|
|
25
25
|
gem 'rack-test'
|
26
26
|
gem 'rake'
|
27
27
|
gem 'rdoc'
|
28
|
-
gem 'rspec', '~> 3.
|
29
|
-
|
30
|
-
if RUBY_VERSION == '2.6.0'
|
31
|
-
gem 'rubocop', git: 'https://github.com/rubocop-hq/rubocop.git', require: false
|
32
|
-
else
|
33
|
-
gem 'rubocop', '~> 0.61', require: false
|
34
|
-
end
|
28
|
+
gem 'rspec', '~> 3.8'
|
29
|
+
gem 'rubocop', '~> 0.71', require: false
|
35
30
|
end
|
36
31
|
|
37
32
|
group :test do
|
38
|
-
gem '
|
33
|
+
gem 'coveralls_reborn', require: false
|
39
34
|
gem 'grape-swagger-entity'
|
40
35
|
gem 'ruby-grape-danger', '~> 0.1.1', require: false
|
41
36
|
gem 'simplecov', require: false
|
data/README.md
CHANGED
@@ -900,6 +900,45 @@ end
|
|
900
900
|
},
|
901
901
|
```
|
902
902
|
|
903
|
+
#### Multiple status codes for response <a name="multiple-status-response"></a>
|
904
|
+
|
905
|
+
Multiple values can be provided for `success` and `failure` attributes in the response.
|
906
|
+
|
907
|
+
```ruby
|
908
|
+
desc 'Attach a field to an entity through a PUT',
|
909
|
+
success: [
|
910
|
+
{ code: 201, model: Entities::UseResponse, message: 'Successfully created' },
|
911
|
+
{ code: 204, message: 'Already exists' }
|
912
|
+
],
|
913
|
+
failure: [
|
914
|
+
{ code: 400, message: 'Bad request' },
|
915
|
+
{ code: 404, message: 'Not found' }
|
916
|
+
]
|
917
|
+
put do
|
918
|
+
# your code comes here
|
919
|
+
end
|
920
|
+
```
|
921
|
+
|
922
|
+
```json
|
923
|
+
"responses": {
|
924
|
+
"201": {
|
925
|
+
"description": "Successfully created",
|
926
|
+
"schema": {
|
927
|
+
"$ref": "#/definitions/UseResponse"
|
928
|
+
}
|
929
|
+
},
|
930
|
+
"204": {
|
931
|
+
"description": "Already exists"
|
932
|
+
},
|
933
|
+
"400": {
|
934
|
+
"description": "Bad request"
|
935
|
+
},
|
936
|
+
"404": {
|
937
|
+
"description": "Not found"
|
938
|
+
}
|
939
|
+
},
|
940
|
+
```
|
941
|
+
|
903
942
|
|
904
943
|
#### File response <a name="file-response"></a>
|
905
944
|
|
data/grape-swagger.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.summary = 'Add auto generated documentation to your Grape API that can be displayed with Swagger.'
|
14
14
|
s.license = 'MIT'
|
15
15
|
|
16
|
-
s.required_ruby_version = '>= 2.
|
16
|
+
s.required_ruby_version = '>= 2.4'
|
17
17
|
s.add_runtime_dependency 'grape', '>= 0.16.2'
|
18
18
|
|
19
19
|
s.files = `git ls-files`.split("\n")
|
@@ -45,8 +45,6 @@ module GrapeSwagger
|
|
45
45
|
|
46
46
|
desc api_doc.delete(:desc), api_doc
|
47
47
|
|
48
|
-
instance_eval(guard) unless guard.nil?
|
49
|
-
|
50
48
|
output_path_definitions = proc do |combi_routes, endpoint|
|
51
49
|
output = endpoint.swagger_object(
|
52
50
|
target_class,
|
@@ -64,6 +62,8 @@ module GrapeSwagger
|
|
64
62
|
output
|
65
63
|
end
|
66
64
|
|
65
|
+
instance_eval(guard) unless guard.nil?
|
66
|
+
|
67
67
|
get mount_path do
|
68
68
|
header['Access-Control-Allow-Origin'] = '*'
|
69
69
|
header['Access-Control-Request-Method'] = '*'
|
@@ -79,6 +79,8 @@ module GrapeSwagger
|
|
79
79
|
optional :locale, type: Symbol, desc: 'Locale of API documentation'
|
80
80
|
end
|
81
81
|
|
82
|
+
instance_eval(guard) unless guard.nil?
|
83
|
+
|
82
84
|
get "#{mount_path}/:name" do
|
83
85
|
I18n.locale = params[:locale] || I18n.default_locale
|
84
86
|
|
@@ -18,7 +18,7 @@ module GrapeSwagger
|
|
18
18
|
operation = path.split('/').map(&:capitalize).join
|
19
19
|
operation.gsub!(/\-(\w)/, &:upcase).delete!('-') if operation[/\-(\w)/]
|
20
20
|
operation.gsub!(/\_(\w)/, &:upcase).delete!('_') if operation.include?('_')
|
21
|
-
operation.gsub!(/\.(\w)/, &:upcase).delete!('.') if operation
|
21
|
+
operation.gsub!(/\.(\w)/, &:upcase).delete!('.') if operation[/\.(\w)/]
|
22
22
|
if path.include?('{')
|
23
23
|
operation.gsub!(/\{(\w)/, &:upcase)
|
24
24
|
operation.delete!('{').delete!('}')
|
@@ -238,20 +238,13 @@ module Grape
|
|
238
238
|
end
|
239
239
|
|
240
240
|
def success_codes_from_route(route)
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
default_code[:message] = @entity[:message] || route.description || default_code[:message].sub('{item}', @item)
|
246
|
-
default_code[:examples] = @entity[:examples] if @entity[:examples]
|
247
|
-
default_code[:headers] = @entity[:headers] if @entity[:headers]
|
248
|
-
else
|
249
|
-
default_code = GrapeSwagger::DocMethods::StatusCodes.get[route.request_method.downcase.to_sym]
|
250
|
-
default_code[:model] = @entity if @entity
|
251
|
-
default_code[:message] = route.description || default_code[:message].sub('{item}', @item)
|
241
|
+
if @entity.is_a?(Array)
|
242
|
+
return @entity.map do |entity|
|
243
|
+
success_code_from_entity(route, entity)
|
244
|
+
end
|
252
245
|
end
|
253
246
|
|
254
|
-
[
|
247
|
+
[success_code_from_entity(route, @entity)]
|
255
248
|
end
|
256
249
|
|
257
250
|
def tag_object(route, path)
|
@@ -350,5 +343,22 @@ module Grape
|
|
350
343
|
|
351
344
|
options[:token_owner] ? route_hidden.call(send(options[:token_owner].to_sym)) : route_hidden.call
|
352
345
|
end
|
346
|
+
|
347
|
+
def success_code_from_entity(route, entity)
|
348
|
+
default_code = GrapeSwagger::DocMethods::StatusCodes.get[route.request_method.downcase.to_sym]
|
349
|
+
if entity.is_a?(Hash)
|
350
|
+
default_code[:code] = entity[:code] if entity[:code].present?
|
351
|
+
default_code[:model] = entity[:model] if entity[:model].present?
|
352
|
+
default_code[:message] = entity[:message] || route.description || default_code[:message].sub('{item}', @item)
|
353
|
+
default_code[:examples] = entity[:examples] if entity[:examples]
|
354
|
+
default_code[:headers] = entity[:headers] if entity[:headers]
|
355
|
+
else
|
356
|
+
default_code = GrapeSwagger::DocMethods::StatusCodes.get[route.request_method.downcase.to_sym]
|
357
|
+
default_code[:model] = entity if entity
|
358
|
+
default_code[:message] = route.description || default_code[:message].sub('{item}', @item)
|
359
|
+
end
|
360
|
+
|
361
|
+
default_code
|
362
|
+
end
|
353
363
|
end
|
354
364
|
end
|
@@ -47,6 +47,9 @@ describe GrapeSwagger::DocMethods::OperationId do
|
|
47
47
|
it 'GET with path /simple_test/bar-foo{id}' do
|
48
48
|
expect(subject.build(route, '/simple_test/bar-foo{id}')).to eql 'getSimpleTestBarFooId'
|
49
49
|
end
|
50
|
+
it 'GET path with optional format' do
|
51
|
+
expect(subject.build(route, 'foo(.{format})')).to eql 'getFoo(.Format)'
|
52
|
+
end
|
50
53
|
end
|
51
54
|
end
|
52
55
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
|
3
3
|
if RUBY_ENGINE == 'ruby'
|
4
4
|
require 'simplecov'
|
5
|
-
|
5
|
+
require 'coveralls'
|
6
6
|
|
7
|
-
|
7
|
+
SimpleCov.formatter = Coveralls::SimpleCov::Formatter
|
8
8
|
SimpleCov.start do
|
9
9
|
add_filter 'spec/'
|
10
|
-
|
10
|
+
add_filter 'example/'
|
11
11
|
end
|
12
|
-
|
12
|
+
Coveralls.wear!
|
13
13
|
end
|
14
14
|
|
15
15
|
$LOAD_PATH.unshift File.expand_path('../lib', __dir__)
|
@@ -31,6 +31,17 @@ describe 'response' do
|
|
31
31
|
{ 'declared_params' => declared(params) }
|
32
32
|
end
|
33
33
|
|
34
|
+
desc 'This returns something',
|
35
|
+
success: [
|
36
|
+
{ code: 200, message: 'Request has succeeded' },
|
37
|
+
{ code: 201, message: 'Successful Operation' },
|
38
|
+
{ code: 204, message: 'Request was fulfilled' }
|
39
|
+
],
|
40
|
+
failure: [{ code: 400, message: 'NotFound', model: Entities::ApiError }]
|
41
|
+
get '/multiple-success-responses' do
|
42
|
+
{ 'declared_params' => declared(params) }
|
43
|
+
end
|
44
|
+
|
34
45
|
add_swagger_documentation
|
35
46
|
end
|
36
47
|
end
|
@@ -106,4 +117,27 @@ describe 'response' do
|
|
106
117
|
expect(subject['definitions']).to eql(swagger_params_as_response_object)
|
107
118
|
end
|
108
119
|
end
|
120
|
+
|
121
|
+
describe 'uses params as response object when response contains multiple values for success' do
|
122
|
+
subject do
|
123
|
+
get '/swagger_doc/multiple-success-responses'
|
124
|
+
JSON.parse(last_response.body)
|
125
|
+
end
|
126
|
+
|
127
|
+
specify do
|
128
|
+
expect(subject['paths']['/multiple-success-responses']['get']).to eql(
|
129
|
+
'description' => 'This returns something',
|
130
|
+
'produces' => ['application/json'],
|
131
|
+
'responses' => {
|
132
|
+
'200' => { 'description' => 'Request has succeeded' },
|
133
|
+
'201' => { 'description' => 'Successful Operation' },
|
134
|
+
'204' => { 'description' => 'Request was fulfilled' },
|
135
|
+
'400' => { 'description' => 'NotFound', 'schema' => { '$ref' => '#/definitions/ApiError' } }
|
136
|
+
},
|
137
|
+
'tags' => ['multiple-success-responses'],
|
138
|
+
'operationId' => 'getMultipleSuccessResponses'
|
139
|
+
)
|
140
|
+
expect(subject['definitions']).to eql(swagger_params_as_response_object)
|
141
|
+
end
|
142
|
+
end
|
109
143
|
end
|
@@ -68,47 +68,95 @@ describe 'a guarded api endpoint' do
|
|
68
68
|
GuardedApi
|
69
69
|
end
|
70
70
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
71
|
+
let(:endpoint) { '/swagger_doc.json' }
|
72
|
+
let(:auth_token) { nil }
|
73
|
+
|
74
|
+
subject do
|
75
|
+
get endpoint, {}, 'HTTP_AUTHORIZATION' => auth_token
|
76
|
+
JSON.parse(last_response.body)
|
77
|
+
end
|
76
78
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
'
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
79
|
+
context 'accessing the main doc endpoint' do
|
80
|
+
let(:endpoint) { '/swagger_doc.json' }
|
81
|
+
|
82
|
+
context 'when a correct token is passed with the request' do
|
83
|
+
let(:auth_token) { '12345' }
|
84
|
+
|
85
|
+
it 'retrieves swagger-documentation for the endpoint' do
|
86
|
+
expect(subject).to eq(
|
87
|
+
'info' => { 'title' => 'API title', 'version' => '0.0.1' },
|
88
|
+
'swagger' => '2.0',
|
89
|
+
'produces' => ['application/xml', 'application/json', 'application/octet-stream', 'text/plain'],
|
90
|
+
'host' => 'example.org',
|
91
|
+
'tags' => [{ 'name' => 'auth', 'description' => 'Operations about auths' }],
|
92
|
+
'paths' => {
|
93
|
+
'/auth' => {
|
94
|
+
'get' => {
|
95
|
+
'description' => 'Show endpoint if authenticated',
|
96
|
+
'produces' => ['application/json'],
|
97
|
+
'tags' => ['auth'],
|
98
|
+
'operationId' => 'getAuth',
|
99
|
+
'responses' => { '200' => { 'description' => 'Show endpoint if authenticated' } }
|
100
|
+
}
|
92
101
|
}
|
93
102
|
}
|
94
|
-
|
95
|
-
|
103
|
+
)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
context 'when a bad token is passed with the request' do
|
108
|
+
let(:auth_token) { '123456' }
|
109
|
+
|
110
|
+
it 'does not retrieve swagger-documentation for the endpoint - only the info_object' do
|
111
|
+
expect(subject).to eq(
|
112
|
+
'info' => { 'title' => 'API title', 'version' => '0.0.1' },
|
113
|
+
'swagger' => '2.0',
|
114
|
+
'produces' => ['application/xml', 'application/json', 'application/octet-stream', 'text/plain'],
|
115
|
+
'host' => 'example.org'
|
116
|
+
)
|
117
|
+
end
|
96
118
|
end
|
97
119
|
end
|
98
120
|
|
99
|
-
context '
|
100
|
-
|
101
|
-
|
102
|
-
|
121
|
+
context 'accessing the tag specific endpoint' do
|
122
|
+
let(:endpoint) { '/swagger_doc/auth.json' }
|
123
|
+
|
124
|
+
context 'when a correct token is passed with the request' do
|
125
|
+
let(:auth_token) { '12345' }
|
126
|
+
|
127
|
+
it 'retrieves swagger-documentation for the endpoint' do
|
128
|
+
expect(subject).to eq(
|
129
|
+
'info' => { 'title' => 'API title', 'version' => '0.0.1' },
|
130
|
+
'swagger' => '2.0',
|
131
|
+
'produces' => ['application/xml', 'application/json', 'application/octet-stream', 'text/plain'],
|
132
|
+
'host' => 'example.org',
|
133
|
+
'tags' => [{ 'name' => 'auth', 'description' => 'Operations about auths' }],
|
134
|
+
'paths' => {
|
135
|
+
'/auth' => {
|
136
|
+
'get' => {
|
137
|
+
'description' => 'Show endpoint if authenticated',
|
138
|
+
'produces' => ['application/json'],
|
139
|
+
'tags' => ['auth'],
|
140
|
+
'operationId' => 'getAuth',
|
141
|
+
'responses' => { '200' => { 'description' => 'Show endpoint if authenticated' } }
|
142
|
+
}
|
143
|
+
}
|
144
|
+
}
|
145
|
+
)
|
146
|
+
end
|
103
147
|
end
|
104
148
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
149
|
+
context 'when a bad token is passed with the request' do
|
150
|
+
let(:auth_token) { '123456' }
|
151
|
+
|
152
|
+
it 'does not retrieve swagger-documentation for the endpoint - only the info_object' do
|
153
|
+
expect(subject).to eq(
|
154
|
+
'info' => { 'title' => 'API title', 'version' => '0.0.1' },
|
155
|
+
'swagger' => '2.0',
|
156
|
+
'produces' => ['application/xml', 'application/json', 'application/octet-stream', 'text/plain'],
|
157
|
+
'host' => 'example.org'
|
158
|
+
)
|
159
|
+
end
|
112
160
|
end
|
113
161
|
end
|
114
162
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-swagger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.33.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Vandecasteele
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grape
|
@@ -182,15 +182,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
182
182
|
requirements:
|
183
183
|
- - ">="
|
184
184
|
- !ruby/object:Gem::Version
|
185
|
-
version: '2.
|
185
|
+
version: '2.4'
|
186
186
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
187
187
|
requirements:
|
188
188
|
- - ">="
|
189
189
|
- !ruby/object:Gem::Version
|
190
190
|
version: '0'
|
191
191
|
requirements: []
|
192
|
-
|
193
|
-
rubygems_version: 2.7.8
|
192
|
+
rubygems_version: 3.0.3
|
194
193
|
signing_key:
|
195
194
|
specification_version: 4
|
196
195
|
summary: Add auto generated documentation to your Grape API that can be displayed
|