grape-swagger 0.31.0 → 0.31.1
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 +7 -13
- data/CHANGELOG.md +2 -7
- data/Gemfile +1 -1
- data/README.md +94 -67
- data/RELEASING.md +14 -12
- data/lib/grape-swagger.rb +4 -0
- data/lib/grape-swagger/doc_methods.rb +8 -0
- data/lib/grape-swagger/doc_methods/build_model_definition.rb +2 -2
- data/lib/grape-swagger/doc_methods/extensions.rb +2 -0
- data/lib/grape-swagger/doc_methods/move_params.rb +2 -1
- data/lib/grape-swagger/doc_methods/optional_object.rb +1 -0
- data/lib/grape-swagger/doc_methods/produces_consumes.rb +1 -0
- data/lib/grape-swagger/endpoint.rb +3 -0
- data/lib/grape-swagger/endpoint/params_parser.rb +3 -0
- data/lib/grape-swagger/version.rb +1 -1
- data/spec/swagger_v2/api_documentation_spec.rb +42 -0
- data/spec/swagger_v2/api_swagger_v2_format-content_type_spec.rb +1 -1
- data/spec/swagger_v2/guarded_endpoint_spec.rb +1 -0
- data/spec/swagger_v2/{host.rb → host_spec.rb} +0 -0
- metadata +7 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5e20b96cce4f137604bc4133b23249fde90b242160469cd6ed347d2840bd5b74
|
|
4
|
+
data.tar.gz: 5e6d17f9875b63983b186d920dc28cdc4a957f13bc9f511a61991dbc7196ce50
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f2596bf6f153d0447fec637fc4c035fa2bc1d3806feebf2f71a9e6fcd9c950a40d7bbd02fa703ad11994a0b4969fb014a0342a4dc01a7c3224c6670d126ffb73
|
|
7
|
+
data.tar.gz: 39e5bfb7503ae7ea188231768db59fd89b8ef41494edb18ec8bf3e1cc458fda5fcf6db381663e06681e2b4b476e454147a4494232c316901a88caf2955ea7e92
|
data/.rubocop_todo.yml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config`
|
|
3
|
-
# on
|
|
3
|
+
# on 2018-09-28 22:03:50 -0400 using RuboCop version 0.59.2.
|
|
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
|
|
@@ -13,26 +13,20 @@ Gemspec/RequiredRubyVersion:
|
|
|
13
13
|
Exclude:
|
|
14
14
|
- 'grape-swagger.gemspec'
|
|
15
15
|
|
|
16
|
-
|
|
17
16
|
# Offense count: 30
|
|
18
17
|
Metrics/AbcSize:
|
|
19
|
-
Max:
|
|
20
|
-
|
|
21
|
-
# Offense count: 3
|
|
22
|
-
# Configuration parameters: CountComments.
|
|
23
|
-
Metrics/ClassLength:
|
|
24
|
-
Max: 248
|
|
18
|
+
Max: 57
|
|
25
19
|
|
|
26
20
|
# Offense count: 10
|
|
27
21
|
Metrics/CyclomaticComplexity:
|
|
28
22
|
Max: 13
|
|
29
23
|
|
|
30
|
-
# Offense count:
|
|
31
|
-
# Configuration parameters: CountComments.
|
|
24
|
+
# Offense count: 22
|
|
25
|
+
# Configuration parameters: CountComments, ExcludedMethods.
|
|
32
26
|
Metrics/MethodLength:
|
|
33
|
-
Max:
|
|
27
|
+
Max: 44
|
|
34
28
|
|
|
35
|
-
# Offense count:
|
|
29
|
+
# Offense count: 7
|
|
36
30
|
Metrics/PerceivedComplexity:
|
|
37
31
|
Max: 14
|
|
38
32
|
|
|
@@ -41,6 +35,6 @@ Style/ClassVars:
|
|
|
41
35
|
Exclude:
|
|
42
36
|
- 'lib/grape-swagger/doc_methods.rb'
|
|
43
37
|
|
|
44
|
-
# Offense count:
|
|
38
|
+
# Offense count: 21
|
|
45
39
|
Style/Documentation:
|
|
46
40
|
Enabled: false
|
data/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
###
|
|
1
|
+
### 0.31.1 (October 23, 2018)
|
|
2
2
|
|
|
3
3
|
#### Features
|
|
4
4
|
|
|
5
|
-
*
|
|
6
|
-
|
|
7
|
-
#### Fixes
|
|
8
|
-
|
|
9
|
-
* Your contribution here.
|
|
5
|
+
* [#710](https://github.com/ruby-grape/grape-swagger/issues/710): Re-implement `api_documentation` and `specific_api_documentation` options - [@dblock](https://github.com/dblock).
|
|
10
6
|
|
|
11
7
|
### 0.31.0 (August 22, 2018)
|
|
12
8
|
|
|
@@ -14,7 +10,6 @@
|
|
|
14
10
|
|
|
15
11
|
* [#622](https://github.com/ruby-grape/grape-swagger/pull/622): Add support for 'brackets' collection format - [@korstiaan](https://github.com/korstiaan).
|
|
16
12
|
* [#637](https://github.com/ruby-grape/grape-swagger/pull/637): Add an option to add braces to array params - [@adie](https://github.com/adie).
|
|
17
|
-
|
|
18
13
|
* [#688](https://github.com/ruby-grape/grape-swagger/pull/688): Use deep merge for nested parameter definitions - [@jdmurphy](https://github.com/jdmurphy).
|
|
19
14
|
* [#691](https://github.com/ruby-grape/grape-swagger/pull/691): Disregard order when parsing request params for arrays - [@jdmurphy](https://github.com/jdmurphy).
|
|
20
15
|
* [#696](https://github.com/ruby-grape/grape-swagger/pull/696): Delegate required properties parsing to model parsers - [@Bugagazavr](https://github.com/Bugagazavr).
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
[](http://badge.fury.io/rb/grape-swagger)
|
|
2
2
|
[](https://travis-ci.org/ruby-grape/grape-swagger)
|
|
3
3
|
[](https://coveralls.io/github/ruby-grape/grape-swagger?branch=master)
|
|
4
|
-
[](https://gemnasium.com/ruby-grape/grape-swagger)
|
|
5
4
|
[](https://codeclimate.com/github/ruby-grape/grape-swagger)
|
|
6
5
|
|
|
7
6
|
##### Table of Contents
|
|
@@ -21,7 +20,7 @@
|
|
|
21
20
|
* [Rake Tasks](#rake)
|
|
22
21
|
|
|
23
22
|
|
|
24
|
-
## What is grape-swagger? <a name="what"
|
|
23
|
+
## What is grape-swagger? <a name="what"></a>
|
|
25
24
|
|
|
26
25
|
The grape-swagger gem provides an autogenerated documentation for your [Grape](https://github.com/ruby-grape/grape) API. The generated documentation is Swagger-compliant, meaning it can easily be discovered in [Swagger UI](https://github.com/wordnik/swagger-ui). You should be able to point [the petstore demo](http://petstore.swagger.io/) to your API.
|
|
27
26
|
|
|
@@ -30,7 +29,7 @@ The grape-swagger gem provides an autogenerated documentation for your [Grape](h
|
|
|
30
29
|
This screenshot is based on the [Hussars](https://github.com/LeFnord/hussars) sample app.
|
|
31
30
|
|
|
32
31
|
|
|
33
|
-
## Related Projects <a name="related"
|
|
32
|
+
## Related Projects <a name="related"></a>
|
|
34
33
|
|
|
35
34
|
* [Grape](https://github.com/ruby-grape/grape)
|
|
36
35
|
* [Grape Swagger Entity](https://github.com/ruby-grape/grape-swagger-entity)
|
|
@@ -40,7 +39,7 @@ This screenshot is based on the [Hussars](https://github.com/LeFnord/hussars) sa
|
|
|
40
39
|
|
|
41
40
|
|
|
42
41
|
|
|
43
|
-
## Compatibility <a name="version"
|
|
42
|
+
## Compatibility <a name="version"></a>
|
|
44
43
|
|
|
45
44
|
The following versions of grape, grape-entity and grape-swagger can currently be used together.
|
|
46
45
|
|
|
@@ -53,14 +52,14 @@ grape-swagger | swagger spec | grape | grape-entity | represen
|
|
|
53
52
|
0.27.0 | 2.0 | >= 0.16.2 | >= 0.5.0 | >= 2.4.1 |
|
|
54
53
|
|
|
55
54
|
|
|
56
|
-
## Swagger-Spec <a name="swagger-spec"
|
|
55
|
+
## Swagger-Spec <a name="swagger-spec"></a>
|
|
57
56
|
|
|
58
57
|
Grape-swagger generates documentation per [Swagger / OpenAPI Spec 2.0](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md).
|
|
59
58
|
|
|
60
59
|
<!-- validating it with: http://bigstickcarpet.com/swagger-parser/www/index.html -->
|
|
61
60
|
|
|
62
61
|
|
|
63
|
-
## Installation <a name="install"
|
|
62
|
+
## Installation <a name="install"></a>
|
|
64
63
|
|
|
65
64
|
Add to your Gemfile:
|
|
66
65
|
|
|
@@ -74,9 +73,9 @@ Please see [UPGRADING](UPGRADING.md) when upgrading from a previous version.
|
|
|
74
73
|
|
|
75
74
|
|
|
76
75
|
|
|
77
|
-
## Usage <a name="usage"
|
|
76
|
+
## Usage <a name="usage"></a>
|
|
78
77
|
|
|
79
|
-
Mount all your different APIs (with
|
|
78
|
+
Mount all your different APIs (with `Grape::API` superclass) on a root node. In the root class definition, include `add_swagger_documentation`, this sets up the system and registers the documentation on '/swagger_doc'. See [example/config.ru](example/config.ru) for a simple demo.
|
|
80
79
|
|
|
81
80
|
|
|
82
81
|
```ruby
|
|
@@ -97,7 +96,7 @@ To explore your API, either download [Swagger UI](https://github.com/wordnik/swa
|
|
|
97
96
|
|
|
98
97
|
|
|
99
98
|
|
|
100
|
-
## Model Parsers <a name="model_parsers"
|
|
99
|
+
## Model Parsers <a name="model_parsers"></a>
|
|
101
100
|
|
|
102
101
|
Since 0.21.0, `Grape::Entity` is not a part of grape-swagger, you need to add `grape-swagger-entity` manually to your Gemfile.
|
|
103
102
|
Also added support for [representable](https://github.com/apotonick/representable) via `grape-swagger-representable`.
|
|
@@ -183,7 +182,7 @@ end
|
|
|
183
182
|
|
|
184
183
|
|
|
185
184
|
|
|
186
|
-
## Configure <a name="configure"
|
|
185
|
+
## Configure <a name="configure"></a>
|
|
187
186
|
|
|
188
187
|
* [host](#host)
|
|
189
188
|
* [base_path](#base_path)
|
|
@@ -200,7 +199,9 @@ end
|
|
|
200
199
|
* [tags](#tags)
|
|
201
200
|
* [hide_documentation_path](#hide_documentation_path)
|
|
202
201
|
* [info](#info)
|
|
203
|
-
* [
|
|
202
|
+
* [array_use_braces](#array_use_braces)
|
|
203
|
+
* [api_documentation](#api_documentation)
|
|
204
|
+
* [specific_api_documentation](#specific_api_documentation)
|
|
204
205
|
|
|
205
206
|
You can pass a hash with optional configuration settings to ```add_swagger_documentation```.
|
|
206
207
|
The examples show the default value.
|
|
@@ -214,7 +215,7 @@ add_swagger_documentation \
|
|
|
214
215
|
```
|
|
215
216
|
|
|
216
217
|
|
|
217
|
-
#### host: <a name="host"
|
|
218
|
+
#### host: <a name="host"></a>
|
|
218
219
|
Sets explicit the `host`, default would be taken from `request`.
|
|
219
220
|
```ruby
|
|
220
221
|
add_swagger_documentation \
|
|
@@ -222,7 +223,7 @@ add_swagger_documentation \
|
|
|
222
223
|
```
|
|
223
224
|
|
|
224
225
|
|
|
225
|
-
#### base_path: <a name="base_path"
|
|
226
|
+
#### base_path: <a name="base_path"></a>
|
|
226
227
|
Base path of the API that's being exposed, default would be taken from `request`.
|
|
227
228
|
```ruby
|
|
228
229
|
add_swagger_documentation \
|
|
@@ -232,21 +233,22 @@ add_swagger_documentation \
|
|
|
232
233
|
`host` and `base_path` are also accepting a `proc` or `lambda`
|
|
233
234
|
|
|
234
235
|
|
|
235
|
-
#### mount_path: <a name="mount_path"
|
|
236
|
+
#### mount_path: <a name="mount_path"></a>
|
|
236
237
|
The path where the API documentation is loaded, default is: `/swagger_doc`.
|
|
237
238
|
```ruby
|
|
238
239
|
add_swagger_documentation \
|
|
239
240
|
mount_path: '/swagger_doc'
|
|
240
241
|
```
|
|
241
242
|
|
|
242
|
-
#### add_base_path:
|
|
243
|
+
#### add_base_path: <a name="add_base_path"></a>
|
|
243
244
|
Add `basePath` key to the documented path keys, default is: `false`.
|
|
244
245
|
```ruby
|
|
245
246
|
add_swagger_documentation \
|
|
246
247
|
add_base_path: true # only if base_path given
|
|
247
248
|
```
|
|
248
249
|
|
|
249
|
-
#### add_version:
|
|
250
|
+
#### add_version: <a name="add_version"></a>
|
|
251
|
+
|
|
250
252
|
Add `version` key to the documented path keys, default is: `true`,
|
|
251
253
|
here the version is the API version, specified by `grape` in [`path`](https://github.com/ruby-grape/grape/#path)
|
|
252
254
|
|
|
@@ -256,7 +258,8 @@ add_swagger_documentation \
|
|
|
256
258
|
```
|
|
257
259
|
|
|
258
260
|
|
|
259
|
-
#### doc_version: <a name="doc_version"
|
|
261
|
+
#### doc_version: <a name="doc_version"></a>
|
|
262
|
+
|
|
260
263
|
Specify the version of the documentation at [info section](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#info-object), default is: `'0.0.1'`
|
|
261
264
|
```ruby
|
|
262
265
|
add_swagger_documentation \
|
|
@@ -264,7 +267,8 @@ add_swagger_documentation \
|
|
|
264
267
|
```
|
|
265
268
|
|
|
266
269
|
|
|
267
|
-
#### endpoint_auth_wrapper: <a name="endpoint_auth_wrapper"
|
|
270
|
+
#### endpoint_auth_wrapper: <a name="endpoint_auth_wrapper"></a>
|
|
271
|
+
|
|
268
272
|
Specify the middleware to use for securing endpoints.
|
|
269
273
|
|
|
270
274
|
```ruby
|
|
@@ -273,7 +277,7 @@ add_swagger_documentation \
|
|
|
273
277
|
```
|
|
274
278
|
|
|
275
279
|
|
|
276
|
-
#### swagger_endpoint_guard: <a name="swagger_endpoint_guard"
|
|
280
|
+
#### swagger_endpoint_guard: <a name="swagger_endpoint_guard"></a>
|
|
277
281
|
Specify the method and auth scopes, used by the middleware for securing endpoints.
|
|
278
282
|
|
|
279
283
|
```ruby
|
|
@@ -282,7 +286,7 @@ add_swagger_documentation \
|
|
|
282
286
|
```
|
|
283
287
|
|
|
284
288
|
|
|
285
|
-
#### token_owner: <a name="token_owner"
|
|
289
|
+
#### token_owner: <a name="token_owner"></a>
|
|
286
290
|
Specify the token_owner method, provided by the middleware, which is typically named 'resource_owner'.
|
|
287
291
|
|
|
288
292
|
```ruby
|
|
@@ -291,7 +295,7 @@ add_swagger_documentation \
|
|
|
291
295
|
```
|
|
292
296
|
|
|
293
297
|
|
|
294
|
-
#### security_definitions: <a name="security_definitions"
|
|
298
|
+
#### security_definitions: <a name="security_definitions"></a>
|
|
295
299
|
Specify the [Security Definitions Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#security-definitions-object)
|
|
296
300
|
|
|
297
301
|
_NOTE: [Swagger-UI is supporting only implicit flow yet](https://github.com/swagger-api/swagger-ui/issues/2406#issuecomment-248651879)_
|
|
@@ -307,7 +311,8 @@ add_swagger_documentation \
|
|
|
307
311
|
}
|
|
308
312
|
```
|
|
309
313
|
|
|
310
|
-
#### security: <a name="security"
|
|
314
|
+
#### security: <a name="security"></a>
|
|
315
|
+
|
|
311
316
|
Specify the [Security Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#securityRequirementObject)
|
|
312
317
|
|
|
313
318
|
```ruby
|
|
@@ -320,7 +325,7 @@ add_swagger_documentation \
|
|
|
320
325
|
```
|
|
321
326
|
|
|
322
327
|
|
|
323
|
-
#### models: <a name="models"
|
|
328
|
+
#### models: <a name="models"></a>
|
|
324
329
|
A list of entities to document. Combine with the [grape-entity](https://github.com/ruby-grape/grape-entity) gem.
|
|
325
330
|
|
|
326
331
|
These would be added to the definitions section of the swagger file.
|
|
@@ -334,7 +339,8 @@ add_swagger_documentation \
|
|
|
334
339
|
```
|
|
335
340
|
|
|
336
341
|
|
|
337
|
-
#### tags: <a name="tags"
|
|
342
|
+
#### tags: <a name="tags"></a>
|
|
343
|
+
|
|
338
344
|
A list of tags to document. By default tags are automatically generated
|
|
339
345
|
for endpoints based on route names.
|
|
340
346
|
|
|
@@ -346,7 +352,8 @@ add_swagger_documentation \
|
|
|
346
352
|
```
|
|
347
353
|
|
|
348
354
|
|
|
349
|
-
#### hide_documentation_path: (default: `true`) <a name="hide_documentation_path"
|
|
355
|
+
#### hide_documentation_path: (default: `true`) <a name="hide_documentation_path"></a>
|
|
356
|
+
|
|
350
357
|
```ruby
|
|
351
358
|
add_swagger_documentation \
|
|
352
359
|
hide_documentation_path: true
|
|
@@ -355,7 +362,8 @@ add_swagger_documentation \
|
|
|
355
362
|
Don't show the `/swagger_doc` path in the generated swagger documentation.
|
|
356
363
|
|
|
357
364
|
|
|
358
|
-
#### info: <a name="info"
|
|
365
|
+
#### info: <a name="info"></a>
|
|
366
|
+
|
|
359
367
|
```ruby
|
|
360
368
|
add_swagger_documentation \
|
|
361
369
|
info: {
|
|
@@ -372,7 +380,8 @@ add_swagger_documentation \
|
|
|
372
380
|
|
|
373
381
|
A hash merged into the `info` key of the JSON documentation.
|
|
374
382
|
|
|
375
|
-
####
|
|
383
|
+
#### array_use_braces: <a name="array_use_braces"></a>
|
|
384
|
+
|
|
376
385
|
```ruby
|
|
377
386
|
add_swagger_documentation \
|
|
378
387
|
array_use_braces: true
|
|
@@ -383,25 +392,43 @@ params do
|
|
|
383
392
|
optional :metadata, type: Array[String]
|
|
384
393
|
end
|
|
385
394
|
```
|
|
386
|
-
with `
|
|
395
|
+
with `array_use_braces: true`:
|
|
387
396
|
```
|
|
388
397
|
metadata[]: { "name": "Asset ID", "value": "12345" }
|
|
389
398
|
metadata[]: { "name": "Asset Tag", "value": "654321"}
|
|
390
399
|
```
|
|
391
|
-
with `
|
|
400
|
+
with `array_use_braces: false`:
|
|
392
401
|
```
|
|
393
402
|
metadata: {"name": "Asset ID", "value": "123456"}
|
|
394
403
|
metadata: {"name": "Asset Tag", "value": "654321"}
|
|
395
404
|
```
|
|
396
405
|
|
|
397
|
-
|
|
406
|
+
#### api_documentation
|
|
407
|
+
|
|
408
|
+
Customize the Swagger API documentation route, typically contains a `desc` field. The default description is "Swagger compatible API description".
|
|
409
|
+
|
|
410
|
+
```ruby
|
|
411
|
+
add_swagger_documentation \
|
|
412
|
+
api_documentation: { desc: 'Reticulated splines API swagger-compatible documentation.' }
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
#### specific_api_documentation
|
|
416
|
+
|
|
417
|
+
Customize the Swagger API specific documentation route, typically contains a `desc` field. The default description is "Swagger compatible API description for specific API".
|
|
418
|
+
|
|
419
|
+
```ruby
|
|
420
|
+
add_swagger_documentation \
|
|
421
|
+
specific_api_documentation: { desc: 'Reticulated splines API swagger-compatible endpoint documentation.' }
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
## Routes Configuration <a name="routes"></a>
|
|
398
425
|
|
|
399
426
|
* [Swagger Header Parameters](#headers)
|
|
400
427
|
* [Hiding an Endpoint](#hiding)
|
|
401
428
|
* [Overriding Auto-Generated Nicknames](#overriding-auto-generated-nicknames)
|
|
402
429
|
* [Specify endpoint details](#details)
|
|
403
430
|
* [Overriding the route summary](#summary)
|
|
404
|
-
* [Overriding the tags](#
|
|
431
|
+
* [Overriding the tags](#overriding_the_tags)
|
|
405
432
|
* [Deprecating routes](#deprecating-routes)
|
|
406
433
|
* [Overriding the name of the body parameter](#body-param)
|
|
407
434
|
* [Defining an endpoint as an array](#array)
|
|
@@ -420,7 +447,7 @@ metadata: {"name": "Asset Tag", "value": "654321"}
|
|
|
420
447
|
* [Response examples documentation](#response-examples)
|
|
421
448
|
* [Response headers documentation](#response-headers)
|
|
422
449
|
|
|
423
|
-
#### Swagger Header Parameters <a name="headers"
|
|
450
|
+
#### Swagger Header Parameters <a name="headers"></a>
|
|
424
451
|
|
|
425
452
|
Swagger also supports the documentation of parameters passed in the header. Since grape's ```params[]``` doesn't return header parameters we can specify header parameters seperately in a block after the description.
|
|
426
453
|
|
|
@@ -440,7 +467,7 @@ desc "Return super-secret information", {
|
|
|
440
467
|
```
|
|
441
468
|
|
|
442
469
|
|
|
443
|
-
#### Hiding an Endpoint <a name="hiding"
|
|
470
|
+
#### Hiding an Endpoint <a name="hiding"></a>
|
|
444
471
|
|
|
445
472
|
You can hide an endpoint by adding ```hidden: true``` in the description of the endpoint:
|
|
446
473
|
|
|
@@ -469,16 +496,16 @@ desc 'Conditionally hide this endpoint', hidden: lambda { ENV['EXPERIMENTAL'] !=
|
|
|
469
496
|
```
|
|
470
497
|
|
|
471
498
|
|
|
472
|
-
#### Overriding Auto-Generated Nicknames <a name="overriding-auto-generated-nicknames"
|
|
499
|
+
#### Overriding Auto-Generated Nicknames <a name="overriding-auto-generated-nicknames"></a>
|
|
473
500
|
|
|
474
|
-
You can specify a swagger nickname to use instead of the auto generated name by adding `:nickname 'string'
|
|
501
|
+
You can specify a swagger nickname to use instead of the auto generated name by adding `:nickname 'string'` in the description of the endpoint.
|
|
475
502
|
|
|
476
503
|
```ruby
|
|
477
504
|
desc 'Get a full list of pets', nickname: 'getAllPets'
|
|
478
505
|
```
|
|
479
506
|
|
|
480
507
|
|
|
481
|
-
#### Specify endpoint details <a name="details"
|
|
508
|
+
#### Specify endpoint details <a name="details"></a>
|
|
482
509
|
|
|
483
510
|
To specify further details for an endpoint, use the `detail` option within a block passed to `desc`:
|
|
484
511
|
|
|
@@ -490,7 +517,7 @@ get '/kittens' do
|
|
|
490
517
|
```
|
|
491
518
|
|
|
492
519
|
|
|
493
|
-
#### Overriding the route summary <a name="summary"
|
|
520
|
+
#### Overriding the route summary <a name="summary"></a>
|
|
494
521
|
|
|
495
522
|
To override the summary, add `summary: '[string]'` after the description.
|
|
496
523
|
|
|
@@ -505,7 +532,7 @@ end
|
|
|
505
532
|
```
|
|
506
533
|
|
|
507
534
|
|
|
508
|
-
#### Overriding the tags <a name="
|
|
535
|
+
#### Overriding the tags <a name="overriding_the_tags"></a>
|
|
509
536
|
|
|
510
537
|
Tags are used for logical grouping of operations by resources or any other qualifier. To override the
|
|
511
538
|
tags array, add `tags: ['tag1', 'tag2']` after the description.
|
|
@@ -520,7 +547,7 @@ end
|
|
|
520
547
|
```
|
|
521
548
|
|
|
522
549
|
|
|
523
|
-
#### Deprecating routes <a name="deprecating-routes"
|
|
550
|
+
#### Deprecating routes <a name="deprecating-routes"></a>
|
|
524
551
|
|
|
525
552
|
To deprecate a route add `deprecated: true` after the description.
|
|
526
553
|
|
|
@@ -534,7 +561,7 @@ end
|
|
|
534
561
|
```
|
|
535
562
|
|
|
536
563
|
|
|
537
|
-
#### Overriding the name of the body parameter
|
|
564
|
+
#### Overriding the name of the body parameter <a name="body-param"></a>
|
|
538
565
|
|
|
539
566
|
By default, body parameters have a generated name based on the operation. For
|
|
540
567
|
deeply nested resources, this name can get very long. To override the name of
|
|
@@ -550,7 +577,7 @@ end
|
|
|
550
577
|
```
|
|
551
578
|
|
|
552
579
|
|
|
553
|
-
#### Defining an endpoint as an array <a name="array"
|
|
580
|
+
#### Defining an endpoint as an array <a name="array"></a>
|
|
554
581
|
|
|
555
582
|
You can define an endpoint as an array by adding `is_array` in the description:
|
|
556
583
|
|
|
@@ -559,7 +586,7 @@ desc 'Get a full list of pets', is_array: true
|
|
|
559
586
|
```
|
|
560
587
|
|
|
561
588
|
|
|
562
|
-
#### Using an options hash <a name="options"
|
|
589
|
+
#### Using an options hash <a name="options"></a>
|
|
563
590
|
|
|
564
591
|
The Grape DSL supports either an options hash or a restricted block to pass settings. Passing the `nickname`, `hidden` and `is_array` options together with response codes is only possible when passing an options hash.
|
|
565
592
|
Since the syntax differs you'll need to adjust it accordingly:
|
|
@@ -579,7 +606,7 @@ get '/kittens' do
|
|
|
579
606
|
```
|
|
580
607
|
|
|
581
608
|
|
|
582
|
-
#### Overriding parameter type <a name="overriding-param-type"
|
|
609
|
+
#### Overriding parameter type <a name="overriding-param-type"></a>
|
|
583
610
|
|
|
584
611
|
You can override paramType, using the documentation hash. See [parameter object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#parameter-object) for available types.
|
|
585
612
|
|
|
@@ -593,7 +620,7 @@ end
|
|
|
593
620
|
```
|
|
594
621
|
|
|
595
622
|
|
|
596
|
-
#### Overriding data type of the parameter <a name="overriding-type-of-param"
|
|
623
|
+
#### Overriding data type of the parameter <a name="overriding-type-of-param"></a>
|
|
597
624
|
|
|
598
625
|
You can override type, using the documentation hash.
|
|
599
626
|
|
|
@@ -617,7 +644,7 @@ end
|
|
|
617
644
|
```
|
|
618
645
|
|
|
619
646
|
|
|
620
|
-
#### Multiple types <a name="multiple-types"
|
|
647
|
+
#### Multiple types <a name="multiple-types"></a>
|
|
621
648
|
|
|
622
649
|
By default when you set multiple types, the first type is selected as swagger type
|
|
623
650
|
|
|
@@ -640,7 +667,7 @@ end
|
|
|
640
667
|
```
|
|
641
668
|
|
|
642
669
|
|
|
643
|
-
#### Array of data type <a name="array-type"
|
|
670
|
+
#### Array of data type <a name="array-type"></a>
|
|
644
671
|
|
|
645
672
|
Array types are also supported.
|
|
646
673
|
|
|
@@ -666,7 +693,7 @@ end
|
|
|
666
693
|
```
|
|
667
694
|
|
|
668
695
|
|
|
669
|
-
#### Collection format of arrays <a name="collection-format"
|
|
696
|
+
#### Collection format of arrays <a name="collection-format"></a>
|
|
670
697
|
|
|
671
698
|
You can set the collection format of an array, using the documentation hash.
|
|
672
699
|
|
|
@@ -700,7 +727,7 @@ end
|
|
|
700
727
|
```
|
|
701
728
|
|
|
702
729
|
|
|
703
|
-
#### Hiding parameters <a name="hiding-parameters"
|
|
730
|
+
#### Hiding parameters <a name="hiding-parameters"></a>
|
|
704
731
|
|
|
705
732
|
Exclude single optional parameter from the documentation
|
|
706
733
|
|
|
@@ -715,7 +742,7 @@ end
|
|
|
715
742
|
```
|
|
716
743
|
|
|
717
744
|
|
|
718
|
-
#### Setting a Swagger default value <a name="default-value"
|
|
745
|
+
#### Setting a Swagger default value <a name="default-value"></a>
|
|
719
746
|
|
|
720
747
|
Grape allows for an additional documentation hash to be passed to a parameter.
|
|
721
748
|
|
|
@@ -785,7 +812,7 @@ end
|
|
|
785
812
|
```
|
|
786
813
|
|
|
787
814
|
|
|
788
|
-
#### Response documentation <a name="response"
|
|
815
|
+
#### Response documentation <a name="response"></a>
|
|
789
816
|
|
|
790
817
|
You can also document the HTTP status codes with a description and a specified model, as ref in the schema to the definitions, that your API returns with one of the following syntax.
|
|
791
818
|
|
|
@@ -794,7 +821,7 @@ In the following cases, the schema ref would be taken from route.
|
|
|
794
821
|
```ruby
|
|
795
822
|
desc 'thing', failure: [ { code: 400, message: 'Invalid parameter entry' } ]
|
|
796
823
|
get '/thing' do
|
|
797
|
-
...
|
|
824
|
+
# ...
|
|
798
825
|
end
|
|
799
826
|
```
|
|
800
827
|
|
|
@@ -804,7 +831,7 @@ desc 'thing' do
|
|
|
804
831
|
failure [ { code: 400, message: 'Invalid parameter entry' } ]
|
|
805
832
|
end
|
|
806
833
|
get '/thing' do
|
|
807
|
-
...
|
|
834
|
+
# ...
|
|
808
835
|
end
|
|
809
836
|
```
|
|
810
837
|
|
|
@@ -813,7 +840,7 @@ get '/thing', failure: [
|
|
|
813
840
|
{ code: 400, message: 'Invalid parameter entry' },
|
|
814
841
|
{ code: 404, message: 'Not authorized' },
|
|
815
842
|
] do
|
|
816
|
-
...
|
|
843
|
+
# ...
|
|
817
844
|
end
|
|
818
845
|
```
|
|
819
846
|
|
|
@@ -823,7 +850,7 @@ get '/thing', failure: [
|
|
|
823
850
|
{ code: 400, message: 'General error' },
|
|
824
851
|
{ code: 422, message: 'Invalid parameter entry', model: Entities::ApiError }
|
|
825
852
|
] do
|
|
826
|
-
...
|
|
853
|
+
# ...
|
|
827
854
|
end
|
|
828
855
|
```
|
|
829
856
|
If no status code is defined [defaults](/lib/grape-swagger/endpoint.rb#L210) would be taken.
|
|
@@ -848,7 +875,7 @@ The result is then something like following:
|
|
|
848
875
|
```
|
|
849
876
|
|
|
850
877
|
|
|
851
|
-
#### Changing default status codes <a name="change-status"
|
|
878
|
+
#### Changing default status codes <a name="change-status"></a>
|
|
852
879
|
|
|
853
880
|
The default status codes, one could be found (-> [status codes](lib/grape-swagger/doc_methods/status_codes.rb)) can be changed to your specific needs, to achive it, you have to change it for grape itself and for the documentation.
|
|
854
881
|
|
|
@@ -859,7 +886,6 @@ get do
|
|
|
859
886
|
status 202
|
|
860
887
|
# your code comes here
|
|
861
888
|
end
|
|
862
|
-
…
|
|
863
889
|
```
|
|
864
890
|
|
|
865
891
|
```json
|
|
@@ -874,16 +900,16 @@ end
|
|
|
874
900
|
```
|
|
875
901
|
|
|
876
902
|
|
|
877
|
-
#### File response <a name="file-response"
|
|
903
|
+
#### File response <a name="file-response"></a>
|
|
904
|
+
|
|
905
|
+
Setting `success` to `File` sets a default `produces` of `application/octet-stream`.
|
|
878
906
|
|
|
879
|
-
Set `success` to `File` and sets also produces. If produces wasn't set, it defaults to `application/octet-stream`.
|
|
880
907
|
```ruby
|
|
881
908
|
desc 'Get a file',
|
|
882
909
|
success: File
|
|
883
910
|
get do
|
|
884
|
-
# your file
|
|
911
|
+
# your file response
|
|
885
912
|
end
|
|
886
|
-
…
|
|
887
913
|
```
|
|
888
914
|
|
|
889
915
|
```json
|
|
@@ -901,10 +927,11 @@ end
|
|
|
901
927
|
```
|
|
902
928
|
|
|
903
929
|
|
|
904
|
-
#### Extensions <a name="extensions"
|
|
930
|
+
#### Extensions <a name="extensions"></a>
|
|
905
931
|
|
|
906
932
|
Swagger spec2.0 supports extensions on different levels, for the moment,
|
|
907
933
|
the documentation on the root level object and the `info`, `verb`, `path` and `definition` levels are supported.
|
|
934
|
+
|
|
908
935
|
The documented key would be generated from the `x` + `-` + key of the submitted hash,
|
|
909
936
|
for possibilities refer to the [extensions spec](spec/lib/extensions_spec.rb).
|
|
910
937
|
To get an overview *how* the extensions would be defined on grape level, see the following examples:
|
|
@@ -1004,7 +1031,7 @@ route_setting :x_def, [{ for: 422, other: 'stuff' }, { for: 200, some: 'stuff' }
|
|
|
1004
1031
|
```
|
|
1005
1032
|
|
|
1006
1033
|
|
|
1007
|
-
#### Response examples documentation <a name="response-examples"
|
|
1034
|
+
#### Response examples documentation <a name="response-examples"></a>
|
|
1008
1035
|
|
|
1009
1036
|
You can also add examples to your responses by using the `desc` DSL with block syntax.
|
|
1010
1037
|
|
|
@@ -1058,7 +1085,7 @@ The result will look like following:
|
|
|
1058
1085
|
|
|
1059
1086
|
Failure information can be passed as an array of arrays or an array of hashes.
|
|
1060
1087
|
|
|
1061
|
-
#### Response headers documentation <a name="response-headers"
|
|
1088
|
+
#### Response headers documentation <a name="response-headers"></a>
|
|
1062
1089
|
|
|
1063
1090
|
You can also add header information to your responses by using the `desc` DSL with block syntax.
|
|
1064
1091
|
|
|
@@ -1113,7 +1140,7 @@ The result will look like following:
|
|
|
1113
1140
|
|
|
1114
1141
|
Failure information can be passed as an array of arrays or an array of hashes.
|
|
1115
1142
|
|
|
1116
|
-
## Using Grape Entities <a name="grape-entity"
|
|
1143
|
+
## Using Grape Entities <a name="grape-entity"></a>
|
|
1117
1144
|
|
|
1118
1145
|
Add the [grape-entity](https://github.com/ruby-grape/grape-entity) and [grape-swagger-entity](https://github.com/ruby-grape/grape-swagger-entity) gem to your Gemfile.
|
|
1119
1146
|
|
|
@@ -1234,7 +1261,7 @@ end
|
|
|
1234
1261
|
|
|
1235
1262
|
|
|
1236
1263
|
|
|
1237
|
-
## Securing the Swagger UI <a name="oauth"
|
|
1264
|
+
## Securing the Swagger UI <a name="oauth"></a>
|
|
1238
1265
|
|
|
1239
1266
|
The Swagger UI on Grape could be secured from unauthorized access using any middleware, which provides certain methods:
|
|
1240
1267
|
|
|
@@ -1304,7 +1331,7 @@ role - only admins can see this endpoint.
|
|
|
1304
1331
|
|
|
1305
1332
|
|
|
1306
1333
|
|
|
1307
|
-
## Example <a name="example"
|
|
1334
|
+
## Example <a name="example"></a>
|
|
1308
1335
|
|
|
1309
1336
|
Go into example directory and run it: `$ bundle exec rackup`
|
|
1310
1337
|
go to: `http://localhost:9292/swagger_doc` to get it
|
|
@@ -1349,7 +1376,7 @@ end
|
|
|
1349
1376
|
|
|
1350
1377
|
|
|
1351
1378
|
|
|
1352
|
-
## Rake Tasks <a name="rake"
|
|
1379
|
+
## Rake Tasks <a name="rake"></a>
|
|
1353
1380
|
|
|
1354
1381
|
Add these lines to your Rakefile, and initialize the Task class with your Api class – be sure your Api class is available.
|
|
1355
1382
|
|
data/RELEASING.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Releasing Grape-Swagger
|
|
2
2
|
|
|
3
|
-
There
|
|
3
|
+
There are no particular rules about when to release grape-swagger. Any co-maintainer is encouraged to release bug fixes frequently, features not so frequently and breaking API changes rarely.
|
|
4
4
|
|
|
5
5
|
### Release
|
|
6
6
|
|
|
@@ -13,18 +13,13 @@ rake
|
|
|
13
13
|
|
|
14
14
|
Check that the last build succeeded in [Travis CI](https://travis-ci.org/ruby-grape/grape-swagger) for all supported platforms.
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
* Increment the third number if the release has bug fixes and/or very minor features, only (eg. change `0.7.1` to `0.7.2`).
|
|
19
|
-
* Increment the second number if the release contains major features or breaking API changes (eg. change `0.7.1` to `0.8.0`).
|
|
20
|
-
|
|
21
|
-
Change "Next Release" in [CHANGELOG.md](CHANGELOG.md) to the new version.
|
|
16
|
+
Change "Next" in [CHANGELOG.md](CHANGELOG.md) to the current date.
|
|
22
17
|
|
|
23
18
|
```
|
|
24
19
|
### 0.7.2 (February 6, 2014)
|
|
25
20
|
```
|
|
26
21
|
|
|
27
|
-
Remove the
|
|
22
|
+
Remove the lines with "Your contribution here.", since there will be no more contributions to this release.
|
|
28
23
|
|
|
29
24
|
Commit your changes.
|
|
30
25
|
|
|
@@ -47,11 +42,18 @@ Pushed grape-swagger 0.7.2 to rubygems.org.
|
|
|
47
42
|
|
|
48
43
|
### Prepare for the Next Version
|
|
49
44
|
|
|
45
|
+
Increment the minor version, the third number, modify [lib/grape-swagger/version.rb](lib/grape-swagger/version.rb). For example, change `0.7.1` to `0.7.2`. Major versions are incremented in pull requests that require it.
|
|
46
|
+
|
|
50
47
|
Add the next release to [CHANGELOG.md](CHANGELOG.md).
|
|
51
48
|
|
|
52
49
|
```
|
|
53
|
-
Next
|
|
54
|
-
|
|
50
|
+
### 0.7.3 (Next)
|
|
51
|
+
|
|
52
|
+
#### Features
|
|
53
|
+
|
|
54
|
+
* Your contribution here.
|
|
55
|
+
|
|
56
|
+
#### Fixes
|
|
55
57
|
|
|
56
58
|
* Your contribution here.
|
|
57
59
|
```
|
|
@@ -59,8 +61,8 @@ Next Release
|
|
|
59
61
|
Commit your changes.
|
|
60
62
|
|
|
61
63
|
```
|
|
62
|
-
git add CHANGELOG.md
|
|
63
|
-
git commit -m "Preparing for next
|
|
64
|
+
git add CHANGELOG.md lib/grape-swagger/version.rb
|
|
65
|
+
git commit -m "Preparing for next developer iteration, 0.7.3."
|
|
64
66
|
git push origin master
|
|
65
67
|
```
|
|
66
68
|
|
data/lib/grape-swagger.rb
CHANGED
|
@@ -64,12 +64,15 @@ module Grape
|
|
|
64
64
|
route_path = route.path
|
|
65
65
|
route_match = route_path.split(/^.*?#{route.prefix.to_s}/).last
|
|
66
66
|
next unless route_match
|
|
67
|
+
|
|
67
68
|
route_match = route_match.match('\/([\w|-]*?)[\.\/\(]') || route_match.match('\/([\w|-]*)$')
|
|
68
69
|
next unless route_match
|
|
70
|
+
|
|
69
71
|
resource = route_match.captures.first
|
|
70
72
|
resource = '/' if resource.empty?
|
|
71
73
|
@target_class.combined_routes[resource] ||= []
|
|
72
74
|
next if doc_klass.hide_documentation_path && route.path.match(/#{doc_klass.mount_path}($|\/|\(\.)/)
|
|
75
|
+
|
|
73
76
|
@target_class.combined_routes[resource].unshift route
|
|
74
77
|
end
|
|
75
78
|
end
|
|
@@ -131,6 +134,7 @@ module Grape
|
|
|
131
134
|
def extract_parent_route(name)
|
|
132
135
|
route_name = name.match(%r{^/?([^/]*).*$})[1]
|
|
133
136
|
return route_name unless route_name.include? ':'
|
|
137
|
+
|
|
134
138
|
matches = name.match(/\/[a-z]+/)
|
|
135
139
|
matches.nil? ? route_name : matches[0].delete('/')
|
|
136
140
|
end
|
|
@@ -32,6 +32,8 @@ module GrapeSwagger
|
|
|
32
32
|
target_class = options[:target_class]
|
|
33
33
|
guard = options[:swagger_endpoint_guard]
|
|
34
34
|
formatter = options[:format]
|
|
35
|
+
api_doc = options[:api_documentation].dup
|
|
36
|
+
specific_api_doc = options[:specific_api_documentation].dup
|
|
35
37
|
|
|
36
38
|
class_variables_from(options)
|
|
37
39
|
|
|
@@ -41,6 +43,8 @@ module GrapeSwagger
|
|
|
41
43
|
end
|
|
42
44
|
end
|
|
43
45
|
|
|
46
|
+
desc api_doc.delete(:desc), api_doc
|
|
47
|
+
|
|
44
48
|
instance_eval(guard) unless guard.nil?
|
|
45
49
|
|
|
46
50
|
output_path_definitions = proc do |combi_routes, endpoint|
|
|
@@ -67,10 +71,14 @@ module GrapeSwagger
|
|
|
67
71
|
output_path_definitions.call(target_class.combined_namespace_routes, self)
|
|
68
72
|
end
|
|
69
73
|
|
|
74
|
+
desc specific_api_doc.delete(:desc), { params:
|
|
75
|
+
specific_api_doc.delete(:params) || {} }.merge(specific_api_doc)
|
|
76
|
+
|
|
70
77
|
params do
|
|
71
78
|
requires :name, type: String, desc: 'Resource name of mounted API'
|
|
72
79
|
optional :locale, type: Symbol, desc: 'Locale of API documentation'
|
|
73
80
|
end
|
|
81
|
+
|
|
74
82
|
get "#{mount_path}/:name" do
|
|
75
83
|
I18n.locale = params[:locale] || I18n.default_locale
|
|
76
84
|
|
|
@@ -44,8 +44,8 @@ module GrapeSwagger
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
def deprecated_workflow_for(gem_name)
|
|
47
|
-
warn "DEPRECATED: You using old #{gem_name} version,
|
|
48
|
-
"required attributes
|
|
47
|
+
warn "DEPRECATED: You are using old #{gem_name} version, which doesn't provide " \
|
|
48
|
+
"required attributes. To solve this problem, please update #{gem_name}"
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
end
|
|
@@ -44,6 +44,7 @@ module GrapeSwagger
|
|
|
44
44
|
|
|
45
45
|
def setup_definition(def_extension, path, definitions)
|
|
46
46
|
return unless def_extension.key?(:for)
|
|
47
|
+
|
|
47
48
|
status = def_extension[:for]
|
|
48
49
|
|
|
49
50
|
definition = find_definition(status, path)
|
|
@@ -60,6 +61,7 @@ module GrapeSwagger
|
|
|
60
61
|
|
|
61
62
|
def add_extension_to(part, extensions)
|
|
62
63
|
return if part.nil?
|
|
64
|
+
|
|
63
65
|
concatenate(extensions).each do |key, value|
|
|
64
66
|
part[key] = value unless key.start_with?('x-for')
|
|
65
67
|
end
|
|
@@ -94,6 +94,7 @@ module GrapeSwagger
|
|
|
94
94
|
property_keys.each_with_object({}) do |x, memo|
|
|
95
95
|
value = param[x]
|
|
96
96
|
next if value.blank?
|
|
97
|
+
|
|
97
98
|
if x == :type && @definitions[value].present?
|
|
98
99
|
memo['$ref'] = "#/definitions/#{value}"
|
|
99
100
|
else
|
|
@@ -207,7 +208,7 @@ module GrapeSwagger
|
|
|
207
208
|
end
|
|
208
209
|
|
|
209
210
|
def property_keys
|
|
210
|
-
%i[type format description minimum maximum items enum]
|
|
211
|
+
%i[type format description minimum maximum items enum default]
|
|
211
212
|
end
|
|
212
213
|
|
|
213
214
|
def deletable?(param)
|
|
@@ -172,6 +172,7 @@ module Grape
|
|
|
172
172
|
|
|
173
173
|
def consumes_object(route, format)
|
|
174
174
|
return unless SUPPORTS_CONSUMES.include?(route.request_method.downcase.to_sym)
|
|
175
|
+
|
|
175
176
|
GrapeSwagger::DocMethods::ProducesConsumes.call(route.settings.dig(:description, :consumes) || format)
|
|
176
177
|
end
|
|
177
178
|
|
|
@@ -321,6 +322,7 @@ module Grape
|
|
|
321
322
|
model_name = model_name(model)
|
|
322
323
|
|
|
323
324
|
return model_name if @definitions.key?(model_name)
|
|
325
|
+
|
|
324
326
|
@definitions[model_name] = nil
|
|
325
327
|
|
|
326
328
|
parser = GrapeSwagger.model_parsers.find(model)
|
|
@@ -345,6 +347,7 @@ module Grape
|
|
|
345
347
|
route_hidden = route.settings.try(:[], :swagger).try(:[], :hidden)
|
|
346
348
|
route_hidden = route.options[:hidden] if route.options.key?(:hidden)
|
|
347
349
|
return route_hidden unless route_hidden.is_a?(Proc)
|
|
350
|
+
|
|
348
351
|
options[:token_owner] ? route_hidden.call(send(options[:token_owner].to_sym)) : route_hidden.call
|
|
349
352
|
end
|
|
350
353
|
end
|
|
@@ -51,8 +51,10 @@ module GrapeSwagger
|
|
|
51
51
|
def param_type_is_array?(param_type)
|
|
52
52
|
return false unless param_type
|
|
53
53
|
return true if param_type == 'Array'
|
|
54
|
+
|
|
54
55
|
param_types = param_type.match(/\[(.*)\]$/)
|
|
55
56
|
return false unless param_types
|
|
57
|
+
|
|
56
58
|
param_types = param_types[0].split(',') if param_types
|
|
57
59
|
param_types.size == 1
|
|
58
60
|
end
|
|
@@ -64,6 +66,7 @@ module GrapeSwagger
|
|
|
64
66
|
def public_parameter?(param)
|
|
65
67
|
param_options = param.last
|
|
66
68
|
return true unless param_options.key?(:documentation) && !param_options[:required]
|
|
69
|
+
|
|
67
70
|
param_hidden = param_options[:documentation].fetch(:hidden, false)
|
|
68
71
|
param_hidden = param_hidden.call if param_hidden.is_a?(Proc)
|
|
69
72
|
!param_hidden
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe 'API with additional options' do
|
|
6
|
+
let(:api) do
|
|
7
|
+
Class.new(Grape::API) do
|
|
8
|
+
add_swagger_documentation \
|
|
9
|
+
api_documentation: { desc: 'Swagger compatible API description' },
|
|
10
|
+
specific_api_documentation: { desc: 'Swagger compatible API description for specific API' }
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
subject do
|
|
15
|
+
api.routes.map do |route|
|
|
16
|
+
route.settings[:description]
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'documents api' do
|
|
21
|
+
expect(subject).to eq(
|
|
22
|
+
[
|
|
23
|
+
{ description: 'Swagger compatible API description' },
|
|
24
|
+
{
|
|
25
|
+
description: 'Swagger compatible API description for specific API',
|
|
26
|
+
params: {
|
|
27
|
+
'locale' => {
|
|
28
|
+
desc: 'Locale of API documentation',
|
|
29
|
+
required: false,
|
|
30
|
+
type: 'Symbol'
|
|
31
|
+
},
|
|
32
|
+
'name' => {
|
|
33
|
+
desc: 'Resource name of mounted API',
|
|
34
|
+
required: true,
|
|
35
|
+
type: 'String'
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -41,7 +41,7 @@ describe 'format, content_type' do
|
|
|
41
41
|
{ 'declared_params' => declared(params) }
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
desc 'This uses
|
|
44
|
+
desc 'This uses consumes for consumes',
|
|
45
45
|
failure: [{ code: 400, model: Entities::ApiError }],
|
|
46
46
|
consumes: ['application/www_url_encoded'],
|
|
47
47
|
entity: Entities::UseResponse
|
|
@@ -28,6 +28,7 @@ class SampleAuth < Grape::Middleware::Base
|
|
|
28
28
|
context.protected_endpoint = context.options[:route_options][:auth].present?
|
|
29
29
|
|
|
30
30
|
return unless context.protected_endpoint?
|
|
31
|
+
|
|
31
32
|
scopes = context.options[:route_options][:auth][:scopes]
|
|
32
33
|
authorize!(*scopes) unless scopes.include? false
|
|
33
34
|
context.access_token = env['HTTP_AUTHORIZATION']
|
|
File without changes
|
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.31.
|
|
4
|
+
version: 0.31.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tim Vandecasteele
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-
|
|
11
|
+
date: 2018-10-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: grape
|
|
@@ -115,6 +115,7 @@ files:
|
|
|
115
115
|
- spec/support/model_parsers/representable_parser.rb
|
|
116
116
|
- spec/support/namespace_tags.rb
|
|
117
117
|
- spec/support/the_paths_definitions.rb
|
|
118
|
+
- spec/swagger_v2/api_documentation_spec.rb
|
|
118
119
|
- spec/swagger_v2/api_swagger_v2_body_definitions_spec.rb
|
|
119
120
|
- spec/swagger_v2/api_swagger_v2_definitions-models_spec.rb
|
|
120
121
|
- spec/swagger_v2/api_swagger_v2_detail_spec.rb
|
|
@@ -148,7 +149,7 @@ files:
|
|
|
148
149
|
- spec/swagger_v2/grape-swagger_spec.rb
|
|
149
150
|
- spec/swagger_v2/guarded_endpoint_spec.rb
|
|
150
151
|
- spec/swagger_v2/hide_api_spec.rb
|
|
151
|
-
- spec/swagger_v2/
|
|
152
|
+
- spec/swagger_v2/host_spec.rb
|
|
152
153
|
- spec/swagger_v2/mount_override_api_spec.rb
|
|
153
154
|
- spec/swagger_v2/mounted_target_class_spec.rb
|
|
154
155
|
- spec/swagger_v2/namespace_tags_prefix_spec.rb
|
|
@@ -188,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
188
189
|
version: '0'
|
|
189
190
|
requirements: []
|
|
190
191
|
rubyforge_project:
|
|
191
|
-
rubygems_version: 2.7.
|
|
192
|
+
rubygems_version: 2.7.6
|
|
192
193
|
signing_key:
|
|
193
194
|
specification_version: 4
|
|
194
195
|
summary: Add auto generated documentation to your Grape API that can be displayed
|
|
@@ -234,6 +235,7 @@ test_files:
|
|
|
234
235
|
- spec/support/model_parsers/representable_parser.rb
|
|
235
236
|
- spec/support/namespace_tags.rb
|
|
236
237
|
- spec/support/the_paths_definitions.rb
|
|
238
|
+
- spec/swagger_v2/api_documentation_spec.rb
|
|
237
239
|
- spec/swagger_v2/api_swagger_v2_body_definitions_spec.rb
|
|
238
240
|
- spec/swagger_v2/api_swagger_v2_definitions-models_spec.rb
|
|
239
241
|
- spec/swagger_v2/api_swagger_v2_detail_spec.rb
|
|
@@ -267,7 +269,7 @@ test_files:
|
|
|
267
269
|
- spec/swagger_v2/grape-swagger_spec.rb
|
|
268
270
|
- spec/swagger_v2/guarded_endpoint_spec.rb
|
|
269
271
|
- spec/swagger_v2/hide_api_spec.rb
|
|
270
|
-
- spec/swagger_v2/
|
|
272
|
+
- spec/swagger_v2/host_spec.rb
|
|
271
273
|
- spec/swagger_v2/mount_override_api_spec.rb
|
|
272
274
|
- spec/swagger_v2/mounted_target_class_spec.rb
|
|
273
275
|
- spec/swagger_v2/namespace_tags_prefix_spec.rb
|