grape-swagger 0.10.4 → 0.10.5
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_todo.yml +11 -11
- data/.travis.yml +9 -7
- data/CHANGELOG.md +22 -12
- data/Gemfile +1 -1
- data/README.md +9 -2
- data/RELEASING.md +4 -3
- data/grape-swagger.gemspec +1 -1
- data/lib/grape-swagger.rb +16 -13
- data/lib/grape-swagger/doc_methods.rb +9 -6
- data/lib/grape-swagger/version.rb +1 -1
- data/spec/api_models_spec.rb +52 -1
- data/spec/array_params_spec.rb +22 -0
- data/spec/markdown/kramdown_adapter_spec.rb +1 -0
- data/spec/namespaced_api_spec.rb +20 -0
- data/spec/simple_mounted_api_spec.rb +29 -0
- data/spec/spec_helper.rb +2 -0
- metadata +38 -38
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a3f8731df44d1ab1e6d42e1a7d564b4af02bd869
|
|
4
|
+
data.tar.gz: 4be17285838269c75ae17474f76f4c50cd9de15d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b4821a7d1447484af17e69003e451f2e009315c81e074843037f229aaf48bbe9e1482413f4a99d2bce972dfadbc546f92982483f7ea6f92711cbdf33be9636cf
|
|
7
|
+
data.tar.gz: 185563d4b0e9e1b2ddcb9930e283f685108b7d710db340136e31f0e37fb1a25904f0138987b2fe6b046e0d6f0fb4bfffca18ff4b1cae0f7a8bd48c9f65b47daf
|
data/.rubocop_todo.yml
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config`
|
|
3
|
-
# on
|
|
3
|
+
# on 2016-02-07 23:26:32 +0900 using RuboCop version 0.33.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:
|
|
9
|
+
# Offense count: 14
|
|
10
10
|
Metrics/AbcSize:
|
|
11
11
|
Max: 214
|
|
12
12
|
|
|
13
13
|
# Offense count: 1
|
|
14
14
|
# Configuration parameters: CountComments.
|
|
15
15
|
Metrics/ClassLength:
|
|
16
|
-
Max:
|
|
16
|
+
Max: 150
|
|
17
17
|
|
|
18
|
-
# Offense count:
|
|
18
|
+
# Offense count: 7
|
|
19
19
|
Metrics/CyclomaticComplexity:
|
|
20
20
|
Max: 39
|
|
21
21
|
|
|
22
|
-
# Offense count:
|
|
22
|
+
# Offense count: 354
|
|
23
23
|
# Configuration parameters: AllowURI, URISchemes.
|
|
24
24
|
Metrics/LineLength:
|
|
25
25
|
Max: 242
|
|
26
26
|
|
|
27
|
-
# Offense count:
|
|
27
|
+
# Offense count: 24
|
|
28
28
|
# Configuration parameters: CountComments.
|
|
29
29
|
Metrics/MethodLength:
|
|
30
|
-
Max:
|
|
30
|
+
Max: 169
|
|
31
31
|
|
|
32
32
|
# Offense count: 1
|
|
33
33
|
# Configuration parameters: CountComments.
|
|
34
34
|
Metrics/ModuleLength:
|
|
35
|
-
Max:
|
|
35
|
+
Max: 472
|
|
36
36
|
|
|
37
|
-
# Offense count:
|
|
37
|
+
# Offense count: 5
|
|
38
38
|
Metrics/PerceivedComplexity:
|
|
39
|
-
Max:
|
|
39
|
+
Max: 40
|
|
40
40
|
|
|
41
41
|
# Offense count: 8
|
|
42
42
|
Style/ClassVars:
|
|
@@ -44,7 +44,7 @@ Style/ClassVars:
|
|
|
44
44
|
- 'example/api.rb'
|
|
45
45
|
- 'lib/grape-swagger/doc_methods.rb'
|
|
46
46
|
|
|
47
|
-
# Offense count:
|
|
47
|
+
# Offense count: 95
|
|
48
48
|
Style/Documentation:
|
|
49
49
|
Enabled: false
|
|
50
50
|
|
data/.travis.yml
CHANGED
|
@@ -3,19 +3,21 @@ language: ruby
|
|
|
3
3
|
sudo: false
|
|
4
4
|
|
|
5
5
|
rvm:
|
|
6
|
-
- 2.2.
|
|
7
|
-
- 2.1.
|
|
8
|
-
- 2.0.0
|
|
9
|
-
- rbx-2.2.10
|
|
6
|
+
- 2.2.3
|
|
7
|
+
- 2.1.7
|
|
10
8
|
- jruby-19mode
|
|
9
|
+
- jruby-9.0.5.0
|
|
10
|
+
- rbx-2
|
|
11
11
|
|
|
12
12
|
env:
|
|
13
|
-
- GRAPE_VERSION=0.8.0
|
|
14
|
-
- GRAPE_VERSION=0.9.0
|
|
15
13
|
- GRAPE_VERSION=0.10.0
|
|
16
14
|
- GRAPE_VERSION=0.10.1
|
|
17
15
|
- GRAPE_VERSION=0.11.0
|
|
18
16
|
- GRAPE_VERSION=0.12.0
|
|
19
17
|
- GRAPE_VERSION=0.13.0
|
|
20
18
|
- GRAPE_VERSION=0.14.0
|
|
21
|
-
- GRAPE_VERSION=HEAD
|
|
19
|
+
# - GRAPE_VERSION=HEAD
|
|
20
|
+
|
|
21
|
+
matrix:
|
|
22
|
+
allow_failures:
|
|
23
|
+
- rvm: rbx-2
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
### 0.10.5 (2016-04-12)
|
|
2
|
+
|
|
3
|
+
* [#338](https://github.com/ruby-grape/grape-swagger/pull/338): Fixed handling of nested Array parameters - [@itoufo](https://github.com/itoufo).
|
|
4
|
+
* [#347](https://github.com/ruby-grape/grape-swagger/pull/347): Fixed typeref when both :using and :as are provided in exposure but no :type in documentation - [@c910335](https://github.com/c910335).
|
|
5
|
+
|
|
6
|
+
#### Fixes
|
|
7
|
+
|
|
8
|
+
* [#322](https://github.com/ruby-grape/grape-swagger/pull/322): Entity's `entity_name` takes predence over root - [@gekola](https://github.com/gekola).
|
|
9
|
+
* [#321](https://github.com/ruby-grape/grape-swagger/pull/321): Fixed handling paths containing uppercase letters - [@gekola](https://github.com/gekola).
|
|
10
|
+
|
|
1
11
|
### 0.10.4 (December 7, 2015)
|
|
2
12
|
|
|
3
13
|
* [#315](https://github.com/ruby-grape/grape-swagger/pull/315): Require `grape-entity` < 0.5.0 - [@dblock](https://github.com/dblock).
|
|
@@ -120,13 +130,13 @@
|
|
|
120
130
|
|
|
121
131
|
* Added Rails 4 support - [@jrhe](https://github.com/jrhe).
|
|
122
132
|
* Fix: document APIs at root level - [@dblock](https://github.com/dblock).
|
|
123
|
-
* Added support for procs in basepath - [@
|
|
133
|
+
* Added support for procs in basepath - [@tim-vandecasteele](https://github.com/tim-vandecasteele).
|
|
124
134
|
* Support both `:desc` and `:description` when describing parameters - [@dblock](https://github.com/dblock).
|
|
125
135
|
* Fix: allow parameters such as `name[]` - [@dblock](https://github.com/dblock).
|
|
126
136
|
|
|
127
137
|
### 0.5.0 (March 28, 2013)
|
|
128
138
|
|
|
129
|
-
* Added Grape 0.5.0 support - [@
|
|
139
|
+
* Added Grape 0.5.0 support - [@tim-vandecasteele](https://github.com/tim-vandecasteele).
|
|
130
140
|
|
|
131
141
|
### 0.4.0 (March 28, 2013)
|
|
132
142
|
|
|
@@ -135,28 +145,28 @@
|
|
|
135
145
|
### 0.3.0 (October 19, 2012)
|
|
136
146
|
|
|
137
147
|
* Added version support - [@agileanimal](https://github.com/agileanimal), [@fknappe](https://github.com/fknappe).
|
|
138
|
-
* Added support for nested parameters - [@
|
|
148
|
+
* Added support for nested parameters - [@tim-vandecasteele](https://github.com/tim-vandecasteele).
|
|
139
149
|
* Added basic support for specifying parameters that need to be passed in the header - [@agileanimal](https://github.com/agileanimal).
|
|
140
|
-
* Add possibility to hide the documentation paths in the generated swagger documentation - [@
|
|
150
|
+
* Add possibility to hide the documentation paths in the generated swagger documentation - [@tim-vandecasteele](https://github.com/tim-vandecasteele).
|
|
141
151
|
|
|
142
152
|
### 0.2.1 (August 17, 2012)
|
|
143
153
|
|
|
144
|
-
* Added support for markdown in notes field - [@
|
|
154
|
+
* Added support for markdown in notes field - [@tim-vandecasteele](https://github.com/tim-vandecasteele).
|
|
145
155
|
* Fix: compatibility with Rails - [@qwert666](https://github.com/qwert666).
|
|
146
|
-
* Fix: swagger UI history - [@
|
|
156
|
+
* Fix: swagger UI history - [@tim-vandecasteele](https://github.com/tim-vandecasteele).
|
|
147
157
|
|
|
148
158
|
### 0.2.0 (July 27, 2012)
|
|
149
159
|
|
|
150
|
-
* Use resource as root for swagger - [@
|
|
151
|
-
* Added support for file uploads, and proper `paramType` - [@
|
|
160
|
+
* Use resource as root for swagger - [@tim-vandecasteele](https://github.com/tim-vandecasteele).
|
|
161
|
+
* Added support for file uploads, and proper `paramType` - [@tim-vandecasteele](https://github.com/tim-vandecasteele).
|
|
152
162
|
* Added tests - [@nathanvda](https://github.com/nathanvda).
|
|
153
163
|
|
|
154
164
|
### 0.1.0 (July 19, 2012)
|
|
155
165
|
|
|
156
|
-
* Added some configurability to the generated documentation - [@
|
|
157
|
-
* Adapted to rails plugin structure - [@
|
|
158
|
-
* Allowed cross origin, so swagger can be used from official site - [@
|
|
166
|
+
* Added some configurability to the generated documentation - [@tim-vandecasteele](https://github.com/tim-vandecasteele).
|
|
167
|
+
* Adapted to rails plugin structure - [@tim-vandecasteele](https://github.com/tim-vandecasteele).
|
|
168
|
+
* Allowed cross origin, so swagger can be used from official site - [@tim-vandecasteele](https://github.com/tim-vandecasteele).
|
|
159
169
|
|
|
160
170
|
### 0.0.0 (July 19, 2012)
|
|
161
171
|
|
|
162
|
-
* Initial public release - [@
|
|
172
|
+
* Initial public release - [@tim-vandecasteele](https://github.com/tim-vandecasteele).
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
|
+
**these branch generates a swagger file, which is conform to the 1.2 spec**
|
|
2
|
+
|
|
3
|
+
compatible versions:
|
|
4
|
+
|
|
5
|
+
- `grape <~ 0.14.0`
|
|
6
|
+
- `grape-entity < 0.5.0`
|
|
7
|
+
|
|
1
8
|
# grape-swagger
|
|
2
9
|
|
|
3
10
|
[](http://badge.fury.io/rb/grape-swagger)
|
|
4
|
-
[](https://travis-ci.org/ruby-grape/grape-swagger)
|
|
5
12
|
[](https://gemnasium.com/ruby-grape/grape-swagger)
|
|
6
13
|
[](https://codeclimate.com/github/ruby-grape/grape-swagger)
|
|
7
14
|
|
|
@@ -194,7 +201,7 @@ desc 'Conditionally hide this endpoint', hidden: lambda { ENV['EXPERIMENTAL'] !=
|
|
|
194
201
|
|
|
195
202
|
## Overriding Auto-Generated Nicknames
|
|
196
203
|
|
|
197
|
-
You can specify a swagger nickname to use instead of the auto generated name by adding `:nickname 'string'
|
|
204
|
+
You can specify a swagger nickname to use instead of the auto generated name by adding `:nickname 'string'` in the description of the endpoint.
|
|
198
205
|
|
|
199
206
|
``` ruby
|
|
200
207
|
desc 'Get a full list of pets', nickname: 'getAllPets'
|
data/RELEASING.md
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
# Releasing Grape-Swagger
|
|
2
2
|
|
|
3
|
-
There're no particular rules about when to release grape-swagger. Release bug fixes
|
|
3
|
+
There're no particular rules about when to release grape-swagger. Release bug fixes frequently, features not so frequently and breaking API changes rarely.
|
|
4
4
|
|
|
5
5
|
### Release
|
|
6
6
|
|
|
7
|
-
Run tests, check that all tests succeed locally.
|
|
7
|
+
Run tests and rubocop, check that all tests succeed locally.
|
|
8
8
|
|
|
9
9
|
```
|
|
10
10
|
bundle install
|
|
11
|
-
rake
|
|
11
|
+
bundle exec rake
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
+
|
|
14
15
|
Check that the last build succeeded in [Travis CI](https://travis-ci.org/ruby-grape/grape-swagger) for all supported platforms.
|
|
15
16
|
|
|
16
17
|
Increment the version, modify [lib/grape-swagger/version.rb](lib/grape-swagger/version.rb).
|
data/grape-swagger.gemspec
CHANGED
|
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
|
11
11
|
s.summary = 'A simple way to add auto generated documentation to your Grape API that can be displayed with Swagger.'
|
|
12
12
|
s.license = 'MIT'
|
|
13
13
|
|
|
14
|
-
s.add_runtime_dependency 'grape', '>= 0.
|
|
14
|
+
s.add_runtime_dependency 'grape', '>= 0.10.0'
|
|
15
15
|
s.add_runtime_dependency 'grape-entity', '< 0.5.0'
|
|
16
16
|
|
|
17
17
|
s.add_development_dependency 'rake'
|
data/lib/grape-swagger.rb
CHANGED
|
@@ -30,7 +30,6 @@ module Grape
|
|
|
30
30
|
next unless route_match
|
|
31
31
|
resource = route_match.captures.first
|
|
32
32
|
next if resource.empty?
|
|
33
|
-
resource.downcase!
|
|
34
33
|
@target_class.combined_routes[resource] ||= []
|
|
35
34
|
next if documentation_class.hide_documentation_path && route.route_path.match(/#{documentation_class.mount_path}($|\/|\(\.)/)
|
|
36
35
|
@target_class.combined_routes[resource] << route
|
|
@@ -151,25 +150,29 @@ module Grape
|
|
|
151
150
|
|
|
152
151
|
def parse_array_params(params)
|
|
153
152
|
modified_params = {}
|
|
154
|
-
|
|
153
|
+
array_keys = []
|
|
155
154
|
params.each_key do |k|
|
|
155
|
+
new_key, modified_params = parse_array_key(array_keys, k, modified_params)
|
|
156
156
|
if params[k].is_a?(Hash) && params[k][:type] == 'Array'
|
|
157
|
-
|
|
158
|
-
modified_params[k] = params[k]
|
|
159
|
-
else
|
|
160
|
-
new_key = k
|
|
161
|
-
unless array_param.nil?
|
|
162
|
-
if k.to_s.start_with?(array_param.to_s + '[')
|
|
163
|
-
new_key = array_param.to_s + '[]' + k.to_s.split(array_param)[1]
|
|
164
|
-
modified_params.delete array_param
|
|
165
|
-
end
|
|
166
|
-
end
|
|
167
|
-
modified_params[new_key] = params[k]
|
|
157
|
+
array_keys.push(new_key)
|
|
168
158
|
end
|
|
159
|
+
modified_params[new_key] = params[k]
|
|
169
160
|
end
|
|
170
161
|
modified_params
|
|
171
162
|
end
|
|
172
163
|
|
|
164
|
+
def parse_array_key(array_keys, key, modified_params)
|
|
165
|
+
unless array_keys.blank?
|
|
166
|
+
array_keys.each do |array_key|
|
|
167
|
+
if key.to_s.start_with?(array_key.to_s + '[')
|
|
168
|
+
key = array_key.to_s + '[]' + key.to_s.split(array_key)[1]
|
|
169
|
+
modified_params.delete array_key
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
[key, modified_params]
|
|
174
|
+
end
|
|
175
|
+
|
|
173
176
|
def parse_enum_or_range_values(values)
|
|
174
177
|
case values
|
|
175
178
|
when Range
|
|
@@ -226,6 +226,8 @@ module GrapeSwagger
|
|
|
226
226
|
def parse_entity_name(model)
|
|
227
227
|
if model.respond_to?(:entity_name)
|
|
228
228
|
model.entity_name
|
|
229
|
+
elsif (root = model.instance_variable_get(:@root))
|
|
230
|
+
root
|
|
229
231
|
else
|
|
230
232
|
name = model.to_s
|
|
231
233
|
entity_parts = name.split('::')
|
|
@@ -238,7 +240,7 @@ module GrapeSwagger
|
|
|
238
240
|
scope = options[:scope]
|
|
239
241
|
result = {}
|
|
240
242
|
models.each do |model|
|
|
241
|
-
name =
|
|
243
|
+
name = parse_entity_name(model)
|
|
242
244
|
properties = {}
|
|
243
245
|
required = []
|
|
244
246
|
|
|
@@ -250,16 +252,17 @@ module GrapeSwagger
|
|
|
250
252
|
end
|
|
251
253
|
i18n_keys << :default
|
|
252
254
|
|
|
253
|
-
model.
|
|
254
|
-
|
|
255
|
+
model.exposures.each do |property_name, property_info|
|
|
256
|
+
next unless property_info.key? :documentation
|
|
257
|
+
property_name = property_info[:as] if property_info.key? :as
|
|
258
|
+
p = property_info[:documentation].dup
|
|
255
259
|
|
|
256
260
|
required << property_name.to_s if p.delete(:required)
|
|
257
261
|
|
|
258
262
|
type = if p[:type]
|
|
259
263
|
p.delete(:type)
|
|
260
264
|
else
|
|
261
|
-
|
|
262
|
-
parse_entity_name(exposure[:using]) if exposure
|
|
265
|
+
parse_entity_name(property_info[:using])
|
|
263
266
|
end
|
|
264
267
|
|
|
265
268
|
if p.delete(:is_array)
|
|
@@ -420,7 +423,7 @@ module GrapeSwagger
|
|
|
420
423
|
params do
|
|
421
424
|
optional :locale, type: Symbol, desc: 'Locale of API documentation'
|
|
422
425
|
end
|
|
423
|
-
get @@mount_path do
|
|
426
|
+
get "#{@@mount_path}" do
|
|
424
427
|
I18n.locale = params[:locale] || I18n.default_locale
|
|
425
428
|
header['Access-Control-Allow-Origin'] = '*'
|
|
426
429
|
header['Access-Control-Request-Method'] = '*'
|
data/spec/api_models_spec.rb
CHANGED
|
@@ -50,6 +50,10 @@ describe 'API Models' do
|
|
|
50
50
|
class AliasedThing < Grape::Entity
|
|
51
51
|
expose :something, as: :post, using: Entities::Something, documentation: { type: 'Something', desc: 'Reference to something.' }
|
|
52
52
|
end
|
|
53
|
+
|
|
54
|
+
class AliasedThingWithoutType < Grape::Entity
|
|
55
|
+
expose :something, as: :post, using: Entities::Something, documentation: { desc: 'Reference to something without type.' }
|
|
56
|
+
end
|
|
53
57
|
end
|
|
54
58
|
|
|
55
59
|
module Entities
|
|
@@ -99,6 +103,14 @@ describe 'API Models' do
|
|
|
99
103
|
root 'things', 'thing'
|
|
100
104
|
expose :text, documentation: { type: 'string', desc: 'Content of something.' }
|
|
101
105
|
end
|
|
106
|
+
|
|
107
|
+
class ThingWithRootAndEntityName < Grape::Entity
|
|
108
|
+
root 'things', 'thing'
|
|
109
|
+
|
|
110
|
+
def self.entity_name
|
|
111
|
+
'TheThing'
|
|
112
|
+
end
|
|
113
|
+
end
|
|
102
114
|
end
|
|
103
115
|
|
|
104
116
|
def app
|
|
@@ -138,6 +150,12 @@ describe 'API Models' do
|
|
|
138
150
|
present something, with: Entities::AliasedThing
|
|
139
151
|
end
|
|
140
152
|
|
|
153
|
+
desc 'This also gets an aliased thing', entity: Entities::AliasedThingWithoutType
|
|
154
|
+
get '/aliased_thing_without_type' do
|
|
155
|
+
something = OpenStruct.new(something: OpenStruct.new(text: 'something'))
|
|
156
|
+
present something, with: Entities::AliasedThingWithoutType
|
|
157
|
+
end
|
|
158
|
+
|
|
141
159
|
desc 'This gets all nested entities.', entity: Entities::FirstLevel
|
|
142
160
|
get '/nesting' do
|
|
143
161
|
fourth_level = OpenStruct.new text: 'something'
|
|
@@ -162,6 +180,12 @@ describe 'API Models' do
|
|
|
162
180
|
present thing, with: Entities::ThingWithRoot
|
|
163
181
|
end
|
|
164
182
|
|
|
183
|
+
desc 'This gets thing with root and entity name', entity: Entities::ThingWithRootAndEntityName
|
|
184
|
+
get '/thing_with_root_and_entity_name' do
|
|
185
|
+
thing = Object.new
|
|
186
|
+
present thing, with: Entities::ThingWithRootAndEntityName
|
|
187
|
+
end
|
|
188
|
+
|
|
165
189
|
add_swagger_documentation
|
|
166
190
|
end
|
|
167
191
|
end
|
|
@@ -188,9 +212,11 @@ describe 'API Models' do
|
|
|
188
212
|
{ 'path' => '/somethingelse.{format}', 'description' => 'Operations about somethingelses' },
|
|
189
213
|
{ 'path' => '/enum_description_in_entity.{format}', 'description' => 'Operations about enum_description_in_entities' },
|
|
190
214
|
{ 'path' => '/aliasedthing.{format}', 'description' => 'Operations about aliasedthings' },
|
|
215
|
+
{ 'path' => '/aliased_thing_without_type.{format}', 'description' => 'Operations about aliased_thing_without_types' },
|
|
191
216
|
{ 'path' => '/nesting.{format}', 'description' => 'Operations about nestings' },
|
|
192
217
|
{ 'path' => '/multiple_entities.{format}', 'description' => 'Operations about multiple_entities' },
|
|
193
218
|
{ 'path' => '/thing_with_root.{format}', 'description' => 'Operations about thing_with_roots' },
|
|
219
|
+
{ 'path' => '/thing_with_root_and_entity_name.{format}', 'description' => 'Operations about thing_with_root_and_entity_names' },
|
|
194
220
|
{ 'path' => '/swagger_doc.{format}', 'description' => 'Operations about swagger_docs' }
|
|
195
221
|
]
|
|
196
222
|
end
|
|
@@ -291,6 +317,25 @@ describe 'API Models' do
|
|
|
291
317
|
)
|
|
292
318
|
end
|
|
293
319
|
|
|
320
|
+
it 'includes referenced models in those with aliased references and omitted types.' do
|
|
321
|
+
get '/swagger_doc/aliased_thing_without_type'
|
|
322
|
+
result = JSON.parse(last_response.body)
|
|
323
|
+
expect(result['models']['AliasedThingWithoutType']).to eq(
|
|
324
|
+
'id' => 'AliasedThingWithoutType',
|
|
325
|
+
'properties' => {
|
|
326
|
+
'post' => { '$ref' => 'Something', 'description' => 'Reference to something without type.' }
|
|
327
|
+
}
|
|
328
|
+
)
|
|
329
|
+
|
|
330
|
+
expect(result['models']['Something']).to eq(
|
|
331
|
+
'id' => 'Something',
|
|
332
|
+
'properties' => {
|
|
333
|
+
'text' => { 'type' => 'string', 'description' => 'Content of something.' },
|
|
334
|
+
'links' => { 'type' => 'array', 'items' => { '$ref' => 'link' } }
|
|
335
|
+
}
|
|
336
|
+
)
|
|
337
|
+
end
|
|
338
|
+
|
|
294
339
|
it 'includes all entities with four levels of nesting' do
|
|
295
340
|
get '/swagger_doc/nesting'
|
|
296
341
|
result = JSON.parse(last_response.body)
|
|
@@ -305,9 +350,15 @@ describe 'API Models' do
|
|
|
305
350
|
expect(result['models']).to include('QueryInput', 'QueryInputElement', 'QueryResult')
|
|
306
351
|
end
|
|
307
352
|
|
|
308
|
-
it 'includes an id equal to the model name' do
|
|
353
|
+
it 'includes an id equal to the model name (defined with root)' do
|
|
309
354
|
get '/swagger_doc/thing_with_root'
|
|
310
355
|
result = JSON.parse(last_response.body)
|
|
311
356
|
expect(result['models']['thing']['id']).to eq('thing')
|
|
312
357
|
end
|
|
358
|
+
|
|
359
|
+
it 'prefers entity_name for id over root' do
|
|
360
|
+
get 'swagger_doc/thing_with_root_and_entity_name'
|
|
361
|
+
result = JSON.parse(last_response.body)
|
|
362
|
+
expect(result['models']['TheThing']['id']).to eq('TheThing')
|
|
363
|
+
end
|
|
313
364
|
end
|
data/spec/array_params_spec.rb
CHANGED
|
@@ -26,6 +26,17 @@ describe 'Array Params' do
|
|
|
26
26
|
get :raw_array_integers do
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
+
params do
|
|
30
|
+
requires :a_array, type: Array do
|
|
31
|
+
requires :param_1, type: Integer
|
|
32
|
+
requires :b_array, type: Array do
|
|
33
|
+
requires :param_2, type: String
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
post :nested_array do
|
|
38
|
+
end
|
|
39
|
+
|
|
29
40
|
add_swagger_documentation
|
|
30
41
|
end
|
|
31
42
|
end
|
|
@@ -60,4 +71,15 @@ describe 'Array Params' do
|
|
|
60
71
|
{ 'paramType' => 'query', 'name' => 'raw_array', 'description' => '', 'type' => 'array', 'required' => false, 'allowMultiple' => false, 'items' => { 'type' => 'integer', 'format' => 'int32' } }
|
|
61
72
|
]
|
|
62
73
|
end
|
|
74
|
+
|
|
75
|
+
it 'get nested array integer' do
|
|
76
|
+
get '/swagger_doc/nested_array'
|
|
77
|
+
expect(last_response.status).to eq 200
|
|
78
|
+
body = JSON.parse last_response.body
|
|
79
|
+
parameters = body['apis'].first['operations'].first['parameters']
|
|
80
|
+
expect(parameters).to eq [
|
|
81
|
+
{ 'paramType' => 'form', 'name' => 'a_array[][param_1]', 'description' => '', 'type' => 'integer', 'required' => true, 'allowMultiple' => false, 'format' => 'int32' },
|
|
82
|
+
{ 'paramType' => 'form', 'name' => 'a_array[][b_array][][param_2]', 'description' => '', 'type' => 'string', 'required' => true, 'allowMultiple' => false }
|
|
83
|
+
]
|
|
84
|
+
end
|
|
63
85
|
end
|
|
@@ -17,6 +17,7 @@ describe GrapeSwagger::Markdown::KramdownAdapter do
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
it 'raises an GrapeSwagger::Errors::MarkdownDependencyMissingError if module can not be required' do
|
|
20
|
+
pending
|
|
20
21
|
expect_any_instance_of(Kernel).to receive(:require).with('kramdown').and_raise(LoadError)
|
|
21
22
|
|
|
22
23
|
expect { GrapeSwagger::Markdown::KramdownAdapter.new }.to raise_error(GrapeSwagger::Errors::MarkdownDependencyMissingError, 'Missing required dependency: kramdown')
|
data/spec/namespaced_api_spec.rb
CHANGED
|
@@ -44,4 +44,24 @@ describe 'namespace' do
|
|
|
44
44
|
expect(subject['description']).to eql('Description for aspace')
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
|
+
|
|
48
|
+
context 'with camelcase endpoints' do
|
|
49
|
+
def app
|
|
50
|
+
Class.new(Grape::API) do
|
|
51
|
+
namespace :SomeSpace, desc: 'Description for some space' do
|
|
52
|
+
get '/'
|
|
53
|
+
end
|
|
54
|
+
add_swagger_documentation format: :json
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
subject do
|
|
59
|
+
get '/swagger_doc'
|
|
60
|
+
JSON.parse(last_response.body)['apis'][0]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'shows the namespace description in the json spec' do
|
|
64
|
+
expect(subject['description']).to eql('Description for some space')
|
|
65
|
+
end
|
|
66
|
+
end
|
|
47
67
|
end
|
|
@@ -23,6 +23,12 @@ describe 'a simple mounted api' do
|
|
|
23
23
|
{ bla: 'something' }
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
+
desc 'This gets something for URL in camelcase.',
|
|
27
|
+
notes: '_test_'
|
|
28
|
+
get '/SimpleTest' do
|
|
29
|
+
{ bla: 'something else' }
|
|
30
|
+
end
|
|
31
|
+
|
|
26
32
|
desc 'this gets something else',
|
|
27
33
|
headers: {
|
|
28
34
|
'XAuthToken' => { description: 'A required header.', required: true },
|
|
@@ -76,6 +82,7 @@ describe 'a simple mounted api' do
|
|
|
76
82
|
'apis' => [
|
|
77
83
|
{ 'path' => '/simple.{format}', 'description' => 'Operations about simples' },
|
|
78
84
|
{ 'path' => '/simple-test.{format}', 'description' => 'Operations about simple-tests' },
|
|
85
|
+
{ 'path' => '/SimpleTest.{format}', 'description' => 'Operations about SimpleTests' },
|
|
79
86
|
{ 'path' => '/simple_with_headers.{format}', 'description' => 'Operations about simple_with_headers' },
|
|
80
87
|
{ 'path' => '/items.{format}', 'description' => 'Operations about items' },
|
|
81
88
|
{ 'path' => '/custom.{format}', 'description' => 'Operations about customs' },
|
|
@@ -129,6 +136,28 @@ describe 'a simple mounted api' do
|
|
|
129
136
|
)
|
|
130
137
|
end
|
|
131
138
|
|
|
139
|
+
it 'uses camelcase' do
|
|
140
|
+
get '/swagger_doc/SimpleTest.json'
|
|
141
|
+
expect(JSON.parse(last_response.body)).to eq(
|
|
142
|
+
'apiVersion' => '0.1',
|
|
143
|
+
'swaggerVersion' => '1.2',
|
|
144
|
+
'basePath' => 'http://example.org',
|
|
145
|
+
'resourcePath' => '/SimpleTest',
|
|
146
|
+
'produces' => Grape::ContentTypes::CONTENT_TYPES.values.uniq,
|
|
147
|
+
'apis' => [{
|
|
148
|
+
'path' => '/SimpleTest.{format}',
|
|
149
|
+
'operations' => [{
|
|
150
|
+
'notes' => '_test_',
|
|
151
|
+
'summary' => 'This gets something for URL in camelcase.',
|
|
152
|
+
'nickname' => 'GET-SimpleTest---format-',
|
|
153
|
+
'method' => 'GET',
|
|
154
|
+
'parameters' => [],
|
|
155
|
+
'type' => 'void'
|
|
156
|
+
}]
|
|
157
|
+
}]
|
|
158
|
+
)
|
|
159
|
+
end
|
|
160
|
+
|
|
132
161
|
it 'includes headers' do
|
|
133
162
|
get '/swagger_doc/simple_with_headers.json'
|
|
134
163
|
expect(JSON.parse(last_response.body)['apis']).to eq [{
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,139 +1,139 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: grape-swagger
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.10.
|
|
4
|
+
version: 0.10.5
|
|
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: 2016-04-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: grape
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- -
|
|
17
|
+
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.
|
|
19
|
+
version: 0.10.0
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- -
|
|
24
|
+
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 0.
|
|
26
|
+
version: 0.10.0
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: grape-entity
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - <
|
|
31
|
+
- - "<"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: 0.5.0
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - <
|
|
38
|
+
- - "<"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: 0.5.0
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: rake
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- -
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: '0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- -
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: shoulda
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- -
|
|
59
|
+
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
61
|
version: '0'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- -
|
|
66
|
+
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: rdoc
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- -
|
|
73
|
+
- - ">="
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
75
|
version: '0'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- -
|
|
80
|
+
- - ">="
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '0'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: rspec
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
|
-
- - ~>
|
|
87
|
+
- - "~>"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
89
|
version: '3.0'
|
|
90
90
|
type: :development
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
|
-
- - ~>
|
|
94
|
+
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: '3.0'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: bundler
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
|
-
- -
|
|
101
|
+
- - ">="
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
103
|
version: '0'
|
|
104
104
|
type: :development
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
|
-
- -
|
|
108
|
+
- - ">="
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
110
|
version: '0'
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: rack-test
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
|
-
- -
|
|
115
|
+
- - ">="
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
117
|
version: '0'
|
|
118
118
|
type: :development
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
|
-
- -
|
|
122
|
+
- - ">="
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
124
|
version: '0'
|
|
125
125
|
- !ruby/object:Gem::Dependency
|
|
126
126
|
name: rack-cors
|
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
|
128
128
|
requirements:
|
|
129
|
-
- -
|
|
129
|
+
- - ">="
|
|
130
130
|
- !ruby/object:Gem::Version
|
|
131
131
|
version: '0'
|
|
132
132
|
type: :development
|
|
133
133
|
prerelease: false
|
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
135
|
requirements:
|
|
136
|
-
- -
|
|
136
|
+
- - ">="
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
138
|
version: '0'
|
|
139
139
|
- !ruby/object:Gem::Dependency
|
|
@@ -154,42 +154,42 @@ dependencies:
|
|
|
154
154
|
name: kramdown
|
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
|
156
156
|
requirements:
|
|
157
|
-
- - ~>
|
|
157
|
+
- - "~>"
|
|
158
158
|
- !ruby/object:Gem::Version
|
|
159
159
|
version: 1.4.1
|
|
160
160
|
type: :development
|
|
161
161
|
prerelease: false
|
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
163
|
requirements:
|
|
164
|
-
- - ~>
|
|
164
|
+
- - "~>"
|
|
165
165
|
- !ruby/object:Gem::Version
|
|
166
166
|
version: 1.4.1
|
|
167
167
|
- !ruby/object:Gem::Dependency
|
|
168
168
|
name: redcarpet
|
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
|
170
170
|
requirements:
|
|
171
|
-
- - ~>
|
|
171
|
+
- - "~>"
|
|
172
172
|
- !ruby/object:Gem::Version
|
|
173
173
|
version: 3.1.2
|
|
174
174
|
type: :development
|
|
175
175
|
prerelease: false
|
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
|
177
177
|
requirements:
|
|
178
|
-
- - ~>
|
|
178
|
+
- - "~>"
|
|
179
179
|
- !ruby/object:Gem::Version
|
|
180
180
|
version: 3.1.2
|
|
181
181
|
- !ruby/object:Gem::Dependency
|
|
182
182
|
name: rouge
|
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
|
184
184
|
requirements:
|
|
185
|
-
- - ~>
|
|
185
|
+
- - "~>"
|
|
186
186
|
- !ruby/object:Gem::Version
|
|
187
187
|
version: 1.6.1
|
|
188
188
|
type: :development
|
|
189
189
|
prerelease: false
|
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
|
191
191
|
requirements:
|
|
192
|
-
- - ~>
|
|
192
|
+
- - "~>"
|
|
193
193
|
- !ruby/object:Gem::Version
|
|
194
194
|
version: 1.6.1
|
|
195
195
|
description:
|
|
@@ -199,13 +199,13 @@ executables: []
|
|
|
199
199
|
extensions: []
|
|
200
200
|
extra_rdoc_files: []
|
|
201
201
|
files:
|
|
202
|
-
- .document
|
|
203
|
-
- .gitignore
|
|
204
|
-
- .rspec
|
|
205
|
-
- .rubocop.yml
|
|
206
|
-
- .rubocop_todo.yml
|
|
207
|
-
- .ruby-gemset
|
|
208
|
-
- .travis.yml
|
|
202
|
+
- ".document"
|
|
203
|
+
- ".gitignore"
|
|
204
|
+
- ".rspec"
|
|
205
|
+
- ".rubocop.yml"
|
|
206
|
+
- ".rubocop_todo.yml"
|
|
207
|
+
- ".ruby-gemset"
|
|
208
|
+
- ".travis.yml"
|
|
209
209
|
- CHANGELOG.md
|
|
210
210
|
- CONTRIBUTING.md
|
|
211
211
|
- Gemfile
|
|
@@ -272,17 +272,17 @@ require_paths:
|
|
|
272
272
|
- lib
|
|
273
273
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
274
274
|
requirements:
|
|
275
|
-
- -
|
|
275
|
+
- - ">="
|
|
276
276
|
- !ruby/object:Gem::Version
|
|
277
277
|
version: '0'
|
|
278
278
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
279
279
|
requirements:
|
|
280
|
-
- -
|
|
280
|
+
- - ">="
|
|
281
281
|
- !ruby/object:Gem::Version
|
|
282
282
|
version: '0'
|
|
283
283
|
requirements: []
|
|
284
284
|
rubyforge_project:
|
|
285
|
-
rubygems_version: 2.
|
|
285
|
+
rubygems_version: 2.5.1
|
|
286
286
|
signing_key:
|
|
287
287
|
specification_version: 4
|
|
288
288
|
summary: A simple way to add auto generated documentation to your Grape API that can
|