grape-swagger 0.27.0 → 0.27.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b76f67355052da445cdb76c9405479606c5fd4e8
4
- data.tar.gz: 64ab481f4a7eb9479c66f03ee1c3a8489d85db48
3
+ metadata.gz: 3d4da1b29c0c251744171e78d2d8e7f9911c8b0d
4
+ data.tar.gz: 24c02ffce502d8e7379fbde275c9f747f3bc07d3
5
5
  SHA512:
6
- metadata.gz: 8132feb353b8a6c9ae6359d86507e5f7e785e414880bf3bbcd3452e73acdb2806281405048397a231d881912676ff1ccda13e9c950ee9031a52fb667bcd6a528
7
- data.tar.gz: 66a8603fd1ca61891c64b8caf5259b12f3c2ca2c357fff8a0017db6aa53d2399e7478b3b236c48b414819a178cf347bd1bb58c7849fc752c82c9bdb3d3bcc0f2
6
+ metadata.gz: cf0dadce63c9f23539eab02f871cbaeeccc6a39af8ca7b2e588fe3082301eed7e913ab2e77d1cbcfb7b90f56f645bad348fa5248b609677ab5a436df4026f633
7
+ data.tar.gz: 6b094b917156606be769a220c74a06198b0721e54e2a456b8104baad7c1605ec1e2642d01f308778cb260e4ab7dd7313be8d913b0eef7225d32c7b2fd0f62d09
data/.travis.yml CHANGED
@@ -11,7 +11,7 @@ after_success:
11
11
 
12
12
  rvm:
13
13
  - 2.4.1
14
- - 2.3.3
14
+ - 2.3.4
15
15
 
16
16
  env:
17
17
  - MODEL_PARSER=grape-swagger-entity
@@ -19,14 +19,14 @@ env:
19
19
  - GRAPE_VERSION=0.16.2
20
20
  - GRAPE_VERSION=0.17.0
21
21
  - GRAPE_VERSION=0.18.0
22
- - GRAPE_VERSION=0.19.1
22
+ - GRAPE_VERSION=0.19.2
23
23
  - GRAPE_VERSION=HEAD
24
24
 
25
25
  matrix:
26
26
  fast_finish: true
27
27
 
28
28
  include:
29
- - rvm: 2.2.6
29
+ - rvm: 2.2.7
30
30
  env:
31
31
  - rvm: ruby-head
32
32
  env:
data/CHANGELOG.md CHANGED
@@ -8,7 +8,13 @@
8
8
 
9
9
  * Your contribution here.
10
10
 
11
- ### 0.27.0 (March 27, 2014)
11
+ ### ### 0.27.1 (April 28, 2017)
12
+
13
+ #### Features
14
+
15
+ * [#602](https://github.com/ruby-grape/grape-swagger/pull/602): Allow security object to be defined - [@markevich](https://github.com/markevich).
16
+
17
+ ### 0.27.0 (March 27, 2017)
12
18
 
13
19
  #### Features
14
20
 
@@ -16,8 +22,6 @@
16
22
  * [#588](https://github.com/ruby-grape/grape-swagger/pull/588): Allow extension keys in Info object - [@mattyr](https://github.com/mattyr).
17
23
  * [#589](https://github.com/ruby-grape/grape-swagger/pull/589): Allow overriding tag definitions in Info object - [@mattyr](https://github.com/mattyr).
18
24
 
19
- * Your contribution here.
20
-
21
25
  #### Fixes
22
26
 
23
27
  * [#580](https://github.com/ruby-grape/grape-swagger/pull/580): Issue #578: fixes duplicated path params - [@LeFnord](https://github.com/LeFnord).
@@ -25,8 +29,6 @@
25
29
  * [#586](https://github.com/ruby-grape/grape-swagger/pull/586): Issue #587: Parameters delimited by dash cause exception - [@risa](https://github.com/risa).
26
30
  * [#593](https://github.com/ruby-grape/grape-swagger/pull/593): Clarify hidden option in readme - [@thogg4](https://github.com/thogg4).
27
31
 
28
- * Your contribution here.
29
-
30
32
  ### 0.26.1 (February 3, 2017)
31
33
 
32
34
  #### Features
data/Gemfile CHANGED
@@ -25,7 +25,7 @@ group :development, :test do
25
25
  gem 'rake'
26
26
  gem 'rdoc'
27
27
  gem 'rspec', '~> 3.0'
28
- gem 'rubocop', '~> 0.47'
28
+ gem 'rubocop', '~> 0.48'
29
29
  end
30
30
 
31
31
  group :test do
data/README.md CHANGED
@@ -21,8 +21,8 @@
21
21
  * [Example](#example)
22
22
  * [Rake Tasks](#rake)
23
23
 
24
- <a name="what" />
25
- ## What is grape-swagger?
24
+
25
+ ## What is grape-swagger? <a name="what" />
26
26
 
27
27
  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.
28
28
 
@@ -30,8 +30,8 @@ The grape-swagger gem provides an autogenerated documentation for your [Grape](h
30
30
 
31
31
  This screenshot is based on the [Hussars](https://github.com/LeFnord/hussars) sample app.
32
32
 
33
- <a name="related" />
34
- ## Related Projects
33
+
34
+ ## Related Projects <a name="related" />
35
35
 
36
36
  * [Grape](https://github.com/ruby-grape/grape)
37
37
  * [Grape Swagger Entity](https://github.com/ruby-grape/grape-swagger-entity)
@@ -40,8 +40,8 @@ This screenshot is based on the [Hussars](https://github.com/LeFnord/hussars) sa
40
40
  * [Swagger UI](https://github.com/wordnik/swagger-ui)
41
41
 
42
42
 
43
- <a name="version" />
44
- ## Compatibility
43
+
44
+ ## Compatibility <a name="version" />
45
45
 
46
46
  The following versions of grape, grape-entity and grape-swagger can currently be used together.
47
47
 
@@ -53,15 +53,15 @@ grape-swagger | swagger spec | grape | grape-entity | represen
53
53
  0.26.0 | 2.0 | >= 0.16.2 | <= 0.6.1 | >= 2.4.1 |
54
54
  0.27.0 | 2.0 | >= 0.16.2 | => 0.5.0 | >= 2.4.1 |
55
55
 
56
- <a name="swagger-spec" />
57
- ## Swagger-Spec
56
+
57
+ ## Swagger-Spec <a name="swagger-spec" />
58
58
 
59
59
  Grape-swagger generates documentation per [Swagger / OpenAPI Spec 2.0](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md).
60
60
 
61
61
  <!-- validating it with: http://bigstickcarpet.com/swagger-parser/www/index.html -->
62
62
 
63
- <a name="install" />
64
- ## Installation
63
+
64
+ ## Installation <a name="install" />
65
65
 
66
66
  Add to your Gemfile:
67
67
 
@@ -74,8 +74,8 @@ gem 'grape-swagger'
74
74
  Please see [UPGRADING](UPGRADING.md) when upgrading from a previous version.
75
75
 
76
76
 
77
- <a name="usage" />
78
- ## Usage
77
+
78
+ ## Usage <a name="usage" />
79
79
 
80
80
  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.
81
81
 
@@ -97,8 +97,8 @@ end
97
97
  To explore your API, either download [Swagger UI](https://github.com/wordnik/swagger-ui) and set it up yourself or go to the [online swagger demo](http://petstore.swagger.wordnik.com/) and enter your localhost url documentation root in the url field (probably something in the line of http://localhost:3000/swagger_doc).
98
98
 
99
99
 
100
- <a name="model_parsers" />
101
- ## Model Parsers
100
+
101
+ ## Model Parsers <a name="model_parsers" />
102
102
 
103
103
  Since 0.21.0, `Grape::Entity` is not a part of grape-swagger, you need to add `grape-swagger-entity` manually to your Gemfile.
104
104
  Also added support for [representable](https://github.com/apotonick/representable) via `grape-swagger-representable`.
@@ -116,7 +116,7 @@ If you are not using Rails, make sure to load the parser inside your application
116
116
 
117
117
  You can create your own model parser, for example for [roar](https://github.com/apotonick/roar).
118
118
 
119
- ```rb
119
+ ```ruby
120
120
  module GrapeSwagger
121
121
  module Roar
122
122
  class Parser
@@ -138,7 +138,7 @@ end
138
138
 
139
139
  Then you should register your custom parser.
140
140
 
141
- ```rb
141
+ ```ruby
142
142
  GrapeSwagger.model_parsers.register(GrapeSwagger::Roar::Parser, Roar::Decorator)
143
143
  ```
144
144
 
@@ -146,13 +146,13 @@ To control model parsers sequence, you can insert your parser before or after an
146
146
 
147
147
  #### insert_before
148
148
 
149
- ```rb
149
+ ```ruby
150
150
  GrapeSwagger.model_parsers.insert_before(GrapeSwagger::Representable::Parser, GrapeSwagger::Roar::Parser, Roar::Decorator)
151
151
  ```
152
152
 
153
153
  #### insert_after
154
154
 
155
- ```rb
155
+ ```ruby
156
156
  GrapeSwagger.model_parsers.insert_after(GrapeSwagger::Roar::Parser, GrapeSwagger::Representable::Parser, Representable::Decorator)
157
157
  ```
158
158
 
@@ -163,7 +163,7 @@ As we know, `Roar::Decorator` uses `Representable::Decorator` as a superclass, t
163
163
 
164
164
  If you use the online demo, make sure your API supports foreign requests by enabling CORS in Grape, otherwise you'll see the API description, but requests on the API won't return. Use [rack-cors](https://github.com/cyu/rack-cors) to enable CORS.
165
165
 
166
- ````ruby
166
+ ```ruby
167
167
  require 'rack/cors'
168
168
  use Rack::Cors do
169
169
  allow do
@@ -183,8 +183,8 @@ end
183
183
  ```
184
184
 
185
185
 
186
- <a name="configure" />
187
- ## Configure
186
+
187
+ ## Configure <a name="configure" />
188
188
 
189
189
  * [host](#host)
190
190
  * [base_path](#base_path)
@@ -196,6 +196,7 @@ end
196
196
  * [swagger_endpoint_guard](#swagger_endpoint_guard)
197
197
  * [token_owner](#token_owner)
198
198
  * [security_definitions](#security_definitions)
199
+ * [security](#security)
199
200
  * [models](#models)
200
201
  * [tags](#tags)
201
202
  * [hide_documentation_path](#hide_documentation_path)
@@ -213,16 +214,16 @@ add_swagger_documentation \
213
214
  base_path: proc { |request| request.host =~ /^example/ ? '/api-example' : '/api' }
214
215
  ```
215
216
 
216
- <a name="host" />
217
- #### host:
217
+
218
+ #### host: <a name="host" />
218
219
  Sets explicit the `host`, default would be taken from `request`.
219
220
  ```ruby
220
221
  add_swagger_documentation \
221
222
  host: 'www.example.com'
222
223
  ```
223
224
 
224
- <a name="base_path" />
225
- #### base_path:
225
+
226
+ #### base_path: <a name="base_path" />
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 \
@@ -231,8 +232,8 @@ add_swagger_documentation \
231
232
 
232
233
  `host` and `base_path` are also accepting a `proc` or `lambda`
233
234
 
234
- <a name="mount_path" />
235
- #### mount_path:
235
+
236
+ #### mount_path: <a name="mount_path" />
236
237
  The path where the API documentation is loaded, default is: `/swagger_doc`.
237
238
  ```ruby
238
239
  add_swagger_documentation \
@@ -255,20 +256,20 @@ add_swagger_documentation \
255
256
  add_version: true
256
257
  ```
257
258
 
258
- <a name="doc_version" />
259
- #### doc_version:
259
+
260
+ #### doc_version: <a name="doc_version" />
260
261
  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
262
  ```ruby
262
263
  add_swagger_documentation \
263
264
  doc_version: '0.0.1'
264
265
  ```
265
266
 
266
- <a name="markdown" />
267
- #### markdown: (deprecated)
267
+
268
+ #### markdown: (deprecated) <a name="markdown" />
268
269
  OAPI accepts GFM for descriptions
269
270
 
270
- <a name="endpoint_auth_wrapper" />
271
- #### endpoint_auth_wrapper:
271
+
272
+ #### endpoint_auth_wrapper: <a name="endpoint_auth_wrapper" />
272
273
  Specify the middleware to use for securing endpoints.
273
274
 
274
275
  ```ruby
@@ -276,8 +277,8 @@ add_swagger_documentation \
276
277
  endpoint_auth_wrapper: WineBouncer::OAuth2
277
278
  ```
278
279
 
279
- <a name="swagger_endpoint_guard" />
280
- #### swagger_endpoint_guard:
280
+
281
+ #### swagger_endpoint_guard: <a name="swagger_endpoint_guard" />
281
282
  Specify the method and auth scopes, used by the middleware for securing endpoints.
282
283
 
283
284
  ```ruby
@@ -285,8 +286,8 @@ add_swagger_documentation \
285
286
  swagger_endpoint_guard: 'oauth2 false'
286
287
  ```
287
288
 
288
- <a name="token_owner" />
289
- #### token_owner:
289
+
290
+ #### token_owner: <a name="token_owner" />
290
291
  Specify the token_owner method, provided by the middleware, which is typically named 'resource_owner'.
291
292
 
292
293
  ```ruby
@@ -294,8 +295,8 @@ add_swagger_documentation \
294
295
  token_owner: 'resource_owner'
295
296
  ```
296
297
 
297
- <a name="security_definitions" />
298
- #### security_definitions:
298
+
299
+ #### security_definitions: <a name="security_definitions" />
299
300
  Specify the [Security Definitions Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#security-definitions-object)
300
301
 
301
302
  _NOTE: [Swagger-UI is supporting only implicit flow yet](https://github.com/swagger-api/swagger-ui/issues/2406#issuecomment-248651879)_
@@ -311,8 +312,20 @@ add_swagger_documentation \
311
312
  }
312
313
  ```
313
314
 
314
- <a name="models" />
315
- #### models:
315
+ #### security: <a name="security" />
316
+ Specify the [Security Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#securityRequirementObject)
317
+
318
+ ```ruby
319
+ add_swagger_documentation \
320
+ security: [
321
+ {
322
+ api_key: []
323
+ }
324
+ ]
325
+ ```
326
+
327
+
328
+ #### models: <a name="models" />
316
329
  A list of entities to document. Combine with the [grape-entity](https://github.com/ruby-grape/grape-entity) gem.
317
330
 
318
331
  These would be added to the definitions section of the swagger file.
@@ -325,8 +338,8 @@ add_swagger_documentation \
325
338
  ]
326
339
  ```
327
340
 
328
- <a name="tags" />
329
- ### tags:
341
+
342
+ ### tags: <a name="tags" />
330
343
  A list of tags to document. By default tags are automatically generated
331
344
  for endpoints based on route names.
332
345
 
@@ -337,8 +350,8 @@ add_swagger_documentation \
337
350
  ]
338
351
  ```
339
352
 
340
- <a name="hide_documentation_path" />
341
- #### hide_documentation_path: (default: `true`)
353
+
354
+ #### hide_documentation_path: (default: `true`) <a name="hide_documentation_path" />
342
355
  ```ruby
343
356
  add_swagger_documentation \
344
357
  hide_documentation_path: true
@@ -346,8 +359,8 @@ add_swagger_documentation \
346
359
 
347
360
  Don't show the `/swagger_doc` path in the generated swagger documentation.
348
361
 
349
- <a name="info" />
350
- #### info:
362
+
363
+ #### info: <a name="info" />
351
364
  ```ruby
352
365
  add_swagger_documentation \
353
366
  info: {
@@ -385,8 +398,8 @@ add_swagger_documentation \
385
398
  ``` -->
386
399
 
387
400
 
388
- <a name="routes" />
389
- ## Routes Configuration
401
+
402
+ ## Routes Configuration <a name="routes" />
390
403
 
391
404
  * [Swagger Header Parameters](#headers)
392
405
  * [Hiding an Endpoint](#hiding)
@@ -409,9 +422,9 @@ add_swagger_documentation \
409
422
  * [Extensions](#extensions)
410
423
 
411
424
 
412
- <a name="headers" />
413
- #### Swagger Header Parameters <a name="headers" />
414
425
 
426
+ #### Swagger Header Parameters <a name="headers" />
427
+ <a name="headers" />
415
428
  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.
416
429
 
417
430
  ```ruby
@@ -430,8 +443,8 @@ desc "Return super-secret information", {
430
443
  ```
431
444
 
432
445
 
433
- <a name="hiding" />
434
- #### Hiding an Endpoint
446
+
447
+ #### Hiding an Endpoint <a name="hiding" />
435
448
 
436
449
  You can hide an endpoint by adding ```hidden: true``` in the description of the endpoint:
437
450
 
@@ -453,8 +466,8 @@ desc 'Conditionally hide this endpoint', hidden: lambda { ENV['EXPERIMENTAL'] !=
453
466
  ```
454
467
 
455
468
 
456
- <a name="overriding-auto-generated-nicknames" />
457
- #### Overriding Auto-Generated Nicknames
469
+
470
+ #### Overriding Auto-Generated Nicknames <a name="overriding-auto-generated-nicknames" />
458
471
 
459
472
  You can specify a swagger nickname to use instead of the auto generated name by adding `:nickname 'string'``` in the description of the endpoint.
460
473
 
@@ -463,8 +476,8 @@ desc 'Get a full list of pets', nickname: 'getAllPets'
463
476
  ```
464
477
 
465
478
 
466
- <a name="details" />
467
- #### Specify endpoint details
479
+
480
+ #### Specify endpoint details <a name="details" />
468
481
 
469
482
  To specify further details for an endpoint, use the `detail` option within a block passed to `desc`:
470
483
 
@@ -476,8 +489,8 @@ get '/kittens' do
476
489
  ```
477
490
 
478
491
 
479
- <a name="summary" />
480
- #### Overriding the route summary
492
+
493
+ #### Overriding the route summary <a name="summary" />
481
494
 
482
495
  To override the summary, add `summary: '[string]'` after the description.
483
496
 
@@ -492,8 +505,8 @@ end
492
505
  ```
493
506
 
494
507
 
495
- <a name="tags" />
496
- #### Overriding the tags
508
+
509
+ #### Overriding the tags <a name="tags" />
497
510
 
498
511
  Tags are used for logical grouping of operations by resources or any other qualifier. To override the
499
512
  tags array, add `tags: ['tag1', 'tag2']` after the description.
@@ -508,8 +521,8 @@ end
508
521
  ```
509
522
 
510
523
 
511
- <a name="array" />
512
- #### Defining an endpoint as an array
524
+
525
+ #### Defining an endpoint as an array <a name="array" />
513
526
 
514
527
  You can define an endpoint as an array by adding `is_array` in the description:
515
528
 
@@ -518,8 +531,8 @@ desc 'Get a full list of pets', is_array: true
518
531
  ```
519
532
 
520
533
 
521
- <a name="options" />
522
- #### Using an options hash
534
+
535
+ #### Using an options hash <a name="options" />
523
536
 
524
537
  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.
525
538
  Since the syntax differs you'll need to adjust it accordingly:
@@ -539,8 +552,8 @@ get '/kittens' do
539
552
  ```
540
553
 
541
554
 
542
- <a name="overriding-param-type" />
543
- #### Overriding parameter type
555
+
556
+ #### Overriding parameter type <a name="overriding-param-type" />
544
557
 
545
558
  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.
546
559
 
@@ -554,8 +567,8 @@ end
554
567
  ```
555
568
 
556
569
 
557
- <a name="overriding-type-of-param" />
558
- #### Overriding data type of the parameter
570
+
571
+ #### Overriding data type of the parameter <a name="overriding-type-of-param" />
559
572
 
560
573
  You can override type, using the documentation hash.
561
574
 
@@ -579,8 +592,8 @@ end
579
592
  ```
580
593
 
581
594
 
582
- <a name="multiple-types" />
583
- #### Multiple types
595
+
596
+ #### Multiple types <a name="multiple-types" />
584
597
 
585
598
  By default when you set multiple types, the first type is selected as swagger type
586
599
 
@@ -603,8 +616,8 @@ end
603
616
  ```
604
617
 
605
618
 
606
- <a name="array-type" />
607
- #### Array of data type
619
+
620
+ #### Array of data type <a name="array-type" />
608
621
 
609
622
  Array types are also supported.
610
623
 
@@ -630,8 +643,8 @@ end
630
643
  ```
631
644
 
632
645
 
633
- <a name="collection-format" />
634
- #### Collection format of arrays
646
+
647
+ #### Collection format of arrays <a name="collection-format" />
635
648
 
636
649
  You can set the collection format of an array, using the documentation hash.
637
650
 
@@ -665,8 +678,8 @@ end
665
678
  ```
666
679
 
667
680
 
668
- <a name="hiding-parameters" />
669
- #### Hiding parameters
681
+
682
+ #### Hiding parameters <a name="hiding-parameters" />
670
683
 
671
684
  Exclude single optional parameter from the documentation
672
685
 
@@ -681,8 +694,8 @@ end
681
694
  ```
682
695
 
683
696
 
684
- <a name="default-value" />
685
- #### Setting a Swagger default value
697
+
698
+ #### Setting a Swagger default value <a name="default-value" />
686
699
 
687
700
  Grape allows for an additional documentation hash to be passed to a parameter.
688
701
 
@@ -752,8 +765,8 @@ end
752
765
  ```
753
766
 
754
767
 
755
- <a name="response" />
756
- #### Response documentation
768
+
769
+ #### Response documentation <a name="response" />
757
770
 
758
771
  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.
759
772
 
@@ -815,8 +828,8 @@ The result is then something like following:
815
828
  },
816
829
  ```
817
830
 
818
- <a name="change-status" />
819
- #### Changing default status codes
831
+
832
+ #### Changing default status codes <a name="change-status" />
820
833
 
821
834
  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.
822
835
 
@@ -841,8 +854,8 @@ end
841
854
  },
842
855
  ```
843
856
 
844
- <a name="file-response" />
845
- #### File response
857
+
858
+ #### File response <a name="file-response" />
846
859
 
847
860
  Set `success` to `File` and sets also produces. If produces wasn't set, it defaults to `application/octet-stream`.
848
861
  ```ruby
@@ -868,8 +881,8 @@ end
868
881
  }
869
882
  ```
870
883
 
871
- <a name="extensions" />
872
- #### Extensions
884
+
885
+ #### Extensions <a name="extensions" />
873
886
 
874
887
  Swagger spec2.0 supports extensions on different levels, for the moment,
875
888
  the documentation on `info`, `verb`, `path` and `definition` level would be supported.
@@ -940,8 +953,8 @@ route_setting :x_def, [{ for: 422, other: 'stuff' }, { for: 200, some: 'stuff' }
940
953
  ```
941
954
 
942
955
 
943
- <a name="grape-entity" />
944
- ## Using Grape Entities
956
+
957
+ ## Using Grape Entities <a name="grape-entity" />
945
958
 
946
959
  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.
947
960
 
@@ -1060,8 +1073,8 @@ module API
1060
1073
  end
1061
1074
  ```
1062
1075
 
1063
- <a name="oauth" />
1064
- ## Securing the Swagger UI
1076
+
1077
+ ## Securing the Swagger UI <a name="oauth" />
1065
1078
 
1066
1079
 
1067
1080
  The Swagger UI on Grape could be secured from unauthorized access using any middleware, which provides certain methods:
@@ -1131,8 +1144,8 @@ users, you could pass a lambda to the :hidden key of a endpoint's description:
1131
1144
  The lambda is checking whether the user is authenticated (if not, the token_owner is nil by default), and has the admin
1132
1145
  role - only admins can see this endpoint.
1133
1146
 
1134
- <a name="md_usage" />
1135
- ## Markdown in Detail (deprecated)
1147
+
1148
+ ## Markdown in Detail (deprecated) <a name="md_usage" />
1136
1149
 
1137
1150
  Usage of option `markdown` will no longer be supported,
1138
1151
  cause OAPI accepts [GFM](https://help.github.com/articles/github-flavored-markdown) and plain text.
@@ -1184,8 +1197,8 @@ end
1184
1197
  ```
1185
1198
 
1186
1199
 
1187
- <a name="rake" />
1188
- ## Rake Tasks
1200
+
1201
+ ## Rake Tasks <a name="rake" />
1189
1202
 
1190
1203
  Add these lines to your Rakefile, and initialize the Task class with your Api class – be sure your Api class is available.
1191
1204
 
data/Rakefile CHANGED
@@ -18,4 +18,4 @@ RSpec::Core::RakeTask.new(:spec)
18
18
  require 'rubocop/rake_task'
19
19
  RuboCop::RakeTask.new(:rubocop)
20
20
 
21
- task default: %i(spec rubocop)
21
+ task default: %i[spec rubocop]
@@ -39,7 +39,7 @@ module GrapeSwagger
39
39
  class_variables_from(options)
40
40
 
41
41
  if formatter
42
- %i(format default_format default_error_formatter).each do |method|
42
+ %i[format default_format default_error_formatter].each do |method|
43
43
  send(method, formatter)
44
44
  end
45
45
  end
@@ -99,6 +99,7 @@ module GrapeSwagger
99
99
  format: :json,
100
100
  authorizations: nil,
101
101
  security_definitions: nil,
102
+ security: nil,
102
103
  api_documentation: { desc: 'Swagger compatible API description' },
103
104
  specific_api_documentation: { desc: 'Swagger compatible API description for specific API' },
104
105
  endpoint_auth_wrapper: nil,
@@ -68,7 +68,7 @@ module GrapeSwagger
68
68
  end
69
69
 
70
70
  def request_primitives
71
- primitives + %w(object string boolean file json array)
71
+ primitives + %w[object string boolean file json array]
72
72
  end
73
73
 
74
74
  def primitives
@@ -80,22 +80,22 @@ module GrapeSwagger
80
80
  end
81
81
 
82
82
  def collections
83
- %w(csv ssv tsv pipes multi)
83
+ %w[csv ssv tsv pipes multi]
84
84
  end
85
85
  end
86
86
 
87
87
  PRIMITIVE_MAPPINGS = {
88
- 'integer' => %w(integer int32),
89
- 'long' => %w(integer int64),
90
- 'float' => %w(number float),
91
- 'double' => %w(number double),
92
- 'byte' => %w(string byte),
93
- 'date' => %w(string date),
94
- 'dateTime' => %w(string date-time),
95
- 'binary' => %w(string binary),
96
- 'password' => %w(string password),
97
- 'email' => %w(string email),
98
- 'uuid' => %w(string uuid)
88
+ 'integer' => %w[integer int32],
89
+ 'long' => %w[integer int64],
90
+ 'float' => %w[number float],
91
+ 'double' => %w[number double],
92
+ 'byte' => %w[string byte],
93
+ 'date' => %w[string date],
94
+ 'dateTime' => %w[string date-time],
95
+ 'binary' => %w[string binary],
96
+ 'password' => %w[string password],
97
+ 'email' => %w[string email],
98
+ 'uuid' => %w[string uuid]
99
99
  }.freeze
100
100
  end
101
101
  end
@@ -198,7 +198,7 @@ module GrapeSwagger
198
198
  end
199
199
 
200
200
  def property_keys
201
- %i(type format description minimum maximum items)
201
+ %i[type format description minimum maximum items]
202
202
  end
203
203
 
204
204
  def deletable?(param)
@@ -91,7 +91,7 @@ module GrapeSwagger
91
91
  'path'
92
92
  elsif param_type
93
93
  param_type
94
- elsif %w(POST PUT PATCH).include?(value_type[:method])
94
+ elsif %w[POST PUT PATCH].include?(value_type[:method])
95
95
  DataType.request_primitive?(value_type[:data_type]) ? 'formData' : 'body'
96
96
  else
97
97
  'query'
@@ -29,6 +29,7 @@ module Grape
29
29
  produces: content_types_for(target_class),
30
30
  authorizations: options[:authorizations],
31
31
  securityDefinitions: options[:security_definitions],
32
+ security: options[:security],
32
33
  host: GrapeSwagger::DocMethods::OptionalObject.build(:host, options, request),
33
34
  basePath: GrapeSwagger::DocMethods::OptionalObject.build(:base_path, options, request),
34
35
  schemes: options[:schemes].is_a?(String) ? [options[:schemes]] : options[:schemes]
@@ -149,7 +150,7 @@ module Grape
149
150
 
150
151
  mime_types = GrapeSwagger::DocMethods::ProducesConsumes.call(format)
151
152
 
152
- route_mime_types = %i(formats content_types produces).map do |producer|
153
+ route_mime_types = %i[formats content_types produces].map do |producer|
153
154
  possible = route.options[producer]
154
155
  GrapeSwagger::DocMethods::ProducesConsumes.call(possible) if possible.present?
155
156
  end.flatten.compact.uniq
@@ -162,7 +163,7 @@ module Grape
162
163
  if route.settings[:description] && route.settings[:description][:consumes]
163
164
  format = route.settings[:description][:consumes]
164
165
  end
165
- mime_types = GrapeSwagger::DocMethods::ProducesConsumes.call(format) if %i(post put).include?(method)
166
+ mime_types = GrapeSwagger::DocMethods::ProducesConsumes.call(format) if %i[post put].include?(method)
166
167
 
167
168
  mime_types
168
169
  end
@@ -286,7 +287,7 @@ module Grape
286
287
  param_type = param_type.to_s unless param_type.nil?
287
288
  array_key = name.to_s if param_type_is_array?(param_type)
288
289
  options[:is_array] = true if array_key && name.start_with?(array_key)
289
- memo[name] = options unless %w(Hash Array).include?(param_type) && !options.key?(:documentation)
290
+ memo[name] = options unless %w[Hash Array].include?(param_type) && !options.key?(:documentation)
290
291
  end
291
292
  end
292
293
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GrapeSwagger
4
- VERSION = '0.27.0'
4
+ VERSION = '0.27.1'
5
5
  end
@@ -7,8 +7,8 @@ describe '#537 enum values spec' do
7
7
  Class.new(Grape::API) do
8
8
  namespace :issue_537 do
9
9
  class Spec < Grape::Entity
10
- expose :enum_property, documentation: { values: %i(foo bar) }
11
- expose :enum_property_default, documentation: { values: %w(a b c), default: 'c' }
10
+ expose :enum_property, documentation: { values: %i[foo bar] }
11
+ expose :enum_property_default, documentation: { values: %w[a b c], default: 'c' }
12
12
  expose :own_format, documentation: { format: 'log' }
13
13
  end
14
14
 
@@ -30,13 +30,13 @@ describe '#537 enum values spec' do
30
30
  let(:property) { subject['definitions']['Spec']['properties']['enum_property'] }
31
31
  specify do
32
32
  expect(property).to include 'enum'
33
- expect(property['enum']).to eql %w(foo bar)
33
+ expect(property['enum']).to eql %w[foo bar]
34
34
  end
35
35
 
36
36
  let(:property_default) { subject['definitions']['Spec']['properties']['enum_property_default'] }
37
37
  specify do
38
38
  expect(property_default).to include 'enum'
39
- expect(property_default['enum']).to eql %w(a b c)
39
+ expect(property_default['enum']).to eql %w[a b c]
40
40
  expect(property_default).to include 'default'
41
41
  expect(property_default['default']).to eql 'c'
42
42
  end
@@ -29,7 +29,7 @@ describe '#572 is_array is applied to all possible responses' do
29
29
  JSON.parse(last_response.body)
30
30
  end
31
31
 
32
- let(:codes) { %w(200 401 404 429) }
32
+ let(:codes) { %w[200 401 404 429] }
33
33
 
34
34
  let(:responses) { subject['paths']['/issue_572']['get']['responses'] }
35
35
 
@@ -52,7 +52,7 @@ describe Grape::Endpoint do
52
52
  let(:object) { subject.content_types_for(target_class) }
53
53
 
54
54
  specify do
55
- expect(object).to eql %w(application/xml application/json text/plain)
55
+ expect(object).to eql %w[application/xml application/json text/plain]
56
56
  end
57
57
  end
58
58
  end
@@ -41,19 +41,19 @@ describe GrapeSwagger::DocMethods::ParseParams do
41
41
  end
42
42
 
43
43
  describe 'as Array' do
44
- let(:values) { proc { %w(a b c) } }
44
+ let(:values) { proc { %w[a b c] } }
45
45
  specify do
46
46
  parsed_range = subject.send(:parse_enum_or_range_values, values)
47
- expect(parsed_range).to eql(enum: %w(a b c))
47
+ expect(parsed_range).to eql(enum: %w[a b c])
48
48
  end
49
49
  end
50
50
  end
51
51
 
52
52
  describe 'values as Array -> enums' do
53
- let(:values) { %w(a b c) }
53
+ let(:values) { %w[a b c] }
54
54
  specify do
55
55
  parsed_range = subject.send(:parse_enum_or_range_values, values)
56
- expect(parsed_range).to eql(enum: %w(a b c))
56
+ expect(parsed_range).to eql(enum: %w[a b c])
57
57
  end
58
58
  end
59
59
  end
@@ -8,7 +8,7 @@ describe GrapeSwagger::DocMethods::TagNameDescription do
8
8
  subject { described_class.send(:build_memo, tag) }
9
9
 
10
10
  specify do
11
- expect(subject.keys).to eql %i(name description)
11
+ expect(subject.keys).to eql %i[name description]
12
12
  expect(subject).to eql(
13
13
  name: tag,
14
14
  description: "Operations about #{tag.pluralize}"
@@ -51,7 +51,7 @@ describe GrapeSwagger::DocMethods::TagNameDescription do
51
51
  describe 'uniq key' do
52
52
  let(:paths) do
53
53
  {
54
- key_1: { post: { tags: %w(tags_given another_tag_given) } }
54
+ key_1: { post: { tags: %w[tags_given another_tag_given] } }
55
55
  }
56
56
  end
57
57
 
@@ -9,7 +9,7 @@ describe GrapeSwagger::DocMethods::Version do
9
9
  describe 'grape 0.16.2 version' do
10
10
  let(:version) { '[:v1, :v2]' }
11
11
  it { is_expected.to be_a Array }
12
- it { is_expected.to eql %i(v1 v2) }
12
+ it { is_expected.to eql %i[v1 v2] }
13
13
  end
14
14
 
15
15
  describe 'newer grape versions' do
@@ -20,9 +20,9 @@ describe GrapeSwagger::DocMethods::Version do
20
20
  end
21
21
 
22
22
  describe 'as Array' do
23
- let(:version) { %i(v1 v2) }
23
+ let(:version) { %i[v1 v2] }
24
24
  it { is_expected.to be_a Array }
25
- it { is_expected.to eql %i(v1 v2) }
25
+ it { is_expected.to eql %i[v1 v2] }
26
26
  end
27
27
  end
28
28
  end
@@ -11,7 +11,7 @@ RSpec.shared_context 'entity swagger example' do
11
11
  end
12
12
 
13
13
  class EnumValues < Grape::Entity
14
- expose :gender, documentation: { type: 'string', desc: 'Content of something.', values: %w(Male Female) }
14
+ expose :gender, documentation: { type: 'string', desc: 'Content of something.', values: %w[Male Female] }
15
15
  expose :number, documentation: { type: 'integer', desc: 'Content of something.', values: [1, 2] }
16
16
  end
17
17
 
@@ -312,7 +312,7 @@ RSpec.shared_context 'entity swagger example' do
312
312
  },
313
313
  'QueryInputElement' => {
314
314
  'type' => 'object',
315
- 'required' => %w(key value),
315
+ 'required' => %w[key value],
316
316
  'properties' => { 'key' => { 'type' => 'string', 'description' => 'Name of parameter' }, 'value' => { 'type' => 'string', 'description' => 'Value of parameter' } }
317
317
  },
318
318
  'ApiError' => {
@@ -334,9 +334,9 @@ RSpec.shared_context 'entity swagger example' do
334
334
  }
335
335
  end
336
336
 
337
- let(:http_verbs) { %w(get post put delete) }
337
+ let(:http_verbs) { %w[get post put delete] }
338
338
  end
339
339
 
340
340
  def mounted_paths
341
- %w(/thing /other_thing /dummy)
341
+ %w[/thing /other_thing /dummy]
342
342
  end
@@ -330,9 +330,9 @@ RSpec.shared_context 'mock swagger example' do
330
330
  }
331
331
  end
332
332
 
333
- let(:http_verbs) { %w(get post put delete) }
333
+ let(:http_verbs) { %w[get post put delete] }
334
334
  end
335
335
 
336
336
  def mounted_paths
337
- %w(/thing /other_thing /dummy)
337
+ %w[/thing /other_thing /dummy]
338
338
  end
@@ -29,7 +29,7 @@ RSpec.shared_context 'representable swagger example' do
29
29
  class EnumValues < Representable::Decorator
30
30
  include Representable::JSON
31
31
 
32
- property :gender, documentation: { type: 'string', desc: 'Content of something.', values: %w(Male Female) }
32
+ property :gender, documentation: { type: 'string', desc: 'Content of something.', values: %w[Male Female] }
33
33
  property :number, documentation: { type: 'integer', desc: 'Content of something.', values: [1, 2] }
34
34
  end
35
35
 
@@ -384,7 +384,7 @@ RSpec.shared_context 'representable swagger example' do
384
384
  },
385
385
  'QueryInputElement' => {
386
386
  'type' => 'object',
387
- 'required' => %w(key value),
387
+ 'required' => %w[key value],
388
388
  'properties' => { 'key' => { 'type' => 'string', 'description' => 'Name of parameter' }, 'value' => { 'type' => 'string', 'description' => 'Value of parameter' } }
389
389
  },
390
390
  'ApiError' => {
@@ -406,9 +406,9 @@ RSpec.shared_context 'representable swagger example' do
406
406
  }
407
407
  end
408
408
 
409
- let(:http_verbs) { %w(get post put delete) }
409
+ let(:http_verbs) { %w[get post put delete] }
410
410
  end
411
411
 
412
412
  def mounted_paths
413
- %w(/thing /other_thing /dummy)
413
+ %w[/thing /other_thing /dummy]
414
414
  end
@@ -26,7 +26,8 @@ describe 'global configuration stuff' do
26
26
  mount_path: 'documentation',
27
27
  add_base_path: true,
28
28
  add_version: true,
29
- security_definitions: { api_key: { foo: 'bar' } }
29
+ security_definitions: { api_key: { foo: 'bar' } },
30
+ security: [{ api_key: [] }]
30
31
  end
31
32
  end
32
33
  end
@@ -49,6 +50,7 @@ describe 'global configuration stuff' do
49
50
  expect(subject['schemes']).to eql ['https']
50
51
  expect(subject['securityDefinitions'].keys).to include('api_key')
51
52
  expect(subject['securityDefinitions']['api_key']).to include('foo' => 'bar')
53
+ expect(subject['security']).to include('api_key' => [])
52
54
  end
53
55
  end
54
56
  end
@@ -138,11 +138,11 @@ describe 'moving body/formData Params to definitions' do
138
138
  'city' => { 'type' => 'string', 'description' => 'city' },
139
139
  'country' => { 'type' => 'string', 'description' => 'country' }
140
140
  },
141
- 'required' => %w(street postcode city)
141
+ 'required' => %w[street postcode city]
142
142
  }
143
143
  }
144
144
  },
145
- 'required' => %w(name)
145
+ 'required' => %w[name]
146
146
  }
147
147
  },
148
148
  'description' => 'post in body with nested parameters'
@@ -232,7 +232,7 @@ describe 'moving body/formData Params to definitions' do
232
232
  }
233
233
  }
234
234
  },
235
- 'required' => %w(name)
235
+ 'required' => %w[name]
236
236
  }
237
237
  },
238
238
  'description' => 'put in body with multiple nested parameters'
@@ -26,7 +26,7 @@ describe 'Form Params' do
26
26
  params do
27
27
  requires :id, type: Integer, desc: 'id of item'
28
28
  requires :name, type: String, desc: 'name of item'
29
- optional :conditions, type: String, desc: 'conditions of item', values: proc { %w(1 2) }
29
+ optional :conditions, type: String, desc: 'conditions of item', values: proc { %w[1 2] }
30
30
  end
31
31
  patch '/items/:id' do
32
32
  {}
@@ -35,7 +35,7 @@ describe 'Form Params' do
35
35
  params do
36
36
  requires :id, type: Integer, desc: 'id of item'
37
37
  requires :name, type: String, desc: 'name of item'
38
- optional :conditions, type: Symbol, desc: 'conditions of item', values: %i(one two)
38
+ optional :conditions, type: Symbol, desc: 'conditions of item', values: %i[one two]
39
39
  end
40
40
  post '/items/:id' do
41
41
  {}
@@ -61,7 +61,7 @@ describe 'Form Params' do
61
61
  expect(subject['paths']['/items/{id}']['post']['parameters']).to eq [
62
62
  { 'in' => 'path', 'name' => 'id', 'description' => 'id of item', 'type' => 'integer', 'required' => true, 'format' => 'int32' },
63
63
  { 'in' => 'formData', 'name' => 'name', 'description' => 'name of item', 'type' => 'string', 'required' => true },
64
- { 'in' => 'formData', 'name' => 'conditions', 'description' => 'conditions of item', 'type' => 'string', 'required' => false, 'enum' => %w(one two) }
64
+ { 'in' => 'formData', 'name' => 'conditions', 'description' => 'conditions of item', 'type' => 'string', 'required' => false, 'enum' => %w[one two] }
65
65
  ]
66
66
  end
67
67
  end
@@ -8,7 +8,7 @@ describe 'namespace tags check while using prefix and version' do
8
8
  before :all do
9
9
  module TheApi
10
10
  class NamespaceApi < Grape::API
11
- version %i(v1 v2)
11
+ version %i[v1 v2]
12
12
  end
13
13
 
14
14
  class CascadingVersionApi < Grape::API
@@ -69,7 +69,7 @@ describe 'Params Multi Types' do
69
69
 
70
70
  it 'has consistent types' do
71
71
  types = subject.map { |param| param['type'] }
72
- expect(types).to eq(%w(string string string))
72
+ expect(types).to eq(%w[string string string])
73
73
  end
74
74
  end
75
75
  end
@@ -57,7 +57,7 @@ describe 'Params Types' do
57
57
 
58
58
  it 'has consistent types' do
59
59
  types = subject.map { |param| param['type'] }
60
- expect(types).to eq(%w(string string))
60
+ expect(types).to eq(%w[string string])
61
61
  end
62
62
  end
63
63
  end
@@ -9,13 +9,13 @@ describe 'Convert values to enum or Range' do
9
9
  format :json
10
10
 
11
11
  params do
12
- requires :letter, type: String, values: %w(a b c)
12
+ requires :letter, type: String, values: %w[a b c]
13
13
  end
14
14
  post :plain_array do
15
15
  end
16
16
 
17
17
  params do
18
- requires :letter, type: String, values: proc { %w(d e f) }
18
+ requires :letter, type: String, values: proc { %w[d e f] }
19
19
  end
20
20
  post :array_in_proc do
21
21
  end
@@ -51,7 +51,7 @@ describe 'Convert values to enum or Range' do
51
51
  'name' => 'letter',
52
52
  'type' => 'string',
53
53
  'required' => true,
54
- 'enum' => %w(a b c)
54
+ 'enum' => %w[a b c]
55
55
  }]
56
56
  end
57
57
  end
@@ -65,7 +65,7 @@ describe 'Convert values to enum or Range' do
65
65
  'name' => 'letter',
66
66
  'type' => 'string',
67
67
  'required' => true,
68
- 'enum' => %w(d e f)
68
+ 'enum' => %w[d e f]
69
69
  }]
70
70
  end
71
71
  end
@@ -125,7 +125,7 @@ describe 'Group Params as Array' do
125
125
  'type' => 'integer', 'format' => 'int32', 'description' => 'nested array of integers'
126
126
  }
127
127
  },
128
- 'required' => %w(array_of_string array_of_integer)
128
+ 'required' => %w[array_of_string array_of_integer]
129
129
  )
130
130
  end
131
131
  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.27.0
4
+ version: 0.27.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: 2017-03-28 00:00:00.000000000 Z
11
+ date: 2017-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grape
@@ -178,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
178
178
  version: '0'
179
179
  requirements: []
180
180
  rubyforge_project:
181
- rubygems_version: 2.6.10
181
+ rubygems_version: 2.6.11
182
182
  signing_key:
183
183
  specification_version: 4
184
184
  summary: Add auto generated documentation to your Grape API that can be displayed