grape-swagger 0.20.2 → 0.20.3
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/.rubocop.yml +0 -3
- data/.rubocop_todo.yml +43 -33
- data/.travis.yml +22 -13
- data/CHANGELOG.md +29 -53
- data/Gemfile +1 -1
- data/README.md +24 -24
- data/example/api/endpoints.rb +28 -29
- data/example/api/entities.rb +1 -1
- data/example/config.ru +5 -7
- data/grape-swagger.gemspec +1 -1
- data/lib/grape-swagger.rb +9 -6
- data/lib/grape-swagger/doc_methods.rb +1 -1
- data/lib/grape-swagger/doc_methods/extensions.rb +3 -3
- data/lib/grape-swagger/doc_methods/headers.rb +1 -1
- data/lib/grape-swagger/doc_methods/move_params.rb +25 -16
- data/lib/grape-swagger/doc_methods/operation_id.rb +2 -2
- data/lib/grape-swagger/doc_methods/parse_params.rb +12 -5
- data/lib/grape-swagger/doc_methods/path_string.rb +1 -1
- data/lib/grape-swagger/doc_methods/status_codes.rb +3 -1
- data/lib/grape-swagger/doc_methods/tag_name_description.rb +1 -1
- data/lib/grape-swagger/endpoint.rb +33 -46
- data/lib/grape-swagger/grape/route.rb +16 -0
- data/lib/grape-swagger/version.rb +1 -1
- data/spec/issues/403_versions_spec.rb +158 -0
- data/spec/lib/data_type_spec.rb +9 -10
- data/spec/lib/endpoint_spec.rb +1 -2
- data/spec/lib/extensions_spec.rb +44 -40
- data/spec/lib/move_params_spec.rb +113 -93
- data/spec/lib/operation_id_spec.rb +42 -12
- data/spec/lib/optional_object_spec.rb +3 -4
- data/spec/lib/path_string_spec.rb +2 -2
- data/spec/lib/produces_consumes_spec.rb +64 -53
- data/spec/markdown/redcarpet_adapter_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/support/api_swagger_v2_result.rb +122 -128
- data/spec/support/namespace_tags.rb +17 -19
- data/spec/support/the_api_entities.rb +1 -3
- data/spec/support/the_paths_definitions.rb +95 -85
- data/spec/swagger_v2/api_swagger_v2_definitions-models_spec.rb +1 -1
- data/spec/swagger_v2/api_swagger_v2_detail_spec.rb +19 -19
- data/spec/swagger_v2/api_swagger_v2_extensions_spec.rb +21 -21
- data/spec/swagger_v2/api_swagger_v2_format-content_type_spec.rb +34 -32
- data/spec/swagger_v2/api_swagger_v2_global_configuration_spec.rb +5 -7
- data/spec/swagger_v2/api_swagger_v2_headers_spec.rb +19 -18
- data/spec/swagger_v2/api_swagger_v2_hide_documentation_path_spec.rb +9 -10
- data/spec/swagger_v2/api_swagger_v2_mounted_spec.rb +21 -24
- data/spec/swagger_v2/api_swagger_v2_param_type_body_nested_spec.rb +90 -92
- data/spec/swagger_v2/api_swagger_v2_param_type_body_spec.rb +54 -54
- data/spec/swagger_v2/api_swagger_v2_param_type_spec.rb +65 -57
- data/spec/swagger_v2/api_swagger_v2_request_params_fix_spec.rb +17 -14
- data/spec/swagger_v2/api_swagger_v2_response_spec.rb +79 -123
- data/spec/swagger_v2/api_swagger_v2_spec.rb +33 -34
- data/spec/swagger_v2/api_swagger_v2_type-format_spec.rb +32 -36
- data/spec/swagger_v2/boolean_params_spec.rb +1 -1
- data/spec/swagger_v2/default_api_spec.rb +26 -29
- data/spec/swagger_v2/description_not_initialized.rb +3 -3
- data/spec/swagger_v2/float_api_spec.rb +1 -1
- data/spec/swagger_v2/form_params_spec.rb +4 -4
- data/spec/swagger_v2/hide_api_spec.rb +48 -51
- data/spec/swagger_v2/host.rb +1 -1
- data/spec/swagger_v2/mounted_target_class_spec.rb +31 -33
- data/spec/swagger_v2/namespace_tags_prefix_spec.rb +23 -21
- data/spec/swagger_v2/namespace_tags_spec.rb +23 -20
- data/spec/swagger_v2/param_type_spec.rb +5 -6
- data/spec/swagger_v2/param_values_spec.rb +31 -37
- data/spec/swagger_v2/params_array_spec.rb +17 -15
- data/spec/swagger_v2/params_hash_spec.rb +17 -15
- data/spec/swagger_v2/params_nested_spec.rb +12 -10
- data/spec/swagger_v2/reference_entity.rb +9 -9
- data/spec/swagger_v2/response_model_spec.rb +58 -62
- data/spec/swagger_v2/simple_mounted_api_spec.rb +179 -147
- metadata +5 -10
- data/spec/params_entity_spec.rb +0 -49
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'format, content_type' do
|
4
|
-
include_context
|
4
|
+
include_context 'the api entities'
|
5
5
|
|
6
6
|
before :all do
|
7
7
|
module TheApi
|
@@ -9,42 +9,42 @@ describe 'format, content_type' do
|
|
9
9
|
format :json
|
10
10
|
|
11
11
|
desc 'This uses json (default) for produces',
|
12
|
-
|
13
|
-
|
12
|
+
failure: [{ code: 400, model: Entities::ApiError }],
|
13
|
+
entity: Entities::UseResponse
|
14
14
|
get '/use_default' do
|
15
|
-
{
|
15
|
+
{ 'declared_params' => declared(params) }
|
16
16
|
end
|
17
17
|
|
18
18
|
desc 'This uses formats for produces',
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
failure: [{ code: 400, model: Entities::ApiError }],
|
20
|
+
formats: [:xml, :binary, 'application/vdns'],
|
21
|
+
entity: Entities::UseResponse
|
22
22
|
get '/use_formats' do
|
23
|
-
{
|
23
|
+
{ 'declared_params' => declared(params) }
|
24
24
|
end
|
25
25
|
|
26
26
|
desc 'This uses content_types for produces',
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
failure: [{ code: 400, model: Entities::ApiError }],
|
28
|
+
content_types: [:xml, :binary, 'application/vdns'],
|
29
|
+
entity: Entities::UseResponse
|
30
30
|
get '/use_content_types' do
|
31
|
-
{
|
31
|
+
{ 'declared_params' => declared(params) }
|
32
32
|
end
|
33
33
|
|
34
34
|
desc 'This uses produces for produces',
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
failure: [{ code: 400, model: Entities::ApiError }],
|
36
|
+
produces: [:xml, :binary, 'application/vdns'],
|
37
|
+
entity: Entities::UseResponse
|
38
38
|
get '/use_produces' do
|
39
|
-
{
|
39
|
+
{ 'declared_params' => declared(params) }
|
40
40
|
end
|
41
41
|
|
42
42
|
desc 'This uses produces for produces',
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
failure: [{ code: 400, model: Entities::ApiError }],
|
44
|
+
consumes: ['application/www_url_encoded'],
|
45
|
+
entity: Entities::UseResponse
|
46
46
|
post '/use_consumes' do
|
47
|
-
{
|
47
|
+
{ 'declared_params' => declared(params) }
|
48
48
|
end
|
49
49
|
|
50
50
|
add_swagger_documentation
|
@@ -56,13 +56,15 @@ describe 'format, content_type' do
|
|
56
56
|
TheApi::ProducesApi
|
57
57
|
end
|
58
58
|
|
59
|
-
let(:produced)
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
59
|
+
let(:produced) do
|
60
|
+
[
|
61
|
+
'application/xml',
|
62
|
+
'application/octet-stream',
|
63
|
+
'application/vdns'
|
64
|
+
]
|
65
|
+
end
|
64
66
|
|
65
|
-
describe
|
67
|
+
describe 'formats' do
|
66
68
|
subject do
|
67
69
|
get '/swagger_doc/use_default'
|
68
70
|
JSON.parse(last_response.body)
|
@@ -74,7 +76,7 @@ describe 'format, content_type' do
|
|
74
76
|
end
|
75
77
|
end
|
76
78
|
|
77
|
-
describe
|
79
|
+
describe 'formats' do
|
78
80
|
subject do
|
79
81
|
get '/swagger_doc/use_formats'
|
80
82
|
JSON.parse(last_response.body)
|
@@ -86,7 +88,7 @@ describe 'format, content_type' do
|
|
86
88
|
end
|
87
89
|
end
|
88
90
|
|
89
|
-
describe
|
91
|
+
describe 'content types' do
|
90
92
|
subject do
|
91
93
|
get '/swagger_doc/use_content_types'
|
92
94
|
JSON.parse(last_response.body)
|
@@ -95,10 +97,10 @@ describe 'format, content_type' do
|
|
95
97
|
specify do
|
96
98
|
expect(subject['paths']['/use_content_types']['get']).to include('produces')
|
97
99
|
expect(subject['paths']['/use_content_types']['get']['produces']).to eql(produced)
|
98
|
-
|
100
|
+
end
|
99
101
|
end
|
100
102
|
|
101
|
-
describe
|
103
|
+
describe 'produces' do
|
102
104
|
subject do
|
103
105
|
get '/swagger_doc/use_produces'
|
104
106
|
JSON.parse(last_response.body)
|
@@ -110,7 +112,7 @@ describe 'format, content_type' do
|
|
110
112
|
end
|
111
113
|
end
|
112
114
|
|
113
|
-
describe
|
115
|
+
describe 'consumes' do
|
114
116
|
subject do
|
115
117
|
get '/swagger_doc/use_consumes'
|
116
118
|
JSON.parse(last_response.body)
|
@@ -118,7 +120,7 @@ describe 'format, content_type' do
|
|
118
120
|
|
119
121
|
specify do
|
120
122
|
expect(subject['paths']['/use_consumes']['post']).to include('consumes')
|
121
|
-
expect(subject['paths']['/use_consumes']['post']['consumes']).to eql [
|
123
|
+
expect(subject['paths']['/use_consumes']['post']['consumes']).to eql ['application/www_url_encoded']
|
122
124
|
end
|
123
125
|
end
|
124
126
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'global configuration stuff' do
|
4
|
-
|
5
4
|
before :all do
|
6
5
|
module TheApi
|
7
6
|
class ConfigurationApi < Grape::API
|
@@ -9,23 +8,22 @@ describe 'global configuration stuff' do
|
|
9
8
|
version 'v3', using: :path
|
10
9
|
|
11
10
|
desc 'This returns something',
|
12
|
-
|
11
|
+
failure: [{ code: 400, message: 'NotFound' }]
|
13
12
|
params do
|
14
13
|
requires :foo, type: Integer
|
15
14
|
end
|
16
15
|
get :configuration do
|
17
|
-
{
|
16
|
+
{ 'declared_params' => declared(params) }
|
18
17
|
end
|
19
18
|
|
20
19
|
add_swagger_documentation format: :json,
|
21
|
-
|
20
|
+
doc_version: '23',
|
22
21
|
schemes: 'https',
|
23
22
|
host: -> { 'another.host.com' },
|
24
23
|
base_path: -> { 'somewhere/over/the/rainbow' },
|
25
24
|
mount_path: 'documentation',
|
26
25
|
add_base_path: true,
|
27
26
|
add_version: true
|
28
|
-
|
29
27
|
end
|
30
28
|
end
|
31
29
|
end
|
@@ -34,18 +32,18 @@ describe 'global configuration stuff' do
|
|
34
32
|
TheApi::ConfigurationApi
|
35
33
|
end
|
36
34
|
|
37
|
-
describe
|
35
|
+
describe 'shows documentation paths' do
|
38
36
|
subject do
|
39
37
|
get '/v3/documentation'
|
40
38
|
JSON.parse(last_response.body)
|
41
39
|
end
|
42
40
|
|
43
41
|
specify do
|
42
|
+
expect(subject['info']['version']).to eql '23'
|
44
43
|
expect(subject['host']).to eql 'another.host.com'
|
45
44
|
expect(subject['basePath']).to eql 'somewhere/over/the/rainbow'
|
46
45
|
expect(subject['paths'].keys.first).to eql '/somewhere/over/the/rainbow/v3/configuration'
|
47
46
|
expect(subject['schemes']).to eql ['https']
|
48
47
|
end
|
49
48
|
end
|
50
|
-
|
51
49
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'headers' do
|
4
|
-
include_context
|
4
|
+
include_context 'the api entities'
|
5
5
|
|
6
6
|
before :all do
|
7
7
|
module TheApi
|
@@ -9,16 +9,16 @@ describe 'headers' do
|
|
9
9
|
format :json
|
10
10
|
|
11
11
|
desc 'This returns something',
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
failure: [{ code: 400, model: Entities::ApiError }],
|
13
|
+
headers: {
|
14
|
+
'X-Rate-Limit-Limit' => {
|
15
|
+
'description' => 'The number of allowed requests in the current period',
|
16
|
+
'type' => 'integer'
|
17
|
+
} },
|
18
|
+
|
19
|
+
entity: Entities::UseResponse
|
20
20
|
get '/use_headers' do
|
21
|
-
{
|
21
|
+
{ 'declared_params' => declared(params) }
|
22
22
|
end
|
23
23
|
|
24
24
|
add_swagger_documentation
|
@@ -36,13 +36,14 @@ describe 'headers' do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
specify do
|
39
|
-
expect(subject['paths']['/use_headers']['get']['parameters']).to eql(
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
39
|
+
expect(subject['paths']['/use_headers']['get']['parameters']).to eql(
|
40
|
+
[
|
41
|
+
{ 'in' => 'header',
|
42
|
+
'name' => 'X-Rate-Limit-Limit',
|
43
|
+
'description' => 'The number of allowed requests in the current period',
|
44
|
+
'type' => 'integer',
|
45
|
+
'format' => 'int32',
|
46
|
+
'required' => false }
|
47
|
+
])
|
47
48
|
end
|
48
49
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'hide documentation path' do
|
4
|
-
include_context
|
4
|
+
include_context 'the api entities'
|
5
5
|
|
6
6
|
before :all do
|
7
7
|
module TheApi
|
@@ -9,24 +9,24 @@ describe 'hide documentation path' do
|
|
9
9
|
format :json
|
10
10
|
|
11
11
|
desc 'This returns something',
|
12
|
-
|
13
|
-
|
12
|
+
params: Entities::UseResponse.documentation,
|
13
|
+
failure: [{ code: 400, message: 'NotFound', model: Entities::ApiError }]
|
14
14
|
params do
|
15
15
|
requires :foo, type: Integer
|
16
16
|
end
|
17
17
|
get '/params_response' do
|
18
|
-
{
|
18
|
+
{ 'declared_params' => declared(params) }
|
19
19
|
end
|
20
20
|
|
21
21
|
desc 'This returns something',
|
22
|
-
|
23
|
-
|
22
|
+
entity: Entities::UseResponse,
|
23
|
+
failure: [{ code: 400, message: 'NotFound', model: Entities::ApiError }]
|
24
24
|
get '/entity_response' do
|
25
|
-
{
|
25
|
+
{ 'declared_params' => declared(params) }
|
26
26
|
end
|
27
27
|
|
28
28
|
desc 'This returns something',
|
29
|
-
|
29
|
+
failure: [{ code: 400, message: 'NotFound', model: Entities::ApiError }]
|
30
30
|
get '/present_response' do
|
31
31
|
foo = OpenStruct.new id: 1, name: 'bar'
|
32
32
|
something = OpenStruct.new description: 'something', item: foo
|
@@ -42,7 +42,7 @@ describe 'hide documentation path' do
|
|
42
42
|
TheApi::HideDocumentationApi
|
43
43
|
end
|
44
44
|
|
45
|
-
describe
|
45
|
+
describe 'shows documentation paths' do
|
46
46
|
subject do
|
47
47
|
get '/swagger_doc'
|
48
48
|
JSON.parse(last_response.body)
|
@@ -52,5 +52,4 @@ describe 'hide documentation path' do
|
|
52
52
|
expect(subject['paths'].keys).to include '/swagger_doc', '/swagger_doc/{name}'
|
53
53
|
end
|
54
54
|
end
|
55
|
-
|
56
55
|
end
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe 'swagger spec v2.0' do
|
4
4
|
describe 'mounted APIs' do
|
5
|
-
include_context
|
5
|
+
include_context 'swagger example'
|
6
6
|
|
7
7
|
def app
|
8
8
|
Class.new(Grape::API) do
|
@@ -11,7 +11,7 @@ describe 'swagger spec v2.0' do
|
|
11
11
|
# Thing stuff
|
12
12
|
desc 'This gets Things.' do
|
13
13
|
params Entities::Something.documentation
|
14
|
-
http_codes [
|
14
|
+
http_codes [{ code: 401, message: 'Unauthorized', model: Entities::ApiError }]
|
15
15
|
end
|
16
16
|
get '/thing' do
|
17
17
|
something = OpenStruct.new text: 'something'
|
@@ -30,7 +30,7 @@ describe 'swagger spec v2.0' do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
desc 'This gets Thing.' do
|
33
|
-
http_codes [
|
33
|
+
http_codes [{ code: 200, message: 'getting a single thing' }, { code: 401, message: 'Unauthorized' }]
|
34
34
|
end
|
35
35
|
params do
|
36
36
|
requires :id, type: Integer
|
@@ -41,18 +41,18 @@ describe 'swagger spec v2.0' do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
desc 'This creates Thing.',
|
44
|
-
|
44
|
+
success: Entities::Something
|
45
45
|
params do
|
46
46
|
requires :text, type: String, documentation: { type: 'string', desc: 'Content of something.' }
|
47
47
|
requires :links, type: Array, documentation: { type: 'link', is_array: true }
|
48
48
|
end
|
49
|
-
post '/thing', http_codes: [
|
49
|
+
post '/thing', http_codes: [{ code: 422, message: 'Unprocessible Entity' }] do
|
50
50
|
something = OpenStruct.new text: 'something'
|
51
51
|
present something, with: Entities::Something
|
52
52
|
end
|
53
53
|
|
54
54
|
desc 'This updates Thing.',
|
55
|
-
|
55
|
+
success: Entities::Something
|
56
56
|
params do
|
57
57
|
requires :id, type: Integer
|
58
58
|
optional :text, type: String, desc: 'Content of something.'
|
@@ -64,7 +64,7 @@ describe 'swagger spec v2.0' do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
desc 'This deletes Thing.',
|
67
|
-
|
67
|
+
entity: Entities::Something
|
68
68
|
params do
|
69
69
|
requires :id, type: Integer
|
70
70
|
end
|
@@ -74,7 +74,7 @@ describe 'swagger spec v2.0' do
|
|
74
74
|
end
|
75
75
|
|
76
76
|
desc 'dummy route.',
|
77
|
-
|
77
|
+
failure: [{ code: 401, message: 'Unauthorized' }]
|
78
78
|
params do
|
79
79
|
requires :id, type: Integer
|
80
80
|
end
|
@@ -83,12 +83,11 @@ describe 'swagger spec v2.0' do
|
|
83
83
|
|
84
84
|
namespace :other_thing do
|
85
85
|
desc 'nested route inside namespace',
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
86
|
+
entity: Entities::QueryInput,
|
87
|
+
x: {
|
88
|
+
'amazon-apigateway-auth' => { type: 'none' },
|
89
|
+
'amazon-apigateway-integration' => { type: 'aws', uri: 'foo_bar_uri', httpMethod: 'get' }
|
90
|
+
}
|
92
91
|
|
93
92
|
params do
|
94
93
|
requires :elements, documentation: {
|
@@ -108,14 +107,14 @@ describe 'swagger spec v2.0' do
|
|
108
107
|
add_swagger_documentation hide_format: true,
|
109
108
|
base_path: '/api',
|
110
109
|
info: {
|
111
|
-
title:
|
112
|
-
description:
|
113
|
-
contact_name:
|
114
|
-
contact_email:
|
115
|
-
contact_url:
|
116
|
-
license:
|
117
|
-
license_url:
|
118
|
-
terms_of_service_url:
|
110
|
+
title: 'The API title to be displayed on the API homepage.',
|
111
|
+
description: 'A description of the API.',
|
112
|
+
contact_name: 'Contact name',
|
113
|
+
contact_email: 'Contact@email.com',
|
114
|
+
contact_url: 'Contact URL',
|
115
|
+
license: 'The name of the license.',
|
116
|
+
license_url: 'www.The-URL-of-the-license.org',
|
117
|
+
terms_of_service_url: 'www.The-URL-of-the-terms-and-service.com'
|
119
118
|
}
|
120
119
|
end
|
121
120
|
end
|
@@ -139,8 +138,6 @@ describe 'swagger spec v2.0' do
|
|
139
138
|
end
|
140
139
|
end
|
141
140
|
end
|
142
|
-
|
143
141
|
end
|
144
|
-
|
145
142
|
end
|
146
143
|
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `header`' do
|
4
|
-
include_context
|
4
|
+
include_context 'the api entities'
|
5
5
|
|
6
6
|
before :all do
|
7
7
|
module TheApi
|
8
8
|
class NestedBodyParamTypeApi < Grape::API
|
9
9
|
namespace :simple_nested_params do
|
10
10
|
desc 'post in body with nested parameters',
|
11
|
-
|
12
|
-
|
11
|
+
detail: 'more details description',
|
12
|
+
success: TheApi::Entities::UseNestedWithAddress
|
13
13
|
params do
|
14
14
|
requires :name, type: String, documentation: { desc: 'name', in: 'body' }
|
15
15
|
optional :address, type: Hash do
|
@@ -21,12 +21,12 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
|
|
21
21
|
end
|
22
22
|
|
23
23
|
post '/in_body' do
|
24
|
-
{
|
24
|
+
{ 'declared_params' => declared(params) }
|
25
25
|
end
|
26
26
|
|
27
27
|
desc 'put in body with nested parameters',
|
28
|
-
|
29
|
-
|
28
|
+
detail: 'more details description',
|
29
|
+
success: TheApi::Entities::UseNestedWithAddress
|
30
30
|
params do
|
31
31
|
requires :id, type: Integer
|
32
32
|
optional :name, type: String, documentation: { desc: 'name', in: 'body' }
|
@@ -39,13 +39,13 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
|
|
39
39
|
end
|
40
40
|
|
41
41
|
put '/in_body/:id' do
|
42
|
-
{
|
42
|
+
{ 'declared_params' => declared(params) }
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
namespace :multiple_nested_params do
|
47
47
|
desc 'put in body with multiple nested parameters',
|
48
|
-
|
48
|
+
success: TheApi::Entities::UseNestedWithAddress
|
49
49
|
params do
|
50
50
|
requires :id, type: Integer
|
51
51
|
optional :name, type: String, documentation: { desc: 'name', in: 'body' }
|
@@ -64,7 +64,7 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
|
|
64
64
|
end
|
65
65
|
|
66
66
|
put '/in_body/:id' do
|
67
|
-
{
|
67
|
+
{ 'declared_params' => declared(params) }
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
@@ -84,68 +84,66 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
|
|
84
84
|
end
|
85
85
|
|
86
86
|
specify do
|
87
|
-
expect(subject['paths']['/simple_nested_params/in_body']['post']['parameters']).to eql(
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
87
|
+
expect(subject['paths']['/simple_nested_params/in_body']['post']['parameters']).to eql(
|
88
|
+
[{
|
89
|
+
'name' => 'UseNestedWithAddress',
|
90
|
+
'in' => 'body',
|
91
|
+
'required' => true,
|
92
|
+
'schema' => { '$ref' => '#/definitions/postRequestUseNestedWithAddress' }
|
93
|
+
}])
|
93
94
|
end
|
94
95
|
|
95
96
|
specify do
|
96
|
-
expect(subject['definitions']['postRequestUseNestedWithAddress']).to eql(
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
97
|
+
expect(subject['definitions']['postRequestUseNestedWithAddress']).to eql(
|
98
|
+
'description' => "post in body with nested parameters\n more details description",
|
99
|
+
'type' => 'object',
|
100
|
+
'properties' => {
|
101
|
+
'address' => { '$ref' => '#/definitions/postRequestUseNestedWithAddressAddress' },
|
102
|
+
'name' => { 'type' => 'string', 'description' => 'name' }
|
102
103
|
},
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
"country"=>{"type"=>"string", "description"=>"country"}
|
104
|
+
'required' => ['name'])
|
105
|
+
expect(subject['definitions']['postRequestUseNestedWithAddressAddress']).to eql(
|
106
|
+
'description' => 'postRequestUseNestedWithAddress - address',
|
107
|
+
'type' => 'object',
|
108
|
+
'properties' => {
|
109
|
+
'street' => { 'type' => 'string', 'description' => 'street' },
|
110
|
+
'postcode' => { 'type' => 'string', 'description' => 'postcode' },
|
111
|
+
'city' => { 'type' => 'string', 'description' => 'city' },
|
112
|
+
'country' => { 'type' => 'string', 'description' => 'country' }
|
113
113
|
},
|
114
|
-
|
115
|
-
})
|
114
|
+
'required' => %w(street postcode city))
|
116
115
|
end
|
117
116
|
|
118
117
|
specify do
|
119
|
-
expect(subject['paths']['/simple_nested_params/in_body/{id}']['put']['parameters']).to eql(
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
118
|
+
expect(subject['paths']['/simple_nested_params/in_body/{id}']['put']['parameters']).to eql(
|
119
|
+
[
|
120
|
+
{ 'in' => 'path', 'name' => 'id', 'type' => 'integer', 'format' => 'int32', 'required' => true },
|
121
|
+
{
|
122
|
+
'name' => 'UseNestedWithAddress',
|
123
|
+
'in' => 'body',
|
124
|
+
'required' => true,
|
125
|
+
'schema' => { '$ref' => '#/definitions/putRequestUseNestedWithAddress' }
|
126
|
+
}
|
127
|
+
])
|
128
128
|
end
|
129
129
|
|
130
130
|
specify do
|
131
|
-
expect(subject['definitions']['putRequestUseNestedWithAddress']).to eql(
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
}
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
"country"=>{"type"=>"string", "description"=>"country"}}
|
148
|
-
})
|
131
|
+
expect(subject['definitions']['putRequestUseNestedWithAddress']).to eql(
|
132
|
+
'description' => "put in body with nested parameters\n more details description",
|
133
|
+
'type' => 'object',
|
134
|
+
'properties' => {
|
135
|
+
'address' => { '$ref' => '#/definitions/putRequestUseNestedWithAddressAddress' },
|
136
|
+
'id' => { 'type' => 'integer', 'format' => 'int32', 'readOnly' => true },
|
137
|
+
'name' => { 'type' => 'string', 'description' => 'name' }
|
138
|
+
})
|
139
|
+
expect(subject['definitions']['putRequestUseNestedWithAddressAddress']).to eql(
|
140
|
+
'description' => 'putRequestUseNestedWithAddress - address',
|
141
|
+
'type' => 'object',
|
142
|
+
'properties' => {
|
143
|
+
'street' => { 'type' => 'string', 'description' => 'street' },
|
144
|
+
'postcode' => { 'type' => 'string', 'description' => 'postcode' },
|
145
|
+
'city' => { 'type' => 'string', 'description' => 'city' },
|
146
|
+
'country' => { 'type' => 'string', 'description' => 'country' } })
|
149
147
|
end
|
150
148
|
end
|
151
149
|
|
@@ -156,42 +154,42 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
|
|
156
154
|
end
|
157
155
|
|
158
156
|
specify do
|
159
|
-
expect(subject['paths']['/multiple_nested_params/in_body/{id}']['put']['parameters']).to eql(
|
160
|
-
|
161
|
-
|
162
|
-
|
157
|
+
expect(subject['paths']['/multiple_nested_params/in_body/{id}']['put']['parameters']).to eql(
|
158
|
+
[
|
159
|
+
{ 'in' => 'path', 'name' => 'id', 'type' => 'integer', 'format' => 'int32', 'required' => true },
|
160
|
+
{ 'name' => 'UseNestedWithAddress', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/putRequestUseNestedWithAddress' } }
|
161
|
+
])
|
163
162
|
end
|
164
163
|
|
165
164
|
specify do
|
166
|
-
expect(subject['definitions']['putRequestUseNestedWithAddress']).to eql(
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
expect(subject['definitions']['putRequestUseNestedWithAddressAddress']).to eql(
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
165
|
+
expect(subject['definitions']['putRequestUseNestedWithAddress']).to eql(
|
166
|
+
'description' => 'put in body with multiple nested parameters',
|
167
|
+
'type' => 'object',
|
168
|
+
'properties' => {
|
169
|
+
'address' => { '$ref' => '#/definitions/putRequestUseNestedWithAddressAddress' },
|
170
|
+
'delivery_address' => { '$ref' => '#/definitions/putRequestUseNestedWithAddressDeliveryAddress' },
|
171
|
+
'id' => { 'type' => 'integer', 'format' => 'int32', 'readOnly' => true },
|
172
|
+
'name' => { 'type' => 'string', 'description' => 'name' }
|
173
|
+
})
|
174
|
+
expect(subject['definitions']['putRequestUseNestedWithAddressAddress']).to eql(
|
175
|
+
'description' => 'putRequestUseNestedWithAddress - address',
|
176
|
+
'type' => 'object',
|
177
|
+
'properties' => {
|
178
|
+
'street' => { 'type' => 'string', 'description' => 'street' },
|
179
|
+
'postcode' => { 'type' => 'string', 'description' => 'postcode' },
|
180
|
+
'city' => { 'type' => 'string', 'description' => 'city' },
|
181
|
+
'country' => { 'type' => 'string', 'description' => 'country' }
|
183
182
|
},
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
}})
|
183
|
+
'required' => ['postcode'])
|
184
|
+
expect(subject['definitions']['putRequestUseNestedWithAddressDeliveryAddress']).to eql(
|
185
|
+
'description' => 'putRequestUseNestedWithAddress - delivery_address',
|
186
|
+
'type' => 'object',
|
187
|
+
'properties' => {
|
188
|
+
'street' => { 'type' => 'string', 'description' => 'street' },
|
189
|
+
'postcode' => { 'type' => 'string', 'description' => 'postcode' },
|
190
|
+
'city' => { 'type' => 'string', 'description' => 'city' },
|
191
|
+
'country' => { 'type' => 'string', 'description' => 'country' }
|
192
|
+
})
|
195
193
|
end
|
196
194
|
end
|
197
195
|
end
|