grape-swagger 0.20.1 → 0.20.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +14 -0
- data/lib/grape-swagger/doc_methods.rb +1 -0
- data/lib/grape-swagger/doc_methods/headers.rb +18 -0
- data/lib/grape-swagger/doc_methods/parse_params.rb +1 -5
- data/lib/grape-swagger/endpoint.rb +5 -7
- data/lib/grape-swagger/version.rb +1 -1
- data/spec/swagger_v2/api_swagger_v2_headers_spec.rb +8 -4
- data/spec/swagger_v2/host.rb +43 -0
- data/spec/swagger_v2/param_type_spec.rb +1 -1
- data/spec/swagger_v2/simple_mounted_api_spec.rb +6 -6
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e7244ce5e2e54fd314fdf08bb3a948aa85c1981
|
4
|
+
data.tar.gz: c2647e5425cfd200375341daf3ee1f691709863b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebce21c42bb460babe20f85d0b4e020d111f5c992be70e4b58595cdd6e3efc9e0c7060eca217f32dba61d6e0c422ba9a3243f995cf41fae265076ab0e6298362
|
7
|
+
data.tar.gz: a6b0ac5ec95360f00a86eeff4107499caa33b2d55c70f243a5132e538945d68d46bae621dd58026a30254d8b005f4e291ca171b50a88bc28d7fe77661d406f59
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,10 @@
|
|
4
4
|
|
5
5
|
#### Fixes
|
6
6
|
|
7
|
+
* [#394](https://github.com/ruby-grape/grape-swagger/pull/394): removes overiding default trough example - [@LeFnord](https://github.com/LeFnord).
|
8
|
+
* [#393](https://github.com/ruby-grape/grape-swagger/pull/393): properly handle header parameters - [@wleeper](https://github.com/wleeper).
|
9
|
+
* [#389](https://github.com/ruby-grape/grape-swagger/pull/389): respect X-Forwarded-Host - [@edvakf](https://github.com/edvakf).
|
10
|
+
|
7
11
|
### 0.20.1 / 2016-04-17
|
8
12
|
|
9
13
|
#### Features
|
data/README.md
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
|
8
8
|
* [What is grape-swagger?](#what)
|
9
9
|
* [Related Projects](#related)
|
10
|
+
* [Compatibility](#version)
|
10
11
|
* [Swagger-Spec](#swagger-spec)
|
11
12
|
* [Installation](#install)
|
12
13
|
* [Usage](#usage)
|
@@ -31,9 +32,22 @@ These screenshot is based on the [Hussars](https://github.com/LeFnord/hussars) s
|
|
31
32
|
## Related Projects
|
32
33
|
|
33
34
|
* [Grape](https://github.com/ruby-grape/grape)
|
35
|
+
* [Grape Entity](https://github.com/ruby-grape/grape-entity)
|
34
36
|
* [Swagger UI](https://github.com/wordnik/swagger-ui)
|
35
37
|
|
36
38
|
|
39
|
+
<a name="version" />
|
40
|
+
## Compatibility
|
41
|
+
|
42
|
+
The following versions of grape, grape-entity and grape-swagger can currently be used together.
|
43
|
+
|
44
|
+
grape-swagger | grape | grape-entity
|
45
|
+
--------------|-------------------------|-------------
|
46
|
+
0.10.5 | >= 0.10.0 ... <= 0.14.0 | < 0.5.0
|
47
|
+
0.11.0 | >= 0.16.2 | < 0.5.0
|
48
|
+
0.20.1 | >= 0.12.0 ... <= 0.14.0 | <= 0.5.1
|
49
|
+
|
50
|
+
|
37
51
|
<a name="swagger-spec" />
|
38
52
|
## Swagger-Spec
|
39
53
|
|
@@ -9,6 +9,7 @@ require 'grape-swagger/doc_methods/path_string'
|
|
9
9
|
require 'grape-swagger/doc_methods/tag_name_description'
|
10
10
|
require 'grape-swagger/doc_methods/parse_params'
|
11
11
|
require 'grape-swagger/doc_methods/move_params'
|
12
|
+
require 'grape-swagger/doc_methods/headers'
|
12
13
|
|
13
14
|
module GrapeSwagger
|
14
15
|
module DocMethods
|
@@ -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
|
@@ -43,11 +43,7 @@ module GrapeSwagger
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def document_default_value(settings)
|
46
|
-
|
47
|
-
example = settings[:example] || nil
|
48
|
-
|
49
|
-
@parsed_param[:default] = example if example
|
50
|
-
@parsed_param[:default] = default_value if default_value && example.blank?
|
46
|
+
@parsed_param[:default] = settings[:default] if settings[:default].present?
|
51
47
|
end
|
52
48
|
|
53
49
|
def document_type_and_format(data_type)
|
@@ -24,7 +24,7 @@ module Grape
|
|
24
24
|
swagger: '2.0',
|
25
25
|
produces: content_types_for(target_class),
|
26
26
|
authorizations: options[:authorizations],
|
27
|
-
host: GrapeSwagger::DocMethods::OptionalObject.build(:host, options, request.
|
27
|
+
host: GrapeSwagger::DocMethods::OptionalObject.build(:host, options, request.host_with_port),
|
28
28
|
basePath: GrapeSwagger::DocMethods::OptionalObject.build(:base_path, options, request.env['SCRIPT_NAME']),
|
29
29
|
tags: GrapeSwagger::DocMethods::TagNameDescription.build(options),
|
30
30
|
schemes: options[:schemes].is_a?(String) ? [options[:schemes]] : options[:schemes]
|
@@ -105,7 +105,6 @@ module Grape
|
|
105
105
|
def method_object(route, options, path)
|
106
106
|
method = {}
|
107
107
|
method[:description] = description_object(route, options[:markdown])
|
108
|
-
method[:headers] = route.route_headers if route.route_headers
|
109
108
|
method[:produces] = produces_object(route, options[:produces] || options[:format])
|
110
109
|
method[:consumes] = consumes_object(route, options[:format])
|
111
110
|
method[:parameters] = params_object(route)
|
@@ -194,14 +193,13 @@ module Grape
|
|
194
193
|
def partition_params(route)
|
195
194
|
declared_params = route.route_settings[:declared_params] if route.route_settings[:declared_params].present?
|
196
195
|
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?
|
198
197
|
default_type(required)
|
199
198
|
default_type(exposed)
|
200
199
|
|
201
|
-
unless declared_params.nil?
|
200
|
+
unless declared_params.nil? && route.route_headers.nil?
|
202
201
|
request_params = parse_request_params(required)
|
203
202
|
end
|
204
|
-
|
205
203
|
if !exposed.empty?
|
206
204
|
exposed_params = exposed.each_with_object({}) { |x, memo| memo[x.first] = x.last }
|
207
205
|
properties = parse_response_params(exposed_params)
|
@@ -215,8 +213,7 @@ module Grape
|
|
215
213
|
@definitions[key] = { type: 'object', properties: properties } unless @definitions.key?(key)
|
216
214
|
@definitions[key][:properties].merge!(properties) if @definitions.key?(key)
|
217
215
|
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?
|
220
217
|
request_params || {}
|
221
218
|
end
|
222
219
|
|
@@ -244,6 +241,7 @@ module Grape
|
|
244
241
|
return if params.nil?
|
245
242
|
|
246
243
|
params.each_with_object({}) do |x, memo|
|
244
|
+
next if x[1].fetch(:documentation, {}).fetch(:in, nil).to_s == 'header'
|
247
245
|
x[0] = x.last[:as] if x.last[:as]
|
248
246
|
|
249
247
|
model = x.last[:using] if x.last[:using].present?
|
@@ -36,9 +36,13 @@ describe 'headers' do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
specify do
|
39
|
-
expect(subject['paths']['/use_headers']['get']).to
|
40
|
-
|
41
|
-
|
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
|
+
])
|
43
47
|
end
|
44
48
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'host in the swagger_doc' do
|
4
|
+
include_context "the api entities"
|
5
|
+
|
6
|
+
before :all do
|
7
|
+
module TheApi
|
8
|
+
class EmptyApi < Grape::API
|
9
|
+
format :json
|
10
|
+
|
11
|
+
add_swagger_documentation
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def app
|
17
|
+
TheApi::EmptyApi
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'host should include port' do
|
21
|
+
subject do
|
22
|
+
get 'http://example.com:8080/swagger_doc'
|
23
|
+
JSON.parse(last_response.body)
|
24
|
+
end
|
25
|
+
|
26
|
+
specify do
|
27
|
+
expect(subject['host']).to eq 'example.com:8080'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'respect X-Forwarded-Host over Host header' do
|
32
|
+
subject do
|
33
|
+
header 'Host', 'dummy.example.com'
|
34
|
+
header 'X-Forwarded-Host', 'real.example.com'
|
35
|
+
get '/swagger_doc'
|
36
|
+
JSON.parse(last_response.body)
|
37
|
+
end
|
38
|
+
|
39
|
+
specify do
|
40
|
+
expect(subject['host']).to eq 'real.example.com'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -97,10 +97,10 @@ describe 'a simple mounted api' do
|
|
97
97
|
"/simple_with_headers"=>{
|
98
98
|
"get"=>{
|
99
99
|
"description"=>"this gets something else",
|
100
|
-
"headers"=>{
|
101
|
-
"XAuthToken"=>{"description"=>"A required header.", "required"=>true},
|
102
|
-
"XOtherHeader"=>{"description"=>"An optional header.", "required"=>false}},
|
103
100
|
"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}],
|
104
104
|
"tags"=>["simple_with_headers"],
|
105
105
|
"operationId"=>"getSimpleWithHeaders",
|
106
106
|
"responses"=>{
|
@@ -203,10 +203,10 @@ describe 'a simple mounted api' do
|
|
203
203
|
"/simple_with_headers"=>{
|
204
204
|
"get"=>{
|
205
205
|
"description"=>"this gets something else",
|
206
|
-
"headers"=>{
|
207
|
-
"XAuthToken"=>{"description"=>"A required header.", "required"=>true},
|
208
|
-
"XOtherHeader"=>{"description"=>"An optional header.", "required"=>false}},
|
209
206
|
"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}],
|
210
210
|
"tags"=>["simple_with_headers"],
|
211
211
|
"operationId"=>"getSimpleWithHeaders",
|
212
212
|
"responses"=>{
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-swagger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.20.
|
4
|
+
version: 0.20.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Vandecasteele
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grape
|
@@ -273,6 +273,7 @@ files:
|
|
273
273
|
- lib/grape-swagger/doc_methods.rb
|
274
274
|
- lib/grape-swagger/doc_methods/data_type.rb
|
275
275
|
- lib/grape-swagger/doc_methods/extensions.rb
|
276
|
+
- lib/grape-swagger/doc_methods/headers.rb
|
276
277
|
- lib/grape-swagger/doc_methods/move_params.rb
|
277
278
|
- lib/grape-swagger/doc_methods/operation_id.rb
|
278
279
|
- lib/grape-swagger/doc_methods/optional_object.rb
|
@@ -325,6 +326,7 @@ files:
|
|
325
326
|
- spec/swagger_v2/form_params_spec.rb
|
326
327
|
- spec/swagger_v2/grape-swagger_spec.rb
|
327
328
|
- spec/swagger_v2/hide_api_spec.rb
|
329
|
+
- spec/swagger_v2/host.rb
|
328
330
|
- spec/swagger_v2/mounted_target_class_spec.rb
|
329
331
|
- spec/swagger_v2/namespace_tags_prefix_spec.rb
|
330
332
|
- spec/swagger_v2/namespace_tags_spec.rb
|
@@ -403,6 +405,7 @@ test_files:
|
|
403
405
|
- spec/swagger_v2/form_params_spec.rb
|
404
406
|
- spec/swagger_v2/grape-swagger_spec.rb
|
405
407
|
- spec/swagger_v2/hide_api_spec.rb
|
408
|
+
- spec/swagger_v2/host.rb
|
406
409
|
- spec/swagger_v2/mounted_target_class_spec.rb
|
407
410
|
- spec/swagger_v2/namespace_tags_prefix_spec.rb
|
408
411
|
- spec/swagger_v2/namespace_tags_spec.rb
|