swagger-blocks 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -0
- data/README.md +55 -1
- data/lib/swagger/blocks.rb +107 -102
- data/lib/swagger/blocks/version.rb +1 -1
- data/spec/lib/swagger_blocks_spec.rb +18 -40
- data/spec/lib/swagger_v2_blocks_spec.rb +10 -21
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c7496406adf0203039b05240d05884c3797dbe6
|
4
|
+
data.tar.gz: 04a0a51888a8984b63b0ba0e5afd1e7b1e1f69d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8741eca62a459b7efa76feafd0437f4659d964013776ac719cf84d654139917ea2d64827583dd2b1236014bdf728d49b37138e081f7d7dffe59340da783d5d38
|
7
|
+
data.tar.gz: aa8fa55c5e433bf6dd0aa02ab64a527639985a9409ec8e518e300db2b972b35c17134b92260375ae6bec2dc51b0e2774d70382a338793028938dc78f62f3cbb1
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -17,7 +17,7 @@ It helps you write API docs in the [Swagger](https://helloreverb.com/developers/
|
|
17
17
|
|
18
18
|
## Swagger UI demo
|
19
19
|
|
20
|
-
http://petstore.swagger.
|
20
|
+
http://petstore.swagger.io/
|
21
21
|
|
22
22
|
![swagger-sample](https://cloud.githubusercontent.com/assets/75300/5822830/4769805c-a08c-11e4-9efe-d57cf0f752e0.png)
|
23
23
|
|
@@ -331,6 +331,37 @@ The `key` block simply takes the value you give and puts it directly into the fi
|
|
331
331
|
key :foo, {some_complex: {nested_object: true}}
|
332
332
|
```
|
333
333
|
|
334
|
+
#### Inline keys
|
335
|
+
|
336
|
+
It is possible to omit numerous `key` calls using inline hash keys on any block.
|
337
|
+
|
338
|
+
All three calls are equivalent:
|
339
|
+
|
340
|
+
```ruby
|
341
|
+
parameter do
|
342
|
+
key :paramType, :path
|
343
|
+
key :name, :petId
|
344
|
+
key :description, 'ID of pet that needs to be fetched'
|
345
|
+
key :type, :string
|
346
|
+
end
|
347
|
+
```
|
348
|
+
|
349
|
+
```ruby
|
350
|
+
parameter paramType: :path, name: :petId do
|
351
|
+
key :description, 'ID of pet that needs to be fetched'
|
352
|
+
key :type, :string
|
353
|
+
end
|
354
|
+
```
|
355
|
+
|
356
|
+
```ruby
|
357
|
+
parameter paramType: :path,
|
358
|
+
name: :petId,
|
359
|
+
description: 'ID of pet that needs to be fetched',
|
360
|
+
type: :string
|
361
|
+
```
|
362
|
+
|
363
|
+
These inline keys can be used on any block, not just `parameter` blocks.
|
364
|
+
|
334
365
|
#### Writing JSON to a file
|
335
366
|
|
336
367
|
If you are not serving the JSON directly and need to write it to a file for some reason, you can easily use `build_root_json` for that as well:
|
@@ -340,6 +371,16 @@ swagger_data = Swagger::Blocks.build_root_json(SWAGGERED_CLASSES)
|
|
340
371
|
File.open('swagger.json', 'w') { |file| file.write(swagger_data.to_json) }
|
341
372
|
```
|
342
373
|
|
374
|
+
#### Overriding attributes
|
375
|
+
|
376
|
+
If certain attributes must be customized on-the-fly, you can merge a hash containing the customized values on the returned JSON. You can wrap ```build_root_json``` inside your own method:
|
377
|
+
|
378
|
+
```Ruby
|
379
|
+
def build_and_override_root_json(overrides = {})
|
380
|
+
Swagger::Blocks.build_root_json(SWAGGERED_CLASSES).merge(overrides)
|
381
|
+
end
|
382
|
+
```
|
383
|
+
|
343
384
|
### Swagger 1.2 example (Rails)
|
344
385
|
|
345
386
|
See the [v1.2 docs](https://github.com/fotinakis/swagger-blocks/blob/master/README_v1_2.md).
|
@@ -358,8 +399,21 @@ See the [swagger_v2_blocks_spec.rb](https://github.com/fotinakis/swagger-blocks/
|
|
358
399
|
|
359
400
|
Throw a ★ on it! :)
|
360
401
|
|
402
|
+
## Filing issues
|
403
|
+
|
404
|
+
**Please DO [file an issue](https://github.com/fotinakis/swagger-blocks/issues)**:
|
405
|
+
|
406
|
+
- If you find a bug or some part of the Swagger 2.0 spec that swagger-blocks does not support.
|
407
|
+
- To propose and discuss a code change before submitting a PR for it.
|
408
|
+
- To talk about anything related specifically to swagger-blocks, not Swagger itself.
|
409
|
+
|
410
|
+
**Please DO NOT file an issue**:
|
411
|
+
|
412
|
+
- If you have a question about Swagger or Swagger UI. We simply cannot support all Swagger-related questions. Check out the http://swagger.io/community/ for help.
|
413
|
+
|
361
414
|
## Release notes
|
362
415
|
|
416
|
+
* v1.3.0: Added support for condensed syntax via inline keys on every block.
|
363
417
|
* v1.2.0: Improved support for `$ref` Path Item Object parameters.
|
364
418
|
* v1.1.3: Rename tags directive to tag for consistency.
|
365
419
|
* v1.1.2: Bugfix for security definition support.
|
data/lib/swagger/blocks.rb
CHANGED
@@ -113,8 +113,8 @@ module Swagger
|
|
113
113
|
# v1.2: http://goo.gl/PvwUXj#51-resource-listing
|
114
114
|
# v2.0: Defines a Swagger Object
|
115
115
|
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#swagger-object
|
116
|
-
def swagger_root(&block)
|
117
|
-
@swagger_root_node ||= Swagger::Blocks::RootNode.call(&block)
|
116
|
+
def swagger_root(inline_keys = nil, &block)
|
117
|
+
@swagger_root_node ||= Swagger::Blocks::RootNode.call(inline_keys: inline_keys, &block)
|
118
118
|
end
|
119
119
|
|
120
120
|
# v1.2: Defines a Swagger API Declaration.
|
@@ -122,7 +122,7 @@ module Swagger
|
|
122
122
|
# v1.2:
|
123
123
|
# v1.2: @param resource_name [Symbol] An identifier for this API. All swagger_api_root declarations
|
124
124
|
# v1.2: with the same resource_name will be into a single API root node.
|
125
|
-
def swagger_api_root(resource_name, &block)
|
125
|
+
def swagger_api_root(resource_name, inline_keys = nil, &block)
|
126
126
|
resource_name = resource_name.to_sym
|
127
127
|
|
128
128
|
# Map of path names to ApiDeclarationNodes.
|
@@ -136,7 +136,7 @@ module Swagger
|
|
136
136
|
api_node.instance_eval(&block)
|
137
137
|
else
|
138
138
|
# First time we've seen this `swagger_api_root :resource_name`.
|
139
|
-
api_node = Swagger::Blocks::ApiDeclarationNode.call(version: '1.2', &block)
|
139
|
+
api_node = Swagger::Blocks::ApiDeclarationNode.call(version: '1.2', inline_keys: inline_keys, &block)
|
140
140
|
end
|
141
141
|
|
142
142
|
# Add it into the resource_name to node map (may harmlessly overwrite the same object).
|
@@ -165,16 +165,16 @@ module Swagger
|
|
165
165
|
|
166
166
|
# v1.2: Defines a Swagger Model.
|
167
167
|
# v1.2: http://goo.gl/PvwUXj#526-models-object
|
168
|
-
def swagger_model(name, &block)
|
168
|
+
def swagger_model(name, inline_keys = nil, &block)
|
169
169
|
@swagger_models_node ||= Swagger::Blocks::ModelsNode.new
|
170
170
|
@swagger_models_node.version = '1.2'
|
171
|
-
@swagger_models_node.model(name, &block)
|
171
|
+
@swagger_models_node.model(name, inline_keys, &block)
|
172
172
|
end
|
173
173
|
|
174
174
|
# v2.0: Defines a Swagger Definition Schema,
|
175
175
|
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#definitionsObject and
|
176
176
|
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#schema-object
|
177
|
-
def swagger_schema(name, &block)
|
177
|
+
def swagger_schema(name, inline_keys = nil, &block)
|
178
178
|
@swagger_schema_node_map ||= {}
|
179
179
|
|
180
180
|
schema_node = @swagger_schema_node_map[name]
|
@@ -183,7 +183,7 @@ module Swagger
|
|
183
183
|
schema_node.instance_eval(&block)
|
184
184
|
else
|
185
185
|
# First time we've seen this schema_node
|
186
|
-
@swagger_schema_node_map[name] = Swagger::Blocks::SchemaNode.call(version: '2.0', &block)
|
186
|
+
@swagger_schema_node_map[name] = Swagger::Blocks::SchemaNode.call(version: '2.0', inline_keys: inline_keys, &block)
|
187
187
|
end
|
188
188
|
end
|
189
189
|
|
@@ -217,7 +217,8 @@ module Swagger
|
|
217
217
|
instance = new
|
218
218
|
instance.name = options[:name] if options[:name]
|
219
219
|
instance.version = options[:version]
|
220
|
-
instance.
|
220
|
+
instance.keys options[:inline_keys]
|
221
|
+
instance.instance_eval(&block) if block
|
221
222
|
instance
|
222
223
|
end
|
223
224
|
|
@@ -248,6 +249,10 @@ module Swagger
|
|
248
249
|
@data ||= {}
|
249
250
|
end
|
250
251
|
|
252
|
+
def keys(data)
|
253
|
+
self.data.merge!(data) if data
|
254
|
+
end
|
255
|
+
|
251
256
|
def key(key, value)
|
252
257
|
self.data[key] = value
|
253
258
|
end
|
@@ -288,60 +293,60 @@ module Swagger
|
|
288
293
|
api_paths.include?(api_path)
|
289
294
|
end
|
290
295
|
|
291
|
-
def authorization(name, &block)
|
296
|
+
def authorization(name, inline_keys = nil, &block)
|
292
297
|
raise NotSupportedError unless is_swagger_1_2?
|
293
298
|
|
294
299
|
self.data[:authorizations] ||= Swagger::Blocks::ResourceListingAuthorizationsNode.new
|
295
300
|
self.data[:authorizations].version = version
|
296
|
-
self.data[:authorizations].authorization(name, &block)
|
301
|
+
self.data[:authorizations].authorization(name, inline_keys, &block)
|
297
302
|
end
|
298
303
|
|
299
|
-
def info(&block)
|
300
|
-
self.data[:info] = Swagger::Blocks::InfoNode.call(version: version, &block)
|
304
|
+
def info(inline_keys = nil, &block)
|
305
|
+
self.data[:info] = Swagger::Blocks::InfoNode.call(version: version, inline_keys: inline_keys, &block)
|
301
306
|
end
|
302
307
|
|
303
|
-
def api(&block)
|
308
|
+
def api(inline_keys = nil, &block)
|
304
309
|
raise NotSupportedError unless is_swagger_1_2?
|
305
310
|
|
306
311
|
self.data[:apis] ||= []
|
307
|
-
self.data[:apis] << Swagger::Blocks::ResourceNode.call(version: version,
|
312
|
+
self.data[:apis] << Swagger::Blocks::ResourceNode.call(version: version, inline_keys: inline_keys ,&block)
|
308
313
|
end
|
309
314
|
|
310
|
-
def parameter(param, &block)
|
315
|
+
def parameter(param, inline_keys = nil, &block)
|
311
316
|
raise NotSupportedError unless is_swagger_2_0?
|
312
317
|
|
313
318
|
# TODO validate 'param' is as per spec
|
314
319
|
self.data[:parameters] ||= {}
|
315
|
-
self.data[:parameters][param] = Swagger::Blocks::ParameterNode.call(version: version, &block)
|
320
|
+
self.data[:parameters][param] = Swagger::Blocks::ParameterNode.call(version: version, inline_keys: inline_keys, &block)
|
316
321
|
end
|
317
322
|
|
318
|
-
def response(resp, &block)
|
323
|
+
def response(resp, inline_keys = nil, &block)
|
319
324
|
raise NotSupportedError unless is_swagger_2_0?
|
320
325
|
|
321
326
|
# TODO validate 'resp' is as per spec
|
322
327
|
self.data[:responses] ||= {}
|
323
|
-
self.data[:responses][resp] = Swagger::Blocks::ResponseNode.call(version: version, &block)
|
328
|
+
self.data[:responses][resp] = Swagger::Blocks::ResponseNode.call(version: version, inline_keys: inline_keys, &block)
|
324
329
|
end
|
325
330
|
|
326
|
-
def security_definition(name, &block)
|
331
|
+
def security_definition(name, inline_keys = nil, &block)
|
327
332
|
raise NotSupportedError unless is_swagger_2_0?
|
328
333
|
|
329
334
|
self.data[:securityDefinitions] ||= {}
|
330
|
-
self.data[:securityDefinitions][name] = Swagger::Blocks::SecuritySchemeNode.call(version: version, &block)
|
335
|
+
self.data[:securityDefinitions][name] = Swagger::Blocks::SecuritySchemeNode.call(version: version, inline_keys: inline_keys, &block)
|
331
336
|
end
|
332
337
|
|
333
|
-
def security(&block)
|
338
|
+
def security(inline_keys = nil, &block)
|
334
339
|
raise NotSupportedError unless is_swagger_2_0?
|
335
340
|
|
336
341
|
self.data[:security] ||= []
|
337
|
-
self.data[:security] << Swagger::Blocks::SecurityRequirementNode.call(version: version, &block)
|
342
|
+
self.data[:security] << Swagger::Blocks::SecurityRequirementNode.call(version: version, inline_keys: inline_keys, &block)
|
338
343
|
end
|
339
344
|
|
340
|
-
def tag(&block)
|
345
|
+
def tag(inline_keys = nil, &block)
|
341
346
|
raise NotSupportedError unless is_swagger_2_0?
|
342
347
|
|
343
348
|
self.data[:tags] ||= []
|
344
|
-
self.data[:tags] << Swagger::Blocks::TagNode.call(version: version, &block)
|
349
|
+
self.data[:tags] << Swagger::Blocks::TagNode.call(version: version, inline_keys: inline_keys, &block)
|
345
350
|
end
|
346
351
|
|
347
352
|
# Use 'tag' instead.
|
@@ -355,8 +360,8 @@ module Swagger
|
|
355
360
|
# v1.2: NOTE: in the spec this is different than API Declaration authorizations.
|
356
361
|
# v1.2: http://goo.gl/PvwUXj#514-authorizations-object
|
357
362
|
class ResourceListingAuthorizationsNode < Node
|
358
|
-
def authorization(name, &block)
|
359
|
-
self.data[name] = Swagger::Blocks::ResourceListingAuthorizationNode.call(version: version, &block)
|
363
|
+
def authorization(name, inline_keys = nil, &block)
|
364
|
+
self.data[name] = Swagger::Blocks::ResourceListingAuthorizationNode.call(version: version, inline_keys: inline_keys, &block)
|
360
365
|
end
|
361
366
|
end
|
362
367
|
|
@@ -365,33 +370,33 @@ module Swagger
|
|
365
370
|
class ResourceListingAuthorizationNode < Node
|
366
371
|
GRANT_TYPES = [:implicit, :authorization_code].freeze
|
367
372
|
|
368
|
-
def scope(&block)
|
373
|
+
def scope(inline_keys = nil, &block)
|
369
374
|
self.data[:scopes] ||= []
|
370
|
-
self.data[:scopes] << Swagger::Blocks::ScopeNode.call(version: version, &block)
|
375
|
+
self.data[:scopes] << Swagger::Blocks::ScopeNode.call(version: version, inline_keys: inline_keys, &block)
|
371
376
|
end
|
372
377
|
|
373
|
-
def grant_type(name, &block)
|
378
|
+
def grant_type(name, inline_keys = nil, &block)
|
374
379
|
raise ArgumentError.new("#{name} not in #{GRANT_TYPES}") if !GRANT_TYPES.include?(name)
|
375
380
|
self.data[:grantTypes] ||= Swagger::Blocks::GrantTypesNode.new
|
376
381
|
self.data[:grantTypes].version = version
|
377
|
-
self.data[:grantTypes].implicit(&block) if name == :implicit
|
378
|
-
self.data[:grantTypes].authorization_code(&block) if name == :authorization_code
|
382
|
+
self.data[:grantTypes].implicit(inline_keys, &block) if name == :implicit
|
383
|
+
self.data[:grantTypes].authorization_code(inline_keys, &block) if name == :authorization_code
|
379
384
|
end
|
380
385
|
end
|
381
386
|
|
382
387
|
# v1.2: http://goo.gl/PvwUXj#513-info-object
|
383
388
|
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#infoObject
|
384
389
|
class InfoNode < Node
|
385
|
-
def contact(&block)
|
390
|
+
def contact(inline_keys = nil, &block)
|
386
391
|
raise NotSupportedError unless is_swagger_2_0?
|
387
392
|
|
388
|
-
self.data[:contact] = Swagger::Blocks::ContactNode.call(version: version, &block)
|
393
|
+
self.data[:contact] = Swagger::Blocks::ContactNode.call(version: version, inline_keys: inline_keys, &block)
|
389
394
|
end
|
390
395
|
|
391
|
-
def license(&block)
|
396
|
+
def license(inline_keys = nil, &block)
|
392
397
|
raise NotSupportedError unless is_swagger_2_0?
|
393
398
|
|
394
|
-
self.data[:license] = Swagger::Blocks::LicenseNode.call(version: version, &block)
|
399
|
+
self.data[:license] = Swagger::Blocks::LicenseNode.call(version: version, inline_keys: inline_keys, &block)
|
395
400
|
end
|
396
401
|
end
|
397
402
|
|
@@ -409,12 +414,12 @@ module Swagger
|
|
409
414
|
|
410
415
|
# v1.2: http://goo.gl/PvwUXj#517-grant-types-object
|
411
416
|
class GrantTypesNode < Node
|
412
|
-
def implicit(&block)
|
413
|
-
self.data[:implicit] = Swagger::Blocks::ImplicitNode.call(version: version, &block)
|
417
|
+
def implicit(inline_keys, &block)
|
418
|
+
self.data[:implicit] = Swagger::Blocks::ImplicitNode.call(inline_keys: inline_keys, version: version, &block)
|
414
419
|
end
|
415
420
|
|
416
|
-
def authorization_code(&block)
|
417
|
-
self.data[:authorization_code] = Swagger::Blocks::AuthorizationCodeNode.call(version: version, &block)
|
421
|
+
def authorization_code(inline_keys, &block)
|
422
|
+
self.data[:authorization_code] = Swagger::Blocks::AuthorizationCodeNode.call(inline_keys: inline_keys, version: version, &block)
|
418
423
|
end
|
419
424
|
end
|
420
425
|
|
@@ -430,12 +435,12 @@ module Swagger
|
|
430
435
|
|
431
436
|
# v1.2: http://goo.gl/PvwUXj#519-authorization-code-object
|
432
437
|
class AuthorizationCodeNode < Node
|
433
|
-
def token_request_endpoint(&block)
|
434
|
-
self.data[:tokenRequestEndpoint] = Swagger::Blocks::TokenRequestEndpointNode.call(version: version, &block)
|
438
|
+
def token_request_endpoint(inline_keys = nil, &block)
|
439
|
+
self.data[:tokenRequestEndpoint] = Swagger::Blocks::TokenRequestEndpointNode.call(version: version, inline_keys: inline_keys, &block)
|
435
440
|
end
|
436
441
|
|
437
|
-
def token_endpoint(&block)
|
438
|
-
self.data[:tokenEndpoint] = Swagger::Blocks::TokenEndpointNode.call(version: version, &block)
|
442
|
+
def token_endpoint(inline_keys = nil, &block)
|
443
|
+
self.data[:tokenEndpoint] = Swagger::Blocks::TokenEndpointNode.call(version: version, inline_keys: inline_keys, &block)
|
439
444
|
end
|
440
445
|
end
|
441
446
|
|
@@ -451,7 +456,7 @@ module Swagger
|
|
451
456
|
|
452
457
|
# v1.2: http://goo.gl/PvwUXj#52-api-declaration
|
453
458
|
class ApiDeclarationNode < Node
|
454
|
-
def api(&block)
|
459
|
+
def api(inline_keys = nil, &block)
|
455
460
|
self.data[:apis] ||= []
|
456
461
|
|
457
462
|
# Important: to conform with the Swagger spec, merge with any previous API declarations
|
@@ -461,7 +466,7 @@ module Swagger
|
|
461
466
|
# http://goo.gl/PvwUXj#522-api-object
|
462
467
|
# - The API Object describes one or more operations on a single path. In the apis array,
|
463
468
|
# there MUST be only one API Object per path.
|
464
|
-
temp_api_node = Swagger::Blocks::ApiNode.call(version: version, &block)
|
469
|
+
temp_api_node = Swagger::Blocks::ApiNode.call(version: version, inline_keys: inline_keys, &block)
|
465
470
|
api_node = self.data[:apis].select do |api|
|
466
471
|
api.data[:path] == temp_api_node.data[:path]
|
467
472
|
end[0] # Embrace Ruby wtfs.
|
@@ -478,9 +483,9 @@ module Swagger
|
|
478
483
|
|
479
484
|
# v1.2: http://goo.gl/PvwUXj#522-api-object
|
480
485
|
class ApiNode < Node
|
481
|
-
def operation(&block)
|
486
|
+
def operation(inline_keys = nil, &block)
|
482
487
|
self.data[:operations] ||= []
|
483
|
-
self.data[:operations] << Swagger::Blocks::OperationNode.call(version: version, &block)
|
488
|
+
self.data[:operations] << Swagger::Blocks::OperationNode.call(version: version, inline_keys: inline_keys, &block)
|
484
489
|
end
|
485
490
|
end
|
486
491
|
|
@@ -489,10 +494,10 @@ module Swagger
|
|
489
494
|
OPERATION_TYPES = [:get, :put, :post, :delete, :options, :head, :patch].freeze
|
490
495
|
|
491
496
|
# TODO support ^x- Vendor Extensions
|
492
|
-
def operation(op, &block)
|
497
|
+
def operation(op, inline_keys = nil, &block)
|
493
498
|
op = op.to_sym
|
494
499
|
raise ArgumentError.new("#{name} not in #{OPERATION_TYPES}") if !OPERATION_TYPES.include?(op)
|
495
|
-
self.data[op] = Swagger::Blocks::OperationNode.call(version: version, &block)
|
500
|
+
self.data[op] = Swagger::Blocks::OperationNode.call(version: version, inline_keys: inline_keys, &block)
|
496
501
|
end
|
497
502
|
end
|
498
503
|
|
@@ -500,51 +505,51 @@ module Swagger
|
|
500
505
|
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#operation-object
|
501
506
|
class OperationNode < Node
|
502
507
|
|
503
|
-
def parameter(&block)
|
508
|
+
def parameter(inline_keys = nil, &block)
|
504
509
|
self.data[:parameters] ||= []
|
505
|
-
self.data[:parameters] << Swagger::Blocks::ParameterNode.call(version: version, &block)
|
510
|
+
self.data[:parameters] << Swagger::Blocks::ParameterNode.call(version: version, inline_keys: inline_keys, &block)
|
506
511
|
end
|
507
512
|
|
508
|
-
def response_message(&block)
|
513
|
+
def response_message(inline_keys = nil, &block)
|
509
514
|
raise NotSupportedError unless is_swagger_1_2?
|
510
515
|
|
511
516
|
self.data[:responseMessages] ||= []
|
512
|
-
self.data[:responseMessages] << Swagger::Blocks::Node.call(version: version, &block)
|
517
|
+
self.data[:responseMessages] << Swagger::Blocks::Node.call(version: version, inline_keys: inline_keys, &block)
|
513
518
|
end
|
514
519
|
|
515
|
-
def authorization(name, &block)
|
520
|
+
def authorization(name, inline_keys = nil, &block)
|
516
521
|
raise NotSupportedError unless is_swagger_1_2?
|
517
522
|
|
518
523
|
self.data[:authorizations] ||= Swagger::Blocks::ApiAuthorizationsNode.new
|
519
524
|
self.data[:authorizations].version = version
|
520
|
-
self.data[:authorizations].authorization(name, &block)
|
525
|
+
self.data[:authorizations].authorization(name, inline_keys, &block)
|
521
526
|
end
|
522
527
|
|
523
|
-
def items(&block)
|
528
|
+
def items(inline_keys = nil, &block)
|
524
529
|
raise NotSupportedError unless is_swagger_1_2?
|
525
530
|
|
526
|
-
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, &block)
|
531
|
+
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, inline_keys: inline_keys, &block)
|
527
532
|
end
|
528
533
|
|
529
|
-
def response(resp, &block)
|
534
|
+
def response(resp, inline_keys = nil, &block)
|
530
535
|
raise NotSupportedError unless is_swagger_2_0?
|
531
536
|
|
532
537
|
# TODO validate 'resp' is as per spec
|
533
538
|
self.data[:responses] ||= {}
|
534
|
-
self.data[:responses][resp] = Swagger::Blocks::ResponseNode.call(version: version, &block)
|
539
|
+
self.data[:responses][resp] = Swagger::Blocks::ResponseNode.call(version: version, inline_keys: inline_keys, &block)
|
535
540
|
end
|
536
541
|
|
537
|
-
def externalDocs(&block)
|
542
|
+
def externalDocs(inline_keys = nil, &block)
|
538
543
|
raise NotSupportedError unless is_swagger_2_0?
|
539
544
|
|
540
|
-
self.data[:externalDocs] = Swagger::Blocks::ExternalDocsNode.call(version: version, &block)
|
545
|
+
self.data[:externalDocs] = Swagger::Blocks::ExternalDocsNode.call(version: version, inline_keys: inline_keys, &block)
|
541
546
|
end
|
542
547
|
|
543
|
-
def security(&block)
|
548
|
+
def security(inline_keys = nil, &block)
|
544
549
|
raise NotSupportedError unless is_swagger_2_0?
|
545
550
|
|
546
551
|
self.data[:security] ||= []
|
547
|
-
self.data[:security] << Swagger::Blocks::SecurityRequirementNode.call(version: version, &block)
|
552
|
+
self.data[:security] << Swagger::Blocks::SecurityRequirementNode.call(version: version, inline_keys: inline_keys, &block)
|
548
553
|
end
|
549
554
|
end
|
550
555
|
|
@@ -558,16 +563,16 @@ module Swagger
|
|
558
563
|
class SecuritySchemeNode < Node
|
559
564
|
# TODO support ^x- Vendor Extensions
|
560
565
|
|
561
|
-
def scopes(&block)
|
562
|
-
self.data[:scopes] = Swagger::Blocks::ScopesNode.call(version: version, &block)
|
566
|
+
def scopes(inline_keys = nil, &block)
|
567
|
+
self.data[:scopes] = Swagger::Blocks::ScopesNode.call(version: version, inline_keys: inline_keys, &block)
|
563
568
|
end
|
564
569
|
end
|
565
570
|
|
566
571
|
# v1.2: NOTE: in the spec this is different than Resource Listing's authorizations.
|
567
572
|
# v1.2: http://goo.gl/PvwUXj#514-authorizations-object
|
568
573
|
class ApiAuthorizationsNode < Node
|
569
|
-
def authorization(name, &block)
|
570
|
-
self.data[name] ||= Swagger::Blocks::ApiAuthorizationNode.call(version: version, &block)
|
574
|
+
def authorization(name, inline_keys, &block)
|
575
|
+
self.data[name] ||= Swagger::Blocks::ApiAuthorizationNode.call(version: version, inline_keys: inline_keys, &block)
|
571
576
|
end
|
572
577
|
end
|
573
578
|
|
@@ -581,9 +586,9 @@ module Swagger
|
|
581
586
|
self.data[:_scopes].map { |s| s.as_json }
|
582
587
|
end
|
583
588
|
|
584
|
-
def scope(&block)
|
589
|
+
def scope(inline_keys = nil, &block)
|
585
590
|
self.data[:_scopes] ||= []
|
586
|
-
self.data[:_scopes] << Swagger::Blocks::ApiAuthorizationScopeNode.call(version: version, &block)
|
591
|
+
self.data[:_scopes] << Swagger::Blocks::ApiAuthorizationScopeNode.call(version: version, inline_keys: inline_keys, &block)
|
587
592
|
end
|
588
593
|
end
|
589
594
|
|
@@ -593,20 +598,20 @@ module Swagger
|
|
593
598
|
|
594
599
|
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#responseObject
|
595
600
|
class ResponseNode < Node
|
596
|
-
def schema(&block)
|
597
|
-
self.data[:schema] = Swagger::Blocks::SchemaNode.call(version: version, &block)
|
601
|
+
def schema(inline_keys = nil, &block)
|
602
|
+
self.data[:schema] = Swagger::Blocks::SchemaNode.call(version: version, inline_keys: inline_keys, &block)
|
598
603
|
end
|
599
604
|
|
600
|
-
def header(head, &block)
|
605
|
+
def header(head, inline_keys = nil, &block)
|
601
606
|
# TODO validate 'head' is as per spec
|
602
607
|
self.data[:headers] ||= {}
|
603
|
-
self.data[:headers][head] = Swagger::Blocks::HeaderNode.call(version: version, &block)
|
608
|
+
self.data[:headers][head] = Swagger::Blocks::HeaderNode.call(version: version, inline_keys: inline_keys, &block)
|
604
609
|
end
|
605
610
|
|
606
|
-
def example(exam, &block)
|
611
|
+
def example(exam, inline_keys = nil, &block)
|
607
612
|
# TODO validate 'exam' is as per spec
|
608
613
|
self.data[:examples] ||= {}
|
609
|
-
self.data[:examples][exam] = Swagger::Blocks::ExampleNode.call(version: version, &block)
|
614
|
+
self.data[:examples][exam] = Swagger::Blocks::ExampleNode.call(version: version, inline_keys: inline_keys, &block)
|
610
615
|
end
|
611
616
|
end
|
612
617
|
|
@@ -642,40 +647,40 @@ module Swagger
|
|
642
647
|
raise NotSupportedError
|
643
648
|
end
|
644
649
|
|
645
|
-
def schema(&block)
|
646
|
-
data << Swagger::Blocks::SchemaNode.call(version: version, &block)
|
650
|
+
def schema(inline_keys = nil, &block)
|
651
|
+
data << Swagger::Blocks::SchemaNode.call(version: version, inline_keys: inline_keys, &block)
|
647
652
|
end
|
648
653
|
end
|
649
654
|
|
650
655
|
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#schema-object
|
651
656
|
class SchemaNode < Node
|
652
|
-
def items(&block)
|
653
|
-
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, &block)
|
657
|
+
def items(inline_keys = nil, &block)
|
658
|
+
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, inline_keys: inline_keys, &block)
|
654
659
|
end
|
655
660
|
|
656
661
|
def allOf(&block)
|
657
662
|
self.data[:allOf] = Swagger::Blocks::AllOfNode.call(version: version, &block)
|
658
663
|
end
|
659
664
|
|
660
|
-
def property(name, &block)
|
665
|
+
def property(name, inline_keys = nil, &block)
|
661
666
|
self.data[:properties] ||= Swagger::Blocks::PropertiesNode.new
|
662
667
|
self.data[:properties].version = version
|
663
|
-
self.data[:properties].property(name, &block)
|
668
|
+
self.data[:properties].property(name, inline_keys, &block)
|
664
669
|
end
|
665
670
|
|
666
|
-
def xml(&block)
|
667
|
-
self.data[:xml] = Swagger::Blocks::XmlNode.call(version: version, &block)
|
671
|
+
def xml(inline_keys = nil, &block)
|
672
|
+
self.data[:xml] = Swagger::Blocks::XmlNode.call(version: version, inline_keys: inline_keys, &block)
|
668
673
|
end
|
669
674
|
|
670
|
-
def externalDocs(&block)
|
671
|
-
self.data[:externalDocs] = Swagger::Blocks::ExternalDocsNode.call(version: version, &block)
|
675
|
+
def externalDocs(inline_keys = nil, &block)
|
676
|
+
self.data[:externalDocs] = Swagger::Blocks::ExternalDocsNode.call(version: version, inline_keys: inline_keys, &block)
|
672
677
|
end
|
673
678
|
end
|
674
679
|
|
675
680
|
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#headerObject
|
676
681
|
class HeaderNode < Node
|
677
|
-
def items(&block)
|
678
|
-
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, &block)
|
682
|
+
def items(inline_keys = nil, &block)
|
683
|
+
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, inline_keys: inline_keys, &block)
|
679
684
|
end
|
680
685
|
end
|
681
686
|
|
@@ -692,16 +697,16 @@ module Swagger
|
|
692
697
|
# v1.2: http://goo.gl/PvwUXj#524-parameter-object
|
693
698
|
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#parameter-object
|
694
699
|
class ParameterNode < Node
|
695
|
-
def schema(&block)
|
700
|
+
def schema(inline_keys = nil, &block)
|
696
701
|
raise NotSupportedError unless is_swagger_2_0?
|
697
702
|
|
698
|
-
self.data[:schema] = Swagger::Blocks::SchemaNode.call(version: version, &block)
|
703
|
+
self.data[:schema] = Swagger::Blocks::SchemaNode.call(version: version, inline_keys: inline_keys, &block)
|
699
704
|
end
|
700
705
|
|
701
|
-
def items(&block)
|
706
|
+
def items(inline_keys = nil, &block)
|
702
707
|
raise NotSupportedError unless is_swagger_2_0?
|
703
708
|
|
704
|
-
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, &block)
|
709
|
+
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, inline_keys: inline_keys, &block)
|
705
710
|
end
|
706
711
|
end
|
707
712
|
|
@@ -710,8 +715,8 @@ module Swagger
|
|
710
715
|
|
711
716
|
# TODO support ^x- Vendor Extensions
|
712
717
|
|
713
|
-
def externalDocs(&block)
|
714
|
-
self.data[:externalDocs] = Swagger::Blocks::ExternalDocsNode.call(version: version, &block)
|
718
|
+
def externalDocs(inline_keys = nil, &block)
|
719
|
+
self.data[:externalDocs] = Swagger::Blocks::ExternalDocsNode.call(version: version, inline_keys: inline_keys, &block)
|
715
720
|
end
|
716
721
|
end
|
717
722
|
|
@@ -725,31 +730,31 @@ module Swagger
|
|
725
730
|
self.data.merge!(other_models_node.data)
|
726
731
|
end
|
727
732
|
|
728
|
-
def model(name, &block)
|
729
|
-
self.data[name] ||= Swagger::Blocks::ModelNode.call(version: version, &block)
|
733
|
+
def model(name, inline_keys, &block)
|
734
|
+
self.data[name] ||= Swagger::Blocks::ModelNode.call(version: version, inline_keys: inline_keys, &block)
|
730
735
|
end
|
731
736
|
end
|
732
737
|
|
733
738
|
# v1.2: http://goo.gl/PvwUXj#527-model-object
|
734
739
|
class ModelNode < Node
|
735
|
-
def property(name, &block)
|
740
|
+
def property(name, inline_keys = nil, &block)
|
736
741
|
self.data[:properties] ||= Swagger::Blocks::PropertiesNode.new
|
737
742
|
self.data[:properties].version = version
|
738
|
-
self.data[:properties].property(name, &block)
|
743
|
+
self.data[:properties].property(name, inline_keys, &block)
|
739
744
|
end
|
740
745
|
end
|
741
746
|
|
742
747
|
# v1.2: http://goo.gl/PvwUXj#527-model-object
|
743
748
|
class PropertiesNode < Node
|
744
|
-
def property(name, &block)
|
745
|
-
self.data[name] = Swagger::Blocks::PropertyNode.call(version: version, &block)
|
749
|
+
def property(name, inline_keys = nil, &block)
|
750
|
+
self.data[name] = Swagger::Blocks::PropertyNode.call(version: version, inline_keys: inline_keys, &block)
|
746
751
|
end
|
747
752
|
end
|
748
753
|
|
749
754
|
# v1.2: http://goo.gl/PvwUXj#527-model-object
|
750
755
|
class PropertyNode < Node
|
751
|
-
def items(&block)
|
752
|
-
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, &block)
|
756
|
+
def items(inline_keys = nil, &block)
|
757
|
+
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, inline_keys: inline_keys, &block)
|
753
758
|
end
|
754
759
|
end
|
755
760
|
end
|
@@ -10,21 +10,16 @@ API_DECLARATION_JSON = open(File.expand_path('../swagger_api_declaration.json',
|
|
10
10
|
class PetController
|
11
11
|
include Swagger::Blocks
|
12
12
|
|
13
|
-
swagger_root do
|
14
|
-
key :swaggerVersion, '1.2'
|
13
|
+
swagger_root swaggerVersion: '1.2'do
|
15
14
|
key :apiVersion, '1.0.0'
|
16
|
-
info do
|
17
|
-
key :title, 'Swagger Sample App'
|
15
|
+
info title: 'Swagger Sample App' do
|
18
16
|
key :description, "This is a sample server Petstore server. You can find out more about Swagger \n at <a href=\"http://swagger.wordnik.com\">http://swagger.wordnik.com</a> or on irc.freenode.net, #swagger. For this sample,\n you can use the api key \"special-key\" to test the authorization filters"
|
19
17
|
key :termsOfServiceUrl, 'http://helloreverb.com/terms/'
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
-
api do
|
25
|
-
key :path, '/pet'
|
26
|
-
key :description, 'Operations about pets'
|
18
|
+
keys contact: 'apiteam@wordnik.com',
|
19
|
+
license: 'Apache 2.0',
|
20
|
+
licenseUrl: 'http://www.apache.org/licenses/LICENSE-2.0.html'
|
27
21
|
end
|
22
|
+
api path: '/pet', description: 'Operations about pets'
|
28
23
|
api do
|
29
24
|
key :path, '/user'
|
30
25
|
key :description, 'Operations about user'
|
@@ -33,39 +28,31 @@ class PetController
|
|
33
28
|
key :path, '/store'
|
34
29
|
key :description, 'Operations about store'
|
35
30
|
end
|
36
|
-
authorization :oauth2 do
|
37
|
-
|
38
|
-
scope do
|
39
|
-
key :scope, 'email'
|
40
|
-
key :description, 'Access to your email address'
|
41
|
-
end
|
31
|
+
authorization :oauth2, type: 'oauth2' do
|
32
|
+
scope scope: 'email', description: 'Access to your email address'
|
42
33
|
scope do
|
43
34
|
key :scope, 'pets'
|
44
35
|
key :description, 'Access to your pets'
|
45
36
|
end
|
46
|
-
grant_type :implicit do
|
37
|
+
grant_type :implicit, tokenName: 'access_token' do
|
47
38
|
login_endpoint do
|
48
39
|
key :url, 'http://petstore.swagger.wordnik.com/oauth/dialog'
|
49
40
|
end
|
50
|
-
key :tokenName, 'access_token'
|
51
41
|
end
|
52
42
|
grant_type :authorization_code do
|
53
|
-
token_request_endpoint do
|
43
|
+
token_request_endpoint clientSecretName: 'client_secret' do
|
54
44
|
key :url, 'http://petstore.swagger.wordnik.com/oauth/requestToken'
|
55
45
|
key :clientIdName, 'client_id'
|
56
|
-
key :clientSecretName, 'client_secret'
|
57
46
|
end
|
58
|
-
token_endpoint do
|
47
|
+
token_endpoint tokenName: 'access_code' do
|
59
48
|
key :url, 'http://petstore.swagger.wordnik.com/oauth/token'
|
60
|
-
key :tokenName, 'access_code'
|
61
49
|
end
|
62
50
|
end
|
63
51
|
end
|
64
52
|
end
|
65
53
|
|
66
54
|
# All swagger_api_root declarations with the same key will be merged.
|
67
|
-
swagger_api_root :pets do
|
68
|
-
key :swaggerVersion, '1.2'
|
55
|
+
swagger_api_root :pets, swaggerVersion: '1.2' do
|
69
56
|
key :apiVersion, '1.0.0'
|
70
57
|
key :basePath, 'http://petstore.swagger.wordnik.com/api'
|
71
58
|
key :resourcePath, '/pet'
|
@@ -131,8 +118,7 @@ class PetController
|
|
131
118
|
key :description, 'anything'
|
132
119
|
end
|
133
120
|
end
|
134
|
-
parameter do
|
135
|
-
key :paramType, :path
|
121
|
+
parameter paramType: :path do
|
136
122
|
key :name, :petId
|
137
123
|
key :description, 'ID of pet that needs to be fetched'
|
138
124
|
key :required, true
|
@@ -145,8 +131,7 @@ class PetController
|
|
145
131
|
key :required, true
|
146
132
|
key :type, :Pet
|
147
133
|
end
|
148
|
-
response_message do
|
149
|
-
key :code, 400
|
134
|
+
response_message code: 400 do
|
150
135
|
key :message, 'Invalid tag value'
|
151
136
|
end
|
152
137
|
end
|
@@ -156,15 +141,12 @@ class PetController
|
|
156
141
|
swagger_api_root :pets do
|
157
142
|
api do
|
158
143
|
key :path, '/pet/findByStatus'
|
159
|
-
operation do
|
160
|
-
key :method, 'GET'
|
144
|
+
operation method: 'GET' do
|
161
145
|
key :summary, 'Finds Pets by status'
|
162
146
|
key :notes, 'Multiple status values can be provided with comma seperated strings'
|
163
147
|
key :type, :array
|
164
148
|
key :nickname, :findPetsByStatus
|
165
|
-
items
|
166
|
-
key :'$ref', :Pet
|
167
|
-
end
|
149
|
+
items :'$ref' => :Pet
|
168
150
|
parameter do
|
169
151
|
key :paramType, :query
|
170
152
|
key :name, :status
|
@@ -178,10 +160,7 @@ class PetController
|
|
178
160
|
'sold',
|
179
161
|
]
|
180
162
|
end
|
181
|
-
response_message
|
182
|
-
key :code, 400
|
183
|
-
key :message, 'Invalid status value'
|
184
|
-
end
|
163
|
+
response_message code: 400, message: 'Invalid status value'
|
185
164
|
end
|
186
165
|
end
|
187
166
|
end
|
@@ -225,8 +204,7 @@ end
|
|
225
204
|
class OtherModelsContainer
|
226
205
|
include Swagger::Blocks
|
227
206
|
|
228
|
-
swagger_model :Pet do
|
229
|
-
key :id, :Pet
|
207
|
+
swagger_model :Pet, id: :Pet do
|
230
208
|
key :required, [:id, :name]
|
231
209
|
property :id do
|
232
210
|
key :type, :integer
|
@@ -8,10 +8,9 @@ RESOURCE_LISTING_JSON_V2 = open(File.expand_path('../swagger_v2_api_declaration.
|
|
8
8
|
class PetControllerV2
|
9
9
|
include Swagger::Blocks
|
10
10
|
|
11
|
-
swagger_root do
|
11
|
+
swagger_root host: 'petstore.swagger.wordnik.com' do
|
12
12
|
key :swagger, '2.0'
|
13
|
-
info do
|
14
|
-
key :version, '1.0.0'
|
13
|
+
info version: '1.0.0' do
|
15
14
|
key :title, 'Swagger Petstore'
|
16
15
|
key :description, 'A sample API that uses a petstore as an example to ' \
|
17
16
|
'demonstrate features in the swagger-2.0 specification'
|
@@ -23,13 +22,11 @@ class PetControllerV2
|
|
23
22
|
key :name, 'MIT'
|
24
23
|
end
|
25
24
|
end
|
26
|
-
key :host, 'petstore.swagger.wordnik.com'
|
27
25
|
key :basePath, '/api'
|
28
26
|
key :schemes, ['http']
|
29
27
|
key :consumes, ['application/json']
|
30
28
|
key :produces, ['application/json']
|
31
|
-
security_definition :api_key do
|
32
|
-
key :type, :apiKey
|
29
|
+
security_definition :api_key, type: :apiKey do
|
33
30
|
key :name, :api_key
|
34
31
|
key :in, :header
|
35
32
|
end
|
@@ -37,16 +34,13 @@ class PetControllerV2
|
|
37
34
|
key :type, :oauth2
|
38
35
|
key :authorizationUrl, 'http://swagger.io/api/oauth/dialog'
|
39
36
|
key :flow, :implicit
|
40
|
-
scopes do
|
41
|
-
key 'write:pets', 'modify pets in your account'
|
37
|
+
scopes 'write:pets' => 'modify pets in your account' do
|
42
38
|
key 'read:pets', 'read your pets'
|
43
39
|
end
|
44
40
|
end
|
45
|
-
tag do
|
46
|
-
key :name, 'pet'
|
41
|
+
tag name: 'pet' do
|
47
42
|
key :description, 'Pets operations'
|
48
|
-
externalDocs do
|
49
|
-
key :description, 'Find more info here'
|
43
|
+
externalDocs description: 'Find more info here' do
|
50
44
|
key :url, 'https://swagger.io'
|
51
45
|
end
|
52
46
|
end
|
@@ -83,8 +77,7 @@ class PetControllerV2
|
|
83
77
|
end
|
84
78
|
response 200 do
|
85
79
|
key :description, 'pet response'
|
86
|
-
schema do
|
87
|
-
key :type, :array
|
80
|
+
schema type: :array do
|
88
81
|
items do
|
89
82
|
key :'$ref', :Pet
|
90
83
|
end
|
@@ -119,8 +112,7 @@ class PetControllerV2
|
|
119
112
|
key :'$ref', '#/parameters/Pet'
|
120
113
|
end
|
121
114
|
end
|
122
|
-
response :default do
|
123
|
-
key :description, 'unexpected error'
|
115
|
+
response :default, description: 'unexpected error' do
|
124
116
|
schema do
|
125
117
|
key :'$ref', :ErrorModel
|
126
118
|
end
|
@@ -158,9 +150,7 @@ class PetControllerV2
|
|
158
150
|
key :'$ref', :ErrorModel
|
159
151
|
end
|
160
152
|
end
|
161
|
-
security
|
162
|
-
key :api_key, []
|
163
|
-
end
|
153
|
+
security api_key: []
|
164
154
|
security do
|
165
155
|
key :petstore_auth, ['write:pets', 'read:pets']
|
166
156
|
end
|
@@ -193,8 +183,7 @@ end
|
|
193
183
|
class PetV2
|
194
184
|
include Swagger::Blocks
|
195
185
|
|
196
|
-
swagger_schema :Pet do
|
197
|
-
key :required, [:id, :name]
|
186
|
+
swagger_schema :Pet, required: [:id, :name] do
|
198
187
|
property :id do
|
199
188
|
key :type, :integer
|
200
189
|
key :format, :int64
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swagger-blocks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Fotinakis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|