rspec-rails-swagger 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +183 -0
- data/lib/rspec/rails/swagger/helpers.rb +13 -3
- data/lib/rspec/rails/swagger/version.rb +1 -1
- 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: ca8afd22d7d94c39871ce1136dfcc65f726df7fa
|
4
|
+
data.tar.gz: 8f42d67783da7d18d2bb6bd93ed4e86d19a6d636
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eddec5fcd5449d1cd397cf6684e89f47769fafde43d66d455ca7f46e03ac51306a2b648fe3465c97583957818244a55ee77802d3b2285fa3aeb4c6fa9b847f9e
|
7
|
+
data.tar.gz: 483a7470fa969fe6dfcfc48f08231309b63e46eb6b1da5e075b236d95e14841349527b94fe3df38ac8af14c1fa94c35984861f0a6681c0438dd24e7403441317
|
data/README.md
CHANGED
@@ -63,3 +63,186 @@ bundle exec rake swagger
|
|
63
63
|
Now you can use Swagger UI or the renderer of your choice to display the
|
64
64
|
formatted documentation. [swagger_engine](https://github.com/batdevis/swagger_engine)
|
65
65
|
works pretty well and supports multiple documents.
|
66
|
+
|
67
|
+
## RSpec DSL
|
68
|
+
|
69
|
+
The DSL follows the hierachy of the Swagger Schema:
|
70
|
+
|
71
|
+
- [Paths Object](http://swagger.io/specification/#paths-object-29)
|
72
|
+
- [Path Item Object](http://swagger.io/specification/#path-item-object-32)
|
73
|
+
- [Parameter Object](http://swagger.io/specification/#parameter-object-44)s (Optional)
|
74
|
+
- [Operation Object](http://swagger.io/specification/#operation-object-36)
|
75
|
+
- [Parameter Object](http://swagger.io/specification/#parameter-object-44)s (Optional)
|
76
|
+
- [Responses Object](http://swagger.io/specification/#responses-object-54)
|
77
|
+
- [Response Object](http://swagger.io/specification/#response-object-58)
|
78
|
+
- [Example Object](http://swagger.io/specification/#example-object-65)s (Optional)
|
79
|
+
|
80
|
+
Here's an example of a spec with comments to for the corresponding objects:
|
81
|
+
|
82
|
+
```rb
|
83
|
+
require 'swagger_helper'
|
84
|
+
|
85
|
+
# Paths Object
|
86
|
+
RSpec.describe "Posts Controller", type: :request do
|
87
|
+
before { Post.new.save }
|
88
|
+
|
89
|
+
# Path Item Object
|
90
|
+
path '/posts' do
|
91
|
+
# Operation Object
|
92
|
+
operation "GET", summary: "fetch list" do
|
93
|
+
# Response Object
|
94
|
+
response 200, description: "successful"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# Path Object
|
99
|
+
path '/posts/{post_id}' do
|
100
|
+
# Parameter Object
|
101
|
+
parameter "post_id", {in: :path, type: :integer}
|
102
|
+
let(:post_id) { 1 }
|
103
|
+
|
104
|
+
# Operation Object
|
105
|
+
get summary: "fetch item" do
|
106
|
+
# Response Object
|
107
|
+
response 200, description: "success"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
```
|
111
|
+
|
112
|
+
|
113
|
+
### Paths Object
|
114
|
+
These methods are available inside of an RSpec contexts with the `type: :request` tag.
|
115
|
+
|
116
|
+
#### `path(template, attributes = {}, &block)`
|
117
|
+
Defines a new Path Item.
|
118
|
+
|
119
|
+
### Path Item Object
|
120
|
+
These methods are available inside of blocks passed to the `path` method.
|
121
|
+
|
122
|
+
#### `operation(method, attributes = {}, &block)`
|
123
|
+
Defines a new Operation Object. The `method` is case insensitive.
|
124
|
+
|
125
|
+
#### `delete(attributes = {}, &block)`
|
126
|
+
Alias for `operation(:delete, attributes, block)`.
|
127
|
+
|
128
|
+
#### `get(attributes = {}, &block)`
|
129
|
+
Alias for `operation(:get, attributes, block)`.
|
130
|
+
|
131
|
+
#### `head(attributes = {}, &block)`
|
132
|
+
Alias for `operation(:head, attributes, block)`.
|
133
|
+
|
134
|
+
#### `options(attributes = {}, &block)`
|
135
|
+
Alias for `operation(:options, attributes, block)`.
|
136
|
+
|
137
|
+
#### `patch(attributes = {}, &block)`
|
138
|
+
Alias for `operation(:patch, attributes, block)`.
|
139
|
+
|
140
|
+
#### `post(attributes = {}, &block)`
|
141
|
+
Alias for `operation(:post, attributes, block)`.
|
142
|
+
|
143
|
+
#### `put(attributes = {}, &block)`
|
144
|
+
Alias for `operation(:put, attributes, block)`.
|
145
|
+
|
146
|
+
|
147
|
+
### Parameters
|
148
|
+
These methods are available inside of blocks passed to the `path` or `operation` method.
|
149
|
+
|
150
|
+
#### `parameter(name, attributes = {})`
|
151
|
+
Defines a new Parameter Object. You can define the parameter inline:
|
152
|
+
```rb
|
153
|
+
parameter :callback_url, in: :query, type: :string, required: true
|
154
|
+
```
|
155
|
+
|
156
|
+
Or, via reference:
|
157
|
+
```rb
|
158
|
+
parameter ref: "#/parameters/site_id"
|
159
|
+
```
|
160
|
+
|
161
|
+
Values for the parameters are set using `let`:
|
162
|
+
```rb
|
163
|
+
post summary: "create" do
|
164
|
+
parameter "body", in: :body, schema: { foo: :bar}
|
165
|
+
let(:body) { { post: { title: 'asdf', body: "blah" } } }
|
166
|
+
# ...
|
167
|
+
end
|
168
|
+
```
|
169
|
+
|
170
|
+
|
171
|
+
### Operation Object
|
172
|
+
These methods are available inside of blocks passed to the `operation` method.
|
173
|
+
|
174
|
+
#### `consumes(*mime_types)`
|
175
|
+
Use this to add MIME types that are specific to the operation. They will be merged
|
176
|
+
with the Swagger Object's consumes field.
|
177
|
+
```rb
|
178
|
+
consumes 'application/json', 'application/xml'
|
179
|
+
```
|
180
|
+
|
181
|
+
#### `produces(*mime_types)`
|
182
|
+
Use this to add MIME types that are specific to the operation. They will be merged
|
183
|
+
with the Swagger Object's consumes field.
|
184
|
+
```rb
|
185
|
+
produces 'application/json', 'application/xml'
|
186
|
+
```
|
187
|
+
|
188
|
+
#### `response(status_code, attributes = {}, &block)`
|
189
|
+
Defines a new Response Object. `status_code` must be between 1 and 599. `attributes`
|
190
|
+
must include a `description`.
|
191
|
+
|
192
|
+
#### `tags(*tags)`
|
193
|
+
Adds operation specific tags.
|
194
|
+
```rb
|
195
|
+
tags :accounts, :pets
|
196
|
+
```
|
197
|
+
|
198
|
+
You can also provide tags through the RSpec context block and/or `path` method:
|
199
|
+
```rb
|
200
|
+
RSpec.describe "Sample Requests", type: :request, tags: [:context_tag] do
|
201
|
+
path '/posts', tags: ['path_tag'] do
|
202
|
+
operation "GET", summary: "fetch list" do
|
203
|
+
produces 'application/json'
|
204
|
+
tags 'operation_tag'
|
205
|
+
|
206
|
+
response(200, {description: "successful"})
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
```
|
211
|
+
These tags will be merged with those of the operation. The `GET /posts` operation
|
212
|
+
in this example will be tagged with `["context_tag", "path_tag", "operation_tag"]`.
|
213
|
+
|
214
|
+
|
215
|
+
### Response Object
|
216
|
+
These methods are available inside of blocks passed to the `response` method.
|
217
|
+
|
218
|
+
#### `capture_example()`
|
219
|
+
This method will capture the response body from the test and create an Example
|
220
|
+
Object for the Response.
|
221
|
+
|
222
|
+
You could also set this in an RSpec context block if you'd like examples for
|
223
|
+
multiple operations or paths:
|
224
|
+
```rb
|
225
|
+
describe 'Connections', type: :request, capture_examples: true do
|
226
|
+
# Any requests in this block will capture example responses
|
227
|
+
end
|
228
|
+
```
|
229
|
+
|
230
|
+
#### `schema(definition)`
|
231
|
+
Sets the schema field for the Response Object. You can define it inline:
|
232
|
+
```rb
|
233
|
+
schema(
|
234
|
+
type: :array,
|
235
|
+
items: {
|
236
|
+
type: :object,
|
237
|
+
properties: {
|
238
|
+
id: { type: :string },
|
239
|
+
name: { type: :string },
|
240
|
+
},
|
241
|
+
}
|
242
|
+
)
|
243
|
+
```
|
244
|
+
|
245
|
+
Or, by reference:
|
246
|
+
```rb
|
247
|
+
schema ref: '#/definitions/Account'
|
248
|
+
```
|
@@ -42,13 +42,16 @@ module RSpec
|
|
42
42
|
attributes.symbolize_keys!
|
43
43
|
|
44
44
|
raise ArgumentError, "Path must start with a /" unless template.starts_with?('/')
|
45
|
-
|
46
45
|
#TODO template might be a $ref
|
47
46
|
meta = {
|
48
47
|
swagger_object: :path_item,
|
49
48
|
swagger_document: attributes[:swagger_document] || RSpec.configuration.swagger_docs.keys.first,
|
50
|
-
swagger_path_item: {path: template}
|
49
|
+
swagger_path_item: {path: template},
|
51
50
|
}
|
51
|
+
# Merge tags passed into the path with those from parent contexts.
|
52
|
+
if attributes[:tags]
|
53
|
+
meta[:tags] = (metadata.try(:[], :tags) || []) + attributes[:tags]
|
54
|
+
end
|
52
55
|
describe(template, meta, &block)
|
53
56
|
end
|
54
57
|
end
|
@@ -58,6 +61,12 @@ module RSpec
|
|
58
61
|
|
59
62
|
def operation method, attributes = {}, &block
|
60
63
|
attributes.symbolize_keys!
|
64
|
+
# Include tags from parent contexts so you can tag all the paths
|
65
|
+
# in a controller at once.
|
66
|
+
if metadata.try(:[], :tags).present?
|
67
|
+
attributes[:tags] ||= []
|
68
|
+
attributes[:tags] += metadata[:tags]
|
69
|
+
end
|
61
70
|
|
62
71
|
method = method.to_s.downcase
|
63
72
|
validate_method! method
|
@@ -175,7 +184,8 @@ module RSpec
|
|
175
184
|
end
|
176
185
|
|
177
186
|
def tags *tags
|
178
|
-
metadata[:swagger_operation][:tags]
|
187
|
+
metadata[:swagger_operation][:tags] ||= []
|
188
|
+
metadata[:swagger_operation][:tags] += tags
|
179
189
|
end
|
180
190
|
|
181
191
|
def response status_code, attributes = {}, &block
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-rails-swagger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- andrew morton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|