grape-swagger 0.33.0 → 1.0.0
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 +7 -7
- data/.rubocop_todo.yml +0 -6
- data/.travis.yml +11 -10
- data/CHANGELOG.md +75 -5
- data/Gemfile +5 -5
- data/README.md +73 -5
- data/grape-swagger.gemspec +1 -1
- data/lib/grape-swagger/doc_methods/build_model_definition.rb +0 -17
- data/lib/grape-swagger/doc_methods/data_type.rb +1 -1
- data/lib/grape-swagger/doc_methods/extensions.rb +6 -1
- data/lib/grape-swagger/doc_methods/format_data.rb +51 -0
- data/lib/grape-swagger/doc_methods/move_params.rb +22 -49
- data/lib/grape-swagger/doc_methods/parse_params.rb +6 -0
- data/lib/grape-swagger/doc_methods.rb +2 -0
- data/lib/grape-swagger/endpoint/params_parser.rb +22 -22
- data/lib/grape-swagger/endpoint.rb +33 -14
- data/lib/grape-swagger/version.rb +1 -1
- data/lib/grape-swagger.rb +1 -1
- data/spec/issues/751_deeply_nested_objects_spec.rb +190 -0
- data/spec/lib/data_type_spec.rb +2 -2
- data/spec/lib/endpoint/params_parser_spec.rb +46 -21
- data/spec/lib/endpoint_spec.rb +4 -4
- data/spec/lib/extensions_spec.rb +10 -0
- data/spec/lib/format_data_spec.rb +91 -0
- data/spec/lib/move_params_spec.rb +4 -266
- data/spec/lib/optional_object_spec.rb +0 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/support/model_parsers/entity_parser.rb +1 -1
- data/spec/support/model_parsers/representable_parser.rb +1 -1
- data/spec/swagger_v2/api_swagger_v2_hash_and_array_spec.rb +3 -1
- data/spec/swagger_v2/api_swagger_v2_hide_param_spec.rb +14 -3
- data/spec/swagger_v2/api_swagger_v2_response_with_root_spec.rb +153 -0
- data/spec/swagger_v2/boolean_params_spec.rb +1 -1
- data/spec/swagger_v2/description_not_initialized_spec.rb +39 -0
- data/spec/swagger_v2/endpoint_versioned_path_spec.rb +33 -0
- data/spec/swagger_v2/mounted_target_class_spec.rb +1 -1
- data/spec/swagger_v2/namespace_tags_prefix_spec.rb +15 -1
- data/spec/swagger_v2/params_array_spec.rb +2 -2
- data/spec/swagger_v2/parent_less_namespace_spec.rb +32 -0
- data/spec/swagger_v2/{reference_entity.rb → reference_entity_spec.rb} +17 -10
- metadata +20 -13
- data/spec/swagger_v2/description_not_initialized.rb +0 -39
- data/spec/swagger_v2/parent_less_namespace.rb +0 -49
@@ -0,0 +1,153 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe 'response with root' do
|
6
|
+
include_context "#{MODEL_PARSER} swagger example"
|
7
|
+
|
8
|
+
before :all do
|
9
|
+
module TheApi
|
10
|
+
class ResponseApiWithRoot < Grape::API
|
11
|
+
format :json
|
12
|
+
|
13
|
+
desc 'This returns something',
|
14
|
+
http_codes: [{ code: 200, model: Entities::Something }]
|
15
|
+
get '/ordinary_response' do
|
16
|
+
{ 'declared_params' => declared(params) }
|
17
|
+
end
|
18
|
+
|
19
|
+
desc 'This returns something',
|
20
|
+
is_array: true,
|
21
|
+
http_codes: [{ code: 200, model: Entities::Something }]
|
22
|
+
get '/response_with_array' do
|
23
|
+
{ 'declared_params' => declared(params) }
|
24
|
+
end
|
25
|
+
|
26
|
+
route_setting :swagger, root: true
|
27
|
+
desc 'This returns something',
|
28
|
+
http_codes: [{ code: 200, model: Entities::Something }]
|
29
|
+
get '/response_with_root' do
|
30
|
+
{ 'declared_params' => declared(params) }
|
31
|
+
end
|
32
|
+
|
33
|
+
route_setting :swagger, root: true
|
34
|
+
desc 'This returns underscored root',
|
35
|
+
http_codes: [{ code: 200, model: Entities::ApiError }]
|
36
|
+
get '/response_with_root_underscore' do
|
37
|
+
{ 'declared_params' => declared(params) }
|
38
|
+
end
|
39
|
+
|
40
|
+
route_setting :swagger, root: true
|
41
|
+
desc 'This returns something',
|
42
|
+
is_array: true,
|
43
|
+
http_codes: [{ code: 200, model: Entities::Something }]
|
44
|
+
get '/response_with_array_and_root' do
|
45
|
+
{ 'declared_params' => declared(params) }
|
46
|
+
end
|
47
|
+
|
48
|
+
route_setting :swagger, root: 'custom_root'
|
49
|
+
desc 'This returns something',
|
50
|
+
http_codes: [{ code: 200, model: Entities::Something }]
|
51
|
+
get '/response_with_custom_root' do
|
52
|
+
{ 'declared_params' => declared(params) }
|
53
|
+
end
|
54
|
+
|
55
|
+
add_swagger_documentation
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def app
|
61
|
+
TheApi::ResponseApiWithRoot
|
62
|
+
end
|
63
|
+
|
64
|
+
describe 'GET /ordinary_response' do
|
65
|
+
subject do
|
66
|
+
get '/swagger_doc/ordinary_response'
|
67
|
+
JSON.parse(last_response.body)
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'does not add root or array' do
|
71
|
+
schema = subject.dig('paths', '/ordinary_response', 'get', 'responses', '200', 'schema')
|
72
|
+
expect(schema).to eq(
|
73
|
+
'$ref' => '#/definitions/Something'
|
74
|
+
)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe 'GET /response_with_array' do
|
79
|
+
subject do
|
80
|
+
get '/swagger_doc/response_with_array'
|
81
|
+
JSON.parse(last_response.body)
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'adds array to the response' do
|
85
|
+
schema = subject.dig('paths', '/response_with_array', 'get', 'responses', '200', 'schema')
|
86
|
+
expect(schema).to eq(
|
87
|
+
'type' => 'array', 'items' => { '$ref' => '#/definitions/Something' }
|
88
|
+
)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe 'GET /response_with_root' do
|
93
|
+
subject do
|
94
|
+
get '/swagger_doc/response_with_root'
|
95
|
+
JSON.parse(last_response.body)
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'adds root to the response' do
|
99
|
+
schema = subject.dig('paths', '/response_with_root', 'get', 'responses', '200', 'schema')
|
100
|
+
expect(schema).to eq(
|
101
|
+
'type' => 'object',
|
102
|
+
'properties' => { 'something' => { '$ref' => '#/definitions/Something' } }
|
103
|
+
)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe 'GET /response_with_root_underscore' do
|
108
|
+
subject do
|
109
|
+
get '/swagger_doc/response_with_root_underscore'
|
110
|
+
JSON.parse(last_response.body)
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'adds root to the response' do
|
114
|
+
schema = subject.dig('paths', '/response_with_root_underscore', 'get', 'responses', '200', 'schema')
|
115
|
+
expect(schema).to eq(
|
116
|
+
'type' => 'object',
|
117
|
+
'properties' => { 'api_error' => { '$ref' => '#/definitions/ApiError' } }
|
118
|
+
)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe 'GET /response_with_array_and_root' do
|
123
|
+
subject do
|
124
|
+
get '/swagger_doc/response_with_array_and_root'
|
125
|
+
JSON.parse(last_response.body)
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'adds root and array to the response' do
|
129
|
+
schema = subject.dig('paths', '/response_with_array_and_root', 'get', 'responses', '200', 'schema')
|
130
|
+
expect(schema).to eq(
|
131
|
+
'type' => 'object',
|
132
|
+
'properties' => {
|
133
|
+
'somethings' => { 'type' => 'array', 'items' => { '$ref' => '#/definitions/Something' } }
|
134
|
+
}
|
135
|
+
)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
describe 'GET /response_with_custom_root' do
|
140
|
+
subject do
|
141
|
+
get '/swagger_doc/response_with_custom_root'
|
142
|
+
JSON.parse(last_response.body)
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'adds root to the response' do
|
146
|
+
schema = subject.dig('paths', '/response_with_custom_root', 'get', 'responses', '200', 'schema')
|
147
|
+
expect(schema).to eq(
|
148
|
+
'type' => 'object',
|
149
|
+
'properties' => { 'custom_root' => { '$ref' => '#/definitions/Something' } }
|
150
|
+
)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe 'has no description, if details or description are nil' do
|
6
|
+
include_context "#{MODEL_PARSER} swagger example"
|
7
|
+
|
8
|
+
before :all do
|
9
|
+
module TheApi
|
10
|
+
class GfmRcDetailApi < Grape::API
|
11
|
+
format :json
|
12
|
+
|
13
|
+
desc nil,
|
14
|
+
detail: nil,
|
15
|
+
entity: Entities::UseResponse,
|
16
|
+
failure: [{ code: 400, model: Entities::ApiError }]
|
17
|
+
get '/use_gfm_rc_detail' do
|
18
|
+
{ 'declared_params' => declared(params) }
|
19
|
+
end
|
20
|
+
|
21
|
+
add_swagger_documentation
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def app
|
27
|
+
TheApi::GfmRcDetailApi
|
28
|
+
end
|
29
|
+
|
30
|
+
subject do
|
31
|
+
get '/swagger_doc'
|
32
|
+
JSON.parse(last_response.body)
|
33
|
+
end
|
34
|
+
|
35
|
+
specify do
|
36
|
+
expect(subject['paths']['/use_gfm_rc_detail']['get']).not_to include('description')
|
37
|
+
expect(subject['paths']['/use_gfm_rc_detail']['get']['description']).to eql(nil)
|
38
|
+
end
|
39
|
+
end
|
@@ -52,6 +52,39 @@ describe 'Grape::Endpoint#path_and_definitions' do
|
|
52
52
|
expect(subject.first['/v1/item'][:get][:tags]).to eq ['special-item']
|
53
53
|
end
|
54
54
|
end
|
55
|
+
|
56
|
+
context 'when parameter with a custom type is specified' do
|
57
|
+
let(:item) do
|
58
|
+
Class.new(Grape::API) do
|
59
|
+
Color = Struct.new(:value) do
|
60
|
+
def self.parse(value)
|
61
|
+
new(value: value)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class ColorEntity < Grape::Entity
|
66
|
+
expose :value
|
67
|
+
end
|
68
|
+
|
69
|
+
version 'v1', using: :path
|
70
|
+
|
71
|
+
resource :item do
|
72
|
+
params do
|
73
|
+
requires :root, type: Hash do
|
74
|
+
optional :color, type: Color, documentation: { type: ColorEntity }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
post '/'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'creates a reference to the model instead of using the non-existent type' do
|
83
|
+
color = subject.dig(1, 'postV1Item', :properties, :root, :properties, :color)
|
84
|
+
expect(color).not_to eq(type: 'ColorEntity')
|
85
|
+
expect(color).to eq('$ref' => '#/definitions/ColorEntity')
|
86
|
+
end
|
87
|
+
end
|
55
88
|
end
|
56
89
|
|
57
90
|
context 'when mounting an API more than once', if: GrapeVersion.satisfy?('>= 1.2.0') do
|
@@ -29,12 +29,25 @@ describe 'namespace tags check while using prefix and version' do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
32
|
+
|
33
|
+
class NestedPrefixApi < Grape::API
|
34
|
+
version :v1
|
35
|
+
prefix 'nested_prefix/api'
|
36
|
+
|
37
|
+
namespace :deep_namespace do
|
38
|
+
desc 'This gets something within a deeply nested resource'
|
39
|
+
get '/deep' do
|
40
|
+
{ bla: 'something' }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
32
44
|
end
|
33
45
|
|
34
46
|
class TagApi < Grape::API
|
35
47
|
prefix :api
|
36
48
|
mount TheApi::CascadingVersionApi
|
37
49
|
mount TheApi::NamespaceApi
|
50
|
+
mount TheApi::NestedPrefixApi
|
38
51
|
add_swagger_documentation
|
39
52
|
end
|
40
53
|
end
|
@@ -55,7 +68,8 @@ describe 'namespace tags check while using prefix and version' do
|
|
55
68
|
{ 'name' => 'hudson', 'description' => 'Operations about hudsons' },
|
56
69
|
{ 'name' => 'colorado', 'description' => 'Operations about colorados' },
|
57
70
|
{ 'name' => 'thames', 'description' => 'Operations about thames' },
|
58
|
-
{ 'name' => 'niles', 'description' => 'Operations about niles' }
|
71
|
+
{ 'name' => 'niles', 'description' => 'Operations about niles' },
|
72
|
+
{ 'name' => 'deep_namespace', 'description' => 'Operations about deep_namespaces' }
|
59
73
|
]
|
60
74
|
)
|
61
75
|
|
@@ -123,10 +123,10 @@ describe 'Group Params as Array' do
|
|
123
123
|
'type' => 'object',
|
124
124
|
'properties' => {
|
125
125
|
'array_of_string' => {
|
126
|
-
'type' => 'string', 'description' => 'nested array of strings'
|
126
|
+
'items' => { 'type' => 'string' }, 'type' => 'array', 'description' => 'nested array of strings'
|
127
127
|
},
|
128
128
|
'array_of_integer' => {
|
129
|
-
'type' => 'integer', 'format' => 'int32', 'description' => 'nested array of integers'
|
129
|
+
'items' => { 'type' => 'integer', 'format' => 'int32' }, 'type' => 'array', 'description' => 'nested array of integers'
|
130
130
|
}
|
131
131
|
},
|
132
132
|
'required' => %w[array_of_string array_of_integer]
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe 'a parent less namespace' do
|
6
|
+
include_context 'namespace example'
|
7
|
+
|
8
|
+
before :all do
|
9
|
+
class ParentLessApi < Grape::API
|
10
|
+
prefix :api
|
11
|
+
mount TheApi::ParentLessNamespaceApi
|
12
|
+
add_swagger_documentation version: 'v1'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def app
|
17
|
+
ParentLessApi
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'retrieves swagger-documentation on /swagger_doc' do
|
21
|
+
let(:route_name) { ':animal/:breed/queues/:queue_id/reservations' }
|
22
|
+
subject do
|
23
|
+
get '/api/swagger_doc.json'
|
24
|
+
JSON.parse(last_response.body)
|
25
|
+
end
|
26
|
+
|
27
|
+
specify do
|
28
|
+
expect(subject['paths']['/api/{animal}/{breed}/queues/{queue_id}/reservations']['get']['operationId'])
|
29
|
+
.to eql('getApiAnimalBreedQueuesQueueIdReservations')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -58,20 +58,27 @@ describe 'referenceEntity' do
|
|
58
58
|
expect(subject['paths']['/kind']['get']['parameters']).to eq [{
|
59
59
|
'in' => 'query',
|
60
60
|
'name' => 'something',
|
61
|
-
'description' => '
|
62
|
-
'type' => '
|
63
|
-
'required' => false
|
64
|
-
'allowMultiple' => false
|
61
|
+
'description' => 'Something interesting.',
|
62
|
+
'type' => 'SomethingCustom',
|
63
|
+
'required' => false
|
65
64
|
}]
|
66
65
|
|
67
|
-
expect(subject['definitions'].keys).to include '
|
68
|
-
expect(subject['definitions']['
|
69
|
-
'type' => 'object', 'properties' => { 'text' => { 'type' => 'string' } }
|
66
|
+
expect(subject['definitions'].keys).to include 'SomethingCustom'
|
67
|
+
expect(subject['definitions']['SomethingCustom']).to eq(
|
68
|
+
'type' => 'object', 'properties' => { 'text' => { 'type' => 'string', 'description' => 'Content of something.' } }
|
70
69
|
)
|
71
70
|
|
72
|
-
expect(subject['definitions'].keys).to include '
|
73
|
-
expect(subject['definitions']['
|
74
|
-
'
|
71
|
+
expect(subject['definitions'].keys).to include 'KindCustom'
|
72
|
+
expect(subject['definitions']['KindCustom']).to eq(
|
73
|
+
'type' => 'object',
|
74
|
+
'properties' => {
|
75
|
+
'title' => { 'type' => 'string', 'description' => 'Title of the kind.' },
|
76
|
+
'something' => {
|
77
|
+
'$ref' => '#/definitions/SomethingCustom',
|
78
|
+
'description' => 'Something interesting.'
|
79
|
+
}
|
80
|
+
},
|
81
|
+
'description' => 'This returns kind and something or an error'
|
75
82
|
)
|
76
83
|
end
|
77
84
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-swagger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Vandecasteele
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grape
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.3.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.3.0
|
27
27
|
description:
|
28
28
|
email:
|
29
29
|
- tim.vandecasteele@gmail.com
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- lib/grape-swagger/doc_methods/build_model_definition.rb
|
60
60
|
- lib/grape-swagger/doc_methods/data_type.rb
|
61
61
|
- lib/grape-swagger/doc_methods/extensions.rb
|
62
|
+
- lib/grape-swagger/doc_methods/format_data.rb
|
62
63
|
- lib/grape-swagger/doc_methods/headers.rb
|
63
64
|
- lib/grape-swagger/doc_methods/move_params.rb
|
64
65
|
- lib/grape-swagger/doc_methods/operation_id.rb
|
@@ -93,10 +94,12 @@ files:
|
|
93
94
|
- spec/issues/605_root_route_documentation_spec.rb
|
94
95
|
- spec/issues/650_params_array_spec.rb
|
95
96
|
- spec/issues/680_keep_204_error_schemas_spec.rb
|
97
|
+
- spec/issues/751_deeply_nested_objects_spec.rb
|
96
98
|
- spec/lib/data_type_spec.rb
|
97
99
|
- spec/lib/endpoint/params_parser_spec.rb
|
98
100
|
- spec/lib/endpoint_spec.rb
|
99
101
|
- spec/lib/extensions_spec.rb
|
102
|
+
- spec/lib/format_data_spec.rb
|
100
103
|
- spec/lib/model_parsers_spec.rb
|
101
104
|
- spec/lib/move_params_spec.rb
|
102
105
|
- spec/lib/oapi_tasks_spec.rb
|
@@ -136,13 +139,14 @@ files:
|
|
136
139
|
- spec/swagger_v2/api_swagger_v2_response_spec.rb
|
137
140
|
- spec/swagger_v2/api_swagger_v2_response_with_examples_spec.rb
|
138
141
|
- spec/swagger_v2/api_swagger_v2_response_with_headers_spec.rb
|
142
|
+
- spec/swagger_v2/api_swagger_v2_response_with_root_spec.rb
|
139
143
|
- spec/swagger_v2/api_swagger_v2_spec.rb
|
140
144
|
- spec/swagger_v2/api_swagger_v2_status_codes_spec.rb
|
141
145
|
- spec/swagger_v2/api_swagger_v2_type-format_spec.rb
|
142
146
|
- spec/swagger_v2/boolean_params_spec.rb
|
143
147
|
- spec/swagger_v2/default_api_spec.rb
|
144
148
|
- spec/swagger_v2/deprecated_field_spec.rb
|
145
|
-
- spec/swagger_v2/
|
149
|
+
- spec/swagger_v2/description_not_initialized_spec.rb
|
146
150
|
- spec/swagger_v2/endpoint_versioned_path_spec.rb
|
147
151
|
- spec/swagger_v2/errors_spec.rb
|
148
152
|
- spec/swagger_v2/float_api_spec.rb
|
@@ -165,8 +169,8 @@ files:
|
|
165
169
|
- spec/swagger_v2/params_array_spec.rb
|
166
170
|
- spec/swagger_v2/params_hash_spec.rb
|
167
171
|
- spec/swagger_v2/params_nested_spec.rb
|
168
|
-
- spec/swagger_v2/
|
169
|
-
- spec/swagger_v2/
|
172
|
+
- spec/swagger_v2/parent_less_namespace_spec.rb
|
173
|
+
- spec/swagger_v2/reference_entity_spec.rb
|
170
174
|
- spec/swagger_v2/security_requirement_spec.rb
|
171
175
|
- spec/swagger_v2/simple_mounted_api_spec.rb
|
172
176
|
- spec/version_spec.rb
|
@@ -189,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
189
193
|
- !ruby/object:Gem::Version
|
190
194
|
version: '0'
|
191
195
|
requirements: []
|
192
|
-
rubygems_version: 3.
|
196
|
+
rubygems_version: 3.1.2
|
193
197
|
signing_key:
|
194
198
|
specification_version: 4
|
195
199
|
summary: Add auto generated documentation to your Grape API that can be displayed
|
@@ -212,10 +216,12 @@ test_files:
|
|
212
216
|
- spec/issues/605_root_route_documentation_spec.rb
|
213
217
|
- spec/issues/650_params_array_spec.rb
|
214
218
|
- spec/issues/680_keep_204_error_schemas_spec.rb
|
219
|
+
- spec/issues/751_deeply_nested_objects_spec.rb
|
215
220
|
- spec/lib/data_type_spec.rb
|
216
221
|
- spec/lib/endpoint/params_parser_spec.rb
|
217
222
|
- spec/lib/endpoint_spec.rb
|
218
223
|
- spec/lib/extensions_spec.rb
|
224
|
+
- spec/lib/format_data_spec.rb
|
219
225
|
- spec/lib/model_parsers_spec.rb
|
220
226
|
- spec/lib/move_params_spec.rb
|
221
227
|
- spec/lib/oapi_tasks_spec.rb
|
@@ -255,13 +261,14 @@ test_files:
|
|
255
261
|
- spec/swagger_v2/api_swagger_v2_response_spec.rb
|
256
262
|
- spec/swagger_v2/api_swagger_v2_response_with_examples_spec.rb
|
257
263
|
- spec/swagger_v2/api_swagger_v2_response_with_headers_spec.rb
|
264
|
+
- spec/swagger_v2/api_swagger_v2_response_with_root_spec.rb
|
258
265
|
- spec/swagger_v2/api_swagger_v2_spec.rb
|
259
266
|
- spec/swagger_v2/api_swagger_v2_status_codes_spec.rb
|
260
267
|
- spec/swagger_v2/api_swagger_v2_type-format_spec.rb
|
261
268
|
- spec/swagger_v2/boolean_params_spec.rb
|
262
269
|
- spec/swagger_v2/default_api_spec.rb
|
263
270
|
- spec/swagger_v2/deprecated_field_spec.rb
|
264
|
-
- spec/swagger_v2/
|
271
|
+
- spec/swagger_v2/description_not_initialized_spec.rb
|
265
272
|
- spec/swagger_v2/endpoint_versioned_path_spec.rb
|
266
273
|
- spec/swagger_v2/errors_spec.rb
|
267
274
|
- spec/swagger_v2/float_api_spec.rb
|
@@ -284,8 +291,8 @@ test_files:
|
|
284
291
|
- spec/swagger_v2/params_array_spec.rb
|
285
292
|
- spec/swagger_v2/params_hash_spec.rb
|
286
293
|
- spec/swagger_v2/params_nested_spec.rb
|
287
|
-
- spec/swagger_v2/
|
288
|
-
- spec/swagger_v2/
|
294
|
+
- spec/swagger_v2/parent_less_namespace_spec.rb
|
295
|
+
- spec/swagger_v2/reference_entity_spec.rb
|
289
296
|
- spec/swagger_v2/security_requirement_spec.rb
|
290
297
|
- spec/swagger_v2/simple_mounted_api_spec.rb
|
291
298
|
- spec/version_spec.rb
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe 'details' do
|
6
|
-
describe 'has no description, if details or description are nil' do
|
7
|
-
before :all do
|
8
|
-
module TheApi
|
9
|
-
class GfmRcDetailApi < Grape::API
|
10
|
-
format :json
|
11
|
-
|
12
|
-
desc nil,
|
13
|
-
detail: nil,
|
14
|
-
entity: Entities::UseResponse,
|
15
|
-
failure: [{ code: 400, model: Entities::ApiError }]
|
16
|
-
get '/use_gfm_rc_detail' do
|
17
|
-
{ 'declared_params' => declared(params) }
|
18
|
-
end
|
19
|
-
|
20
|
-
add_swagger_documentation markdown: GrapeSwagger::Markdown::RedcarpetAdapter.new
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def app
|
26
|
-
TheApi::GfmRcDetailApi
|
27
|
-
end
|
28
|
-
|
29
|
-
subject do
|
30
|
-
get '/swagger_doc'
|
31
|
-
JSON.parse(last_response.body)
|
32
|
-
end
|
33
|
-
|
34
|
-
specify do
|
35
|
-
expect(subject['paths']['/use_gfm_rc_detail']['get']).not_to include('description')
|
36
|
-
expect(subject['paths']['/use_gfm_rc_detail']['get']['description']).to eql(nil)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe 'a parent less namespace' do
|
6
|
-
include_context 'namespace example'
|
7
|
-
|
8
|
-
before :all do
|
9
|
-
class ParentLessApi < Grape::API
|
10
|
-
prefix :api
|
11
|
-
mount TheApi::ParentLessNamespaceApi
|
12
|
-
add_swagger_documentation version: 'v1'
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def app
|
17
|
-
ParentLessApi
|
18
|
-
end
|
19
|
-
|
20
|
-
describe 'retrieves swagger-documentation on /swagger_doc' do
|
21
|
-
let(:route_name) { ':animal/:breed/queues/:queue_id/reservations' }
|
22
|
-
subject do
|
23
|
-
get '/api/swagger_doc.json'
|
24
|
-
JSON.parse(last_response.body)
|
25
|
-
end
|
26
|
-
|
27
|
-
context 'not raises error' do
|
28
|
-
specify do
|
29
|
-
expect(subject['tags']).to eql([{ 'name' => 'queues', 'description' => 'Operations about queues' }])
|
30
|
-
expect(subject['paths']['/api/{animal}/{breed}/queues/{queue_id}/reservations']['get']['operationId'])
|
31
|
-
.to eql('getApiAnimalBreedQueuesQueueIdReservations')
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context 'raises error' do
|
36
|
-
specify do
|
37
|
-
allow_any_instance_of(ParentLessApi)
|
38
|
-
.to receive(:extract_parent_route).with(route_name).and_return(':animal') # BUT IT'S NOT STUBBING, CAUSE IT'S A PRIVATE METHODS
|
39
|
-
expect { subject }.to raise_error NoMethodError
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
context 'ParentLessApi.extract_parent_route' do
|
44
|
-
specify do
|
45
|
-
expect(ParentLessApi.send(:extract_parent_route, route_name)).to eq('queues')
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|