Skip to content

Commit 93e7684

Browse files
author
Chris Drane
committed
Revise README to leave in open_api example spec
Put back open_api example spec in same place but labelled it clearly as being open_api specific. Moved generic example of spec up in document.
1 parent e70edb3 commit 93e7684

File tree

1 file changed

+98
-7
lines changed

1 file changed

+98
-7
lines changed

README.md

Lines changed: 98 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,94 @@ For both raddocs and apitome, start rails server. Then
8585

8686
See the `example` folder for a sample Rails app that has been documented. The sample app demonstrates the :open_api format.
8787

88+
## Example of spec file
89+
90+
```ruby
91+
# spec/acceptance/orders_spec.rb
92+
require 'rails_helper'
93+
require 'rspec_api_documentation/dsl'
94+
resource 'Orders' do
95+
explanation "Orders resource"
96+
97+
header "Content-Type", "application/json"
98+
99+
get '/orders' do
100+
# This is manual way to describe complex parameters
101+
parameter :one_level_array, type: :array, items: {type: :string, enum: ['string1', 'string2']}, default: ['string1']
102+
parameter :two_level_array, type: :array, items: {type: :array, items: {type: :string}}
103+
104+
let(:one_level_array) { ['string1', 'string2'] }
105+
let(:two_level_array) { [['123', '234'], ['111']] }
106+
107+
# This is automatic way
108+
# It's possible because we extract parameters definitions from the values
109+
parameter :one_level_arr, with_example: true
110+
parameter :two_level_arr, with_example: true
111+
112+
let(:one_level_arr) { ['value1', 'value2'] }
113+
let(:two_level_arr) { [[5.1, 3.0], [1.0, 4.5]] }
114+
115+
context '200' do
116+
example_request 'Getting a list of orders' do
117+
expect(status).to eq(200)
118+
end
119+
end
120+
end
121+
122+
put '/orders/:id' do
123+
124+
with_options scope: :data, with_example: true do
125+
parameter :name, 'The order name', required: true
126+
parameter :amount
127+
parameter :description, 'The order description'
128+
end
129+
130+
context "200" do
131+
let(:id) { 1 }
132+
133+
example 'Update an order' do
134+
request = {
135+
data: {
136+
name: 'order',
137+
amount: 1,
138+
description: 'fast order'
139+
}
140+
}
141+
142+
# It's also possible to extract types of parameters when you pass data through `do_request` method.
143+
do_request(request)
144+
145+
expected_response = {
146+
data: {
147+
name: 'order',
148+
amount: 1,
149+
description: 'fast order'
150+
}
151+
}
152+
expect(status).to eq(200)
153+
expect(response_body).to eq(expected_response)
154+
end
155+
end
156+
157+
context "400" do
158+
let(:id) { "a" }
159+
160+
example_request 'Invalid request' do
161+
expect(status).to eq(400)
162+
end
163+
end
164+
165+
context "404" do
166+
let(:id) { 0 }
167+
168+
example_request 'Order is not found' do
169+
expect(status).to eq(404)
170+
end
171+
end
172+
end
173+
end
174+
```
175+
88176

89177
## Configuration options
90178
```ruby
@@ -319,19 +407,20 @@ paths:
319407
description: This description came from configuration file
320408
hide: true
321409
```
322-
323-
## Example of acceptance spec file
324-
410+
#### Example of spec file with :open_api format
325411
```ruby
326-
# spec/acceptance/orders_spec.rb
327-
require 'rails_helper'
328-
require 'rspec_api_documentation/dsl'
329412
resource 'Orders' do
330413
explanation "Orders resource"
331414

415+
authentication :apiKey, :api_key, description: 'Private key for API access', name: 'HEADER_KEY'
332416
header "Content-Type", "application/json"
417+
418+
let(:api_key) { generate_api_key }
333419

334420
get '/orders' do
421+
route_summary "This URL allows users to interact with all orders."
422+
route_description "Long description."
423+
335424
# This is manual way to describe complex parameters
336425
parameter :one_level_array, type: :array, items: {type: :string, enum: ['string1', 'string2']}, default: ['string1']
337426
parameter :two_level_array, type: :array, items: {type: :array, items: {type: :string}}
@@ -350,11 +439,13 @@ paths:
350439
context '200' do
351440
example_request 'Getting a list of orders' do
352441
expect(status).to eq(200)
442+
expect(response_body).to eq(<response>)
353443
end
354444
end
355445
end
356446

357447
put '/orders/:id' do
448+
route_summary "This is used to update orders."
358449

359450
with_options scope: :data, with_example: true do
360451
parameter :name, 'The order name', required: true
@@ -385,7 +476,7 @@ paths:
385476
}
386477
}
387478
expect(status).to eq(200)
388-
expect(response_body).to eq(expected_response)
479+
expect(response_body).to eq(<response>)
389480
end
390481
end
391482

0 commit comments

Comments
 (0)