swagger-blocks 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +71 -0
- data/README_v1_2.md +2 -0
- data/lib/swagger/blocks.rb +5 -3
- data/lib/swagger/blocks/version.rb +1 -1
- data/spec/lib/swagger_v2_api_declaration.json +28 -1
- data/spec/lib/swagger_v2_blocks_spec.rb +23 -0
- 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: a6055711e3ea9c391a362d51dab6494f1fb4c8e8
|
4
|
+
data.tar.gz: 03248ded0ff0ba04e55345a94ec0ce82d3e4134b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 344b4923bf905546cd1242854220f0da1b4cafc0510286e14c1fecb33fac05d7056218a0cede84afd989a2a277d9b7537d5d06964ba14ee3b9b2b9ff793f0537
|
7
|
+
data.tar.gz: e81f1506e5286e47168e83e65e5c2e130c108fc66805c383da4266c891c8dd13de5b9bbea01099c7da7d1273d9173716f7cfa87c16b6bcc4c8d86da15a0294df
|
data/README.md
CHANGED
@@ -45,6 +45,9 @@ class PetsController < ActionController::Base
|
|
45
45
|
operation :get do
|
46
46
|
key :description, 'Returns a single pet if the user has access'
|
47
47
|
key :operationId, 'findPetById'
|
48
|
+
key :tags, [
|
49
|
+
'pet'
|
50
|
+
]
|
48
51
|
parameter do
|
49
52
|
key :name, :id
|
50
53
|
key :in, :path
|
@@ -75,6 +78,9 @@ class PetsController < ActionController::Base
|
|
75
78
|
'application/json',
|
76
79
|
'text/html',
|
77
80
|
]
|
81
|
+
key :tags, [
|
82
|
+
'pet'
|
83
|
+
]
|
78
84
|
parameter do
|
79
85
|
key :name, :tags
|
80
86
|
key :in, :query
|
@@ -116,6 +122,9 @@ class PetsController < ActionController::Base
|
|
116
122
|
key :produces, [
|
117
123
|
'application/json'
|
118
124
|
]
|
125
|
+
key :tags, [
|
126
|
+
'pet'
|
127
|
+
]
|
119
128
|
parameter do
|
120
129
|
key :name, :pet
|
121
130
|
key :in, :body
|
@@ -231,6 +240,14 @@ class ApidocsController < ActionController::Base
|
|
231
240
|
key :name, 'MIT'
|
232
241
|
end
|
233
242
|
end
|
243
|
+
tags do
|
244
|
+
key :name, 'pet'
|
245
|
+
key :description, 'Pets operations'
|
246
|
+
externalDocs do
|
247
|
+
key :description, 'Find more info here'
|
248
|
+
key :url, 'https://swagger.io'
|
249
|
+
end
|
250
|
+
end
|
234
251
|
key :host, 'petstore.swagger.wordnik.com'
|
235
252
|
key :basePath, '/api'
|
236
253
|
key :consumes, ['application/json']
|
@@ -261,6 +278,60 @@ That is the only line necessary to build the full [root Swagger object](https://
|
|
261
278
|
|
262
279
|
Now, simply point Swagger UI at `/apidocs` and everything should Just Work™. If you change any of the Swagger block definitions, you can simply refresh Swagger UI to see the changes.
|
263
280
|
|
281
|
+
#### Security handling
|
282
|
+
|
283
|
+
To support Swagger's definitions for API key auth or OAuth2, use `security_definition` in your `swagger_root`:
|
284
|
+
|
285
|
+
```Ruby
|
286
|
+
swagger_root do
|
287
|
+
key :swagger, '2.0'
|
288
|
+
|
289
|
+
# ...
|
290
|
+
|
291
|
+
security_definition :api_key do
|
292
|
+
key :type, :apiKey
|
293
|
+
key :name, :api_key
|
294
|
+
key :in, :header
|
295
|
+
end
|
296
|
+
security_definition :petstore_auth do
|
297
|
+
key :type, :oauth2
|
298
|
+
key :authorizationUrl, 'http://swagger.io/api/oauth/dialog'
|
299
|
+
key :flow, :implicit
|
300
|
+
scopes do
|
301
|
+
key 'write:pets', 'modify pets in your account'
|
302
|
+
key 'read:pets', 'read your pets'
|
303
|
+
end
|
304
|
+
end
|
305
|
+
end
|
306
|
+
```
|
307
|
+
|
308
|
+
You can then apply [security requirement objects](https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#securityRequirementObject) to the entire `swagger_root`, or to individual operations:
|
309
|
+
|
310
|
+
```Ruby
|
311
|
+
swagger_path '/pets/{id}' do
|
312
|
+
operation :get do
|
313
|
+
|
314
|
+
# ...
|
315
|
+
|
316
|
+
security do
|
317
|
+
key :api_key, []
|
318
|
+
end
|
319
|
+
security do
|
320
|
+
key :petstore_auth, ['write:pets', 'read:pets']
|
321
|
+
end
|
322
|
+
end
|
323
|
+
end
|
324
|
+
```
|
325
|
+
|
326
|
+
#### Writing JSON to a file
|
327
|
+
|
328
|
+
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:
|
329
|
+
|
330
|
+
```Ruby
|
331
|
+
swagger_data = Swagger::Blocks.build_root_json(SWAGGERED_CLASSES)
|
332
|
+
File.open('swagger.json', 'w') { |file| file.write(swagger_data.to_json) }
|
333
|
+
```
|
334
|
+
|
264
335
|
### Swagger 1.2 example (Rails)
|
265
336
|
|
266
337
|
See the [v1.2 docs](https://github.com/fotinakis/swagger-blocks/blob/master/README_v1_2.md).
|
data/README_v1_2.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Swagger 1.2 example (Rails)
|
2
2
|
|
3
|
+
**NOTE: this is old, you probably want to [use the latest syntax](https://github.com/fotinakis/swagger-blocks).**
|
4
|
+
|
3
5
|
This is a simplified example based on the objects in the Petstore [Swagger Sample App](http://petstore.swagger.wordnik.com/#!/pet). For a more complex and complete example, see the [swagger_blocks_spec.rb](https://github.com/fotinakis/swagger-blocks/blob/master/spec/lib/swagger_blocks_spec.rb) file.
|
4
6
|
|
5
7
|
Also note that Rails is not required, you can use Swagger::Blocks with any Ruby web framework.
|
data/lib/swagger/blocks.rb
CHANGED
@@ -400,6 +400,9 @@ module Swagger
|
|
400
400
|
# v1.2: http://goo.gl/PvwUXj#516-scope-object
|
401
401
|
class ScopeNode < Node; end
|
402
402
|
|
403
|
+
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#scopes-object
|
404
|
+
class ScopesNode < Node; end
|
405
|
+
|
403
406
|
# v1.2: http://goo.gl/PvwUXj#517-grant-types-object
|
404
407
|
class GrantTypesNode < Node
|
405
408
|
def implicit(&block)
|
@@ -551,9 +554,8 @@ module Swagger
|
|
551
554
|
class SecuritySchemeNode < Node
|
552
555
|
# TODO support ^x- Vendor Extensions
|
553
556
|
|
554
|
-
def
|
555
|
-
self.data[:scopes]
|
556
|
-
self.data[:scopes][name] = description
|
557
|
+
def scopes(&block)
|
558
|
+
self.data[:scopes] = Swagger::Blocks::ScopesNode.call(version: version, &block)
|
557
559
|
end
|
558
560
|
end
|
559
561
|
|
@@ -23,6 +23,22 @@
|
|
23
23
|
"produces": [
|
24
24
|
"application/json"
|
25
25
|
],
|
26
|
+
"securityDefinitions": {
|
27
|
+
"api_key": {
|
28
|
+
"type": "apiKey",
|
29
|
+
"name": "api_key",
|
30
|
+
"in": "header"
|
31
|
+
},
|
32
|
+
"petstore_auth": {
|
33
|
+
"type": "oauth2",
|
34
|
+
"authorizationUrl": "http://swagger.io/api/oauth/dialog",
|
35
|
+
"flow": "implicit",
|
36
|
+
"scopes": {
|
37
|
+
"write:pets": "modify pets in your account",
|
38
|
+
"read:pets": "read your pets"
|
39
|
+
}
|
40
|
+
}
|
41
|
+
},
|
26
42
|
"tags": [
|
27
43
|
{
|
28
44
|
"name": "pet",
|
@@ -149,7 +165,18 @@
|
|
149
165
|
"$ref": "#/definitions/ErrorModel"
|
150
166
|
}
|
151
167
|
}
|
152
|
-
}
|
168
|
+
},
|
169
|
+
"security": [
|
170
|
+
{
|
171
|
+
"api_key": []
|
172
|
+
},
|
173
|
+
{
|
174
|
+
"petstore_auth": [
|
175
|
+
"write:pets",
|
176
|
+
"read:pets"
|
177
|
+
]
|
178
|
+
}
|
179
|
+
]
|
153
180
|
},
|
154
181
|
"delete": {
|
155
182
|
"description": "deletes a single pet based on the ID supplied",
|
@@ -28,6 +28,20 @@ class PetControllerV2
|
|
28
28
|
key :schemes, ['http']
|
29
29
|
key :consumes, ['application/json']
|
30
30
|
key :produces, ['application/json']
|
31
|
+
security_definition :api_key do
|
32
|
+
key :type, :apiKey
|
33
|
+
key :name, :api_key
|
34
|
+
key :in, :header
|
35
|
+
end
|
36
|
+
security_definition :petstore_auth do
|
37
|
+
key :type, :oauth2
|
38
|
+
key :authorizationUrl, 'http://swagger.io/api/oauth/dialog'
|
39
|
+
key :flow, :implicit
|
40
|
+
scopes do
|
41
|
+
key 'write:pets', 'modify pets in your account'
|
42
|
+
key 'read:pets', 'read your pets'
|
43
|
+
end
|
44
|
+
end
|
31
45
|
tags do
|
32
46
|
key :name, 'pet'
|
33
47
|
key :description, 'Pets operations'
|
@@ -143,6 +157,12 @@ class PetControllerV2
|
|
143
157
|
key :'$ref', :ErrorModel
|
144
158
|
end
|
145
159
|
end
|
160
|
+
security do
|
161
|
+
key :api_key, []
|
162
|
+
end
|
163
|
+
security do
|
164
|
+
key :petstore_auth, ['write:pets', 'read:pets']
|
165
|
+
end
|
146
166
|
end
|
147
167
|
operation :delete do
|
148
168
|
key :description, 'deletes a single pet based on the ID supplied'
|
@@ -234,6 +254,9 @@ describe 'Swagger::Blocks v2' do
|
|
234
254
|
expect(actual['paths']).to be
|
235
255
|
expect(actual['paths']['/pets']).to be
|
236
256
|
expect(actual['paths']['/pets']).to eq(data['paths']['/pets'])
|
257
|
+
expect(actual['paths']['/pets/{id}']).to be
|
258
|
+
expect(actual['paths']['/pets/{id}']['get']).to be
|
259
|
+
expect(actual['paths']['/pets/{id}']['get']).to eq(data['paths']['/pets/{id}']['get'])
|
237
260
|
expect(actual['paths']).to eq(data['paths'])
|
238
261
|
expect(actual['definitions']).to eq(data['definitions'])
|
239
262
|
expect(actual).to eq(data)
|
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.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Fotinakis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|