Skip to content

Commit 5c7df40

Browse files
author
Bill Leeper
committed
Added feature to report header params in params block
1 parent 3453ead commit 5c7df40

File tree

6 files changed

+38
-17
lines changed

6 files changed

+38
-17
lines changed

lib/grape-swagger/doc_methods.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
require 'grape-swagger/doc_methods/tag_name_description'
1010
require 'grape-swagger/doc_methods/parse_params'
1111
require 'grape-swagger/doc_methods/move_params'
12+
require 'grape-swagger/doc_methods/headers'
1213

1314
module GrapeSwagger
1415
module DocMethods
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module GrapeSwagger
2+
module DocMethods
3+
class Headers
4+
class << self
5+
def parse(route)
6+
route.route_headers.to_a.map do |route_header|
7+
route_header.tap do |header|
8+
hash = header[1]
9+
description = hash.delete('description')
10+
hash[:documentation] = { desc: description, in: 'header' }
11+
hash[:type] = hash['type'].titleize if hash['type']
12+
end
13+
end
14+
end
15+
end
16+
end
17+
end
18+
end

lib/grape-swagger/endpoint.rb

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ def path_item(routes, options)
105105
def method_object(route, options, path)
106106
method = {}
107107
method[:description] = description_object(route, options[:markdown])
108-
method[:headers] = route.route_headers if route.route_headers
109108
method[:produces] = produces_object(route, options[:produces] || options[:format])
110109
method[:consumes] = consumes_object(route, options[:format])
111110
method[:parameters] = params_object(route)
@@ -194,14 +193,13 @@ def tag_object(route, version)
194193
def partition_params(route)
195194
declared_params = route.route_settings[:declared_params] if route.route_settings[:declared_params].present?
196195
required, exposed = route.route_params.partition { |x| x.first.is_a? String }
197-
196+
required.concat GrapeSwagger::DocMethods::Headers.parse(route) unless route.route_headers.nil?
198197
default_type(required)
199198
default_type(exposed)
200199

201-
unless declared_params.nil?
200+
unless declared_params.nil? && route.route_headers.nil?
202201
request_params = parse_request_params(required)
203202
end
204-
205203
if !exposed.empty?
206204
exposed_params = exposed.each_with_object({}) { |x, memo| memo[x.first] = x.last }
207205
properties = parse_response_params(exposed_params)
@@ -215,8 +213,7 @@ def partition_params(route)
215213
@definitions[key] = { type: 'object', properties: properties } unless @definitions.key?(key)
216214
@definitions[key][:properties].merge!(properties) if @definitions.key?(key)
217215
end
218-
219-
return route.route_params if route.route_params && !route.route_settings[:declared_params].present?
216+
return route.route_params if route.route_params.present? && !route.route_settings[:declared_params].present?
220217
request_params || {}
221218
end
222219

@@ -244,6 +241,7 @@ def parse_response_params(params)
244241
return if params.nil?
245242

246243
params.each_with_object({}) do |x, memo|
244+
next if x[1].fetch(:documentation, {}).fetch(:in, nil).to_s == 'header'
247245
x[0] = x.last[:as] if x.last[:as]
248246

249247
model = x.last[:using] if x.last[:using].present?

spec/swagger_v2/api_swagger_v2_headers_spec.rb

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,13 @@ def app
3636
end
3737

3838
specify do
39-
expect(subject['paths']['/use_headers']['get']).to include('headers')
40-
expect(subject['paths']['/use_headers']['get']['headers']).to eql({
41-
"X-Rate-Limit-Limit"=>{"description"=>"The number of allowed requests in the current period", "type"=>"integer"}
42-
})
39+
expect(subject['paths']['/use_headers']['get']['parameters']).to eql([
40+
{"in"=>"header",
41+
"name"=>"X-Rate-Limit-Limit",
42+
"description"=>"The number of allowed requests in the current period",
43+
"type"=>"integer",
44+
"format" => "int32",
45+
"required"=>false},
46+
])
4347
end
4448
end

spec/swagger_v2/param_type_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def app
5050

5151
it 'has consistent types' do
5252
types = subject.map { |param| param['type'] }
53-
expect(types).to eq(%w(string))
53+
expect(types).to eq(%w(string string))
5454
end
5555
end
5656
end

spec/swagger_v2/simple_mounted_api_spec.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,10 @@ def app
9797
"/simple_with_headers"=>{
9898
"get"=>{
9999
"description"=>"this gets something else",
100-
"headers"=>{
101-
"XAuthToken"=>{"description"=>"A required header.", "required"=>true},
102-
"XOtherHeader"=>{"description"=>"An optional header.", "required"=>false}},
103100
"produces"=>["application/json"],
101+
"parameters"=>[
102+
{"in"=>"header", "name"=>"XAuthToken", "description"=>"A required header.", "type"=>"string", "required"=>true},
103+
{"in"=>"header", "name"=>"XOtherHeader", "description"=>"An optional header.", "type"=>"string", "required"=>false}],
104104
"tags"=>["simple_with_headers"],
105105
"operationId"=>"getSimpleWithHeaders",
106106
"responses"=>{
@@ -203,10 +203,10 @@ def app
203203
"/simple_with_headers"=>{
204204
"get"=>{
205205
"description"=>"this gets something else",
206-
"headers"=>{
207-
"XAuthToken"=>{"description"=>"A required header.", "required"=>true},
208-
"XOtherHeader"=>{"description"=>"An optional header.", "required"=>false}},
209206
"produces"=>["application/json"],
207+
"parameters"=>[
208+
{"in"=>"header", "name"=>"XAuthToken", "description"=>"A required header.", "type"=>"string", "required"=>true},
209+
{"in"=>"header", "name"=>"XOtherHeader", "description"=>"An optional header.", "type"=>"string", "required"=>false}],
210210
"tags"=>["simple_with_headers"],
211211
"operationId"=>"getSimpleWithHeaders",
212212
"responses"=>{

0 commit comments

Comments
 (0)