Skip to content

Commit 3f309db

Browse files
Add consumes and produces options to add_swagger_documentation (#872)
Co-authored-by: peter scholz <[email protected]>
1 parent 10d165b commit 3f309db

File tree

4 files changed

+124
-2
lines changed

4 files changed

+124
-2
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#### Features
44

5+
* [#872](https://github.com/ruby-grape/grape-swagger/pull/872): Add `consumes` and `produces` options to `add_swagger_documentation` - [@spaceraccoon](https://github.com/spaceraccoon)
56
* Your contribution here.
67

78
#### Fixes

README.md

+20
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ end
206206
* [array_use_braces](#array_use_braces)
207207
* [api_documentation](#api_documentation)
208208
* [specific_api_documentation](#specific_api_documentation)
209+
* [consumes](#consumes)
210+
* [produces](#produces)
209211

210212
You can pass a hash with optional configuration settings to ```add_swagger_documentation```.
211213
The examples show the default value.
@@ -432,6 +434,24 @@ add_swagger_documentation \
432434
specific_api_documentation: { desc: 'Reticulated splines API swagger-compatible endpoint documentation.' }
433435
```
434436

437+
#### consumes
438+
439+
Customize the Swagger API default global `consumes` field value.
440+
441+
```ruby
442+
add_swagger_documentation \
443+
consumes: ['application/json', 'application/x-www-form-urlencoded']
444+
```
445+
446+
#### produces
447+
448+
Customize the Swagger API default global `produces` field value.
449+
450+
```ruby
451+
add_swagger_documentation \
452+
produces: ['text/plain']
453+
```
454+
435455
## Routes Configuration <a name="routes"></a>
436456

437457
* [Swagger Header Parameters](#headers)

lib/grape-swagger/endpoint.rb

+3-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ def swagger_object(target_class, request, options)
2727
object = {
2828
info: info_object(options[:info].merge(version: options[:doc_version])),
2929
swagger: '2.0',
30-
produces: content_types_for(target_class),
30+
produces: options[:produces] || content_types_for(target_class),
31+
consumes: options[:consumes],
3132
authorizations: options[:authorizations],
3233
securityDefinitions: options[:security_definitions],
3334
security: options[:security],
@@ -117,7 +118,7 @@ def method_object(route, options, path)
117118
method[:summary] = summary_object(route)
118119
method[:description] = description_object(route)
119120
method[:produces] = produces_object(route, options[:produces] || options[:format])
120-
method[:consumes] = consumes_object(route, options[:format])
121+
method[:consumes] = consumes_object(route, options[:consumes] || options[:format])
121122
method[:parameters] = params_object(route, options, path)
122123
method[:security] = security_object(route)
123124
method[:responses] = response_object(route, options)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper'
4+
5+
describe '#677 consumes and produces options are included in add_swagger_documentation options' do
6+
describe 'no override' do
7+
let(:app) do
8+
Class.new(Grape::API) do
9+
resource :accounts do
10+
route_param :account_number, type: String do
11+
resource :records do
12+
route_param :id do
13+
post do
14+
{ message: 'hello world' }
15+
end
16+
end
17+
end
18+
end
19+
end
20+
21+
add_swagger_documentation \
22+
format: :json
23+
end
24+
end
25+
26+
subject do
27+
get '/swagger_doc'
28+
JSON.parse(last_response.body)
29+
end
30+
31+
specify do
32+
expect(subject['paths']['/accounts/{account_number}/records/{id}']['post']['produces']).to eq ['application/json']
33+
expect(subject['paths']['/accounts/{account_number}/records/{id}']['post']['consumes']).to eq ['application/json']
34+
end
35+
end
36+
37+
describe 'override produces' do
38+
let(:app) do
39+
Class.new(Grape::API) do
40+
resource :accounts do
41+
route_param :account_number, type: String do
42+
resource :records do
43+
route_param :id do
44+
post do
45+
{ message: 'hello world' }
46+
end
47+
end
48+
end
49+
end
50+
end
51+
52+
add_swagger_documentation \
53+
format: :json,
54+
produces: ['text/plain']
55+
end
56+
end
57+
58+
subject do
59+
get '/swagger_doc'
60+
JSON.parse(last_response.body)
61+
end
62+
63+
specify do
64+
expect(subject['paths']['/accounts/{account_number}/records/{id}']['post']['produces']).to eq ['text/plain']
65+
expect(subject['paths']['/accounts/{account_number}/records/{id}']['post']['consumes']).to eq ['application/json']
66+
end
67+
end
68+
69+
describe 'override consumes' do
70+
let(:app) do
71+
Class.new(Grape::API) do
72+
resource :accounts do
73+
route_param :account_number, type: String do
74+
resource :records do
75+
route_param :id do
76+
post do
77+
{ message: 'hello world' }
78+
end
79+
end
80+
end
81+
end
82+
end
83+
84+
add_swagger_documentation \
85+
format: :json, \
86+
consumes: ['application/json', 'application/x-www-form-urlencoded']
87+
end
88+
end
89+
90+
subject do
91+
get '/swagger_doc'
92+
JSON.parse(last_response.body)
93+
end
94+
95+
specify do
96+
expect(subject['paths']['/accounts/{account_number}/records/{id}']['post']['produces']).to eq ['application/json']
97+
expect(subject['paths']['/accounts/{account_number}/records/{id}']['post']['consumes']).to eq ['application/json', 'application/x-www-form-urlencoded']
98+
end
99+
end
100+
end

0 commit comments

Comments
 (0)