grape-swagger 1.4.2 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +6 -0
  3. data/.github/workflows/ci.yml +45 -0
  4. data/.rubocop.yml +8 -1
  5. data/.rubocop_todo.yml +31 -11
  6. data/CHANGELOG.md +41 -1
  7. data/CONTRIBUTING.md +1 -1
  8. data/Gemfile +6 -5
  9. data/README.md +73 -8
  10. data/UPGRADING.md +11 -0
  11. data/example/config.ru +2 -2
  12. data/grape-swagger.gemspec +3 -2
  13. data/lib/grape-swagger/doc_methods/build_model_definition.rb +1 -20
  14. data/lib/grape-swagger/doc_methods/move_params.rb +7 -8
  15. data/lib/grape-swagger/doc_methods/parse_params.rb +3 -1
  16. data/lib/grape-swagger/endpoint.rb +49 -6
  17. data/lib/grape-swagger/rake/oapi_tasks.rb +37 -17
  18. data/lib/grape-swagger/version.rb +1 -1
  19. data/lib/grape-swagger.rb +2 -2
  20. data/spec/issues/579_align_put_post_parameters_spec.rb +5 -5
  21. data/spec/issues/677_consumes_produces_add_swagger_documentation_options_spec.rb +100 -0
  22. data/spec/issues/751_deeply_nested_objects_spec.rb +2 -2
  23. data/spec/issues/847_route_param_options_spec.rb +37 -0
  24. data/spec/lib/move_params_spec.rb +55 -41
  25. data/spec/lib/oapi_tasks_spec.rb +17 -10
  26. data/spec/spec_helper.rb +0 -4
  27. data/spec/swagger_v2/api_documentation_spec.rb +1 -15
  28. data/spec/swagger_v2/api_swagger_v2_additional_properties_spec.rb +1 -1
  29. data/spec/swagger_v2/api_swagger_v2_param_type_body_nested_spec.rb +7 -7
  30. data/spec/swagger_v2/api_swagger_v2_param_type_body_spec.rb +7 -7
  31. data/spec/swagger_v2/api_swagger_v2_response_with_models_spec.rb +4 -2
  32. data/spec/swagger_v2/param_values_spec.rb +1 -1
  33. metadata +10 -114
  34. data/.github/workflows/rubocop.yml +0 -26
  35. data/.github/workflows/ruby.yml +0 -30
  36. data/.ruby-gemset +0 -1
@@ -37,7 +37,7 @@ describe 'parsing additional_parameters' do
37
37
  specify do
38
38
  expect(subject.dig('paths', '/things', 'post', 'parameters')).to eql(
39
39
  [
40
- { 'name' => 'Things', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/postThings' } }
40
+ { 'name' => 'postThings', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/postThings' } }
41
41
  ]
42
42
  )
43
43
  end
@@ -136,7 +136,7 @@ describe 'moving body/formData Params to definitions' do
136
136
  specify do
137
137
  expect(subject['paths']['/simple_nested_params/in_body']['post']['parameters']).to eql(
138
138
  [
139
- { 'name' => 'SimpleNestedParamsInBody', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/postSimpleNestedParamsInBody' } }
139
+ { 'name' => 'postSimpleNestedParamsInBody', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/postSimpleNestedParamsInBody' } }
140
140
  ]
141
141
  )
142
142
  end
@@ -177,13 +177,13 @@ describe 'moving body/formData Params to definitions' do
177
177
  expect(subject['paths']['/simple_nested_params/in_body/{id}']['put']['parameters']).to eql(
178
178
  [
179
179
  { 'in' => 'path', 'name' => 'id', 'type' => 'integer', 'format' => 'int32', 'required' => true },
180
- { 'name' => 'SimpleNestedParamsInBody', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/putSimpleNestedParamsInBody' } }
180
+ { 'name' => 'putSimpleNestedParamsInBodyId', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/putSimpleNestedParamsInBodyId' } }
181
181
  ]
182
182
  )
183
183
  end
184
184
 
185
185
  specify do
186
- expect(subject['definitions']['putSimpleNestedParamsInBody']).to eql(
186
+ expect(subject['definitions']['putSimpleNestedParamsInBodyId']).to eql(
187
187
  'type' => 'object',
188
188
  'properties' => {
189
189
  'name' => { 'type' => 'string', 'description' => 'name' },
@@ -214,7 +214,7 @@ describe 'moving body/formData Params to definitions' do
214
214
  expect(subject['paths']['/multiple_nested_params/in_body']['post']['parameters']).to eql(
215
215
  [
216
216
  {
217
- 'name' => 'MultipleNestedParamsInBody',
217
+ 'name' => 'postMultipleNestedParamsInBody',
218
218
  'in' => 'body',
219
219
  'required' => true,
220
220
  'schema' => { '$ref' => '#/definitions/postMultipleNestedParamsInBody' }
@@ -267,13 +267,13 @@ describe 'moving body/formData Params to definitions' do
267
267
  expect(subject['paths']['/multiple_nested_params/in_body/{id}']['put']['parameters']).to eql(
268
268
  [
269
269
  { 'in' => 'path', 'name' => 'id', 'type' => 'integer', 'format' => 'int32', 'required' => true },
270
- { 'name' => 'MultipleNestedParamsInBody', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/putMultipleNestedParamsInBody' } }
270
+ { 'name' => 'putMultipleNestedParamsInBodyId', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/putMultipleNestedParamsInBodyId' } }
271
271
  ]
272
272
  )
273
273
  end
274
274
 
275
275
  specify do
276
- expect(subject['definitions']['putMultipleNestedParamsInBody']).to eql(
276
+ expect(subject['definitions']['putMultipleNestedParamsInBodyId']).to eql(
277
277
  'type' => 'object',
278
278
  'properties' => {
279
279
  'name' => { 'type' => 'string', 'description' => 'name' },
@@ -313,7 +313,7 @@ describe 'moving body/formData Params to definitions' do
313
313
  specify do
314
314
  expect(subject['paths']['/nested_params_array/in_body']['post']['parameters']).to eql(
315
315
  [
316
- { 'name' => 'NestedParamsArrayInBody', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/postNestedParamsArrayInBody' } }
316
+ { 'name' => 'postNestedParamsArrayInBody', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/postNestedParamsArrayInBody' } }
317
317
  ]
318
318
  )
319
319
  end
@@ -85,7 +85,7 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
85
85
  specify do
86
86
  expect(subject['paths']['/wo_entities/in_body']['post']['parameters']).to eql(
87
87
  [
88
- { 'name' => 'WoEntitiesInBody', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/postWoEntitiesInBody' } }
88
+ { 'name' => 'postWoEntitiesInBody', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/postWoEntitiesInBody' } }
89
89
  ]
90
90
  )
91
91
  end
@@ -107,13 +107,13 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
107
107
  expect(subject['paths']['/wo_entities/in_body/{key}']['put']['parameters']).to eql(
108
108
  [
109
109
  { 'in' => 'path', 'name' => 'key', 'type' => 'integer', 'format' => 'int32', 'required' => true },
110
- { 'name' => 'WoEntitiesInBody', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/putWoEntitiesInBody' } }
110
+ { 'name' => 'putWoEntitiesInBodyKey', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/putWoEntitiesInBodyKey' } }
111
111
  ]
112
112
  )
113
113
  end
114
114
 
115
115
  specify do
116
- expect(subject['definitions']['putWoEntitiesInBody']).to eql(
116
+ expect(subject['definitions']['putWoEntitiesInBodyKey']).to eql(
117
117
  'description' => 'put in body /wo entity',
118
118
  'type' => 'object',
119
119
  'properties' => {
@@ -134,7 +134,7 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
134
134
  specify do
135
135
  expect(subject['paths']['/with_entities/in_body']['post']['parameters']).to eql(
136
136
  [
137
- { 'name' => 'WithEntitiesInBody', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/postWithEntitiesInBody' } }
137
+ { 'name' => 'postWithEntitiesInBody', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/postWithEntitiesInBody' } }
138
138
  ]
139
139
  )
140
140
  end
@@ -154,13 +154,13 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
154
154
  expect(subject['paths']['/with_entities/in_body/{id}']['put']['parameters']).to eql(
155
155
  [
156
156
  { 'in' => 'path', 'name' => 'id', 'type' => 'integer', 'format' => 'int32', 'required' => true },
157
- { 'name' => 'WithEntitiesInBody', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/putWithEntitiesInBody' } }
157
+ { 'name' => 'putWithEntitiesInBodyId', 'in' => 'body', 'required' => true, 'schema' => { '$ref' => '#/definitions/putWithEntitiesInBodyId' } }
158
158
  ]
159
159
  )
160
160
  end
161
161
 
162
162
  specify do
163
- expect(subject['definitions']['putWithEntitiesInBody']).to eql(
163
+ expect(subject['definitions']['putWithEntitiesInBodyId']).to eql(
164
164
  'type' => 'object',
165
165
  'properties' => {
166
166
  'name' => { 'type' => 'string', 'description' => 'name' }
@@ -174,7 +174,7 @@ describe 'setting of param type, such as `query`, `path`, `formData`, `body`, `h
174
174
  let(:request_parameters_definition) do
175
175
  [
176
176
  {
177
- 'name' => 'WithEntityParam',
177
+ 'name' => 'postWithEntityParam',
178
178
  'in' => 'body',
179
179
  'required' => true,
180
180
  'schema' => {
@@ -15,7 +15,8 @@ describe 'response' do
15
15
  failure: [
16
16
  { code: 400, message: 'NotFound', model: '' },
17
17
  { code: 404, message: 'BadRequest', model: Entities::ApiError }
18
- ]
18
+ ],
19
+ default_response: { message: 'Error', model: Entities::ApiError }
19
20
  get '/use-response' do
20
21
  { 'declared_params' => declared(params) }
21
22
  end
@@ -42,7 +43,8 @@ describe 'response' do
42
43
  'responses' => {
43
44
  '200' => { 'description' => 'This returns something', 'schema' => { '$ref' => '#/definitions/UseResponse' } },
44
45
  '400' => { 'description' => 'NotFound' },
45
- '404' => { 'description' => 'BadRequest', 'schema' => { '$ref' => '#/definitions/ApiError' } }
46
+ '404' => { 'description' => 'BadRequest', 'schema' => { '$ref' => '#/definitions/ApiError' } },
47
+ 'default' => { 'description' => 'Error', 'schema' => { '$ref' => '#/definitions/ApiError' } }
46
48
  },
47
49
  'tags' => ['use-response'],
48
50
  'operationId' => 'getUseResponse'
@@ -141,7 +141,7 @@ describe 'Convert values to enum for float range and not arrays inside a proc',
141
141
  'name' => 'letter',
142
142
  'type' => 'string',
143
143
  'required' => true,
144
- 'enum' => 'string'
144
+ 'enum' => %w[string]
145
145
  }]
146
146
  end
147
147
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-swagger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.2
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - LeFnord
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-10-22 00:00:00.000000000 Z
12
+ date: 2023-03-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: grape
@@ -35,13 +35,11 @@ extra_rdoc_files: []
35
35
  files:
36
36
  - ".coveralls.yml"
37
37
  - ".github/dependabot.yml"
38
- - ".github/workflows/rubocop.yml"
39
- - ".github/workflows/ruby.yml"
38
+ - ".github/workflows/ci.yml"
40
39
  - ".gitignore"
41
40
  - ".rspec"
42
41
  - ".rubocop.yml"
43
42
  - ".rubocop_todo.yml"
44
- - ".ruby-gemset"
45
43
  - CHANGELOG.md
46
44
  - CONTRIBUTING.md
47
45
  - Dangerfile
@@ -97,12 +95,14 @@ files:
97
95
  - spec/issues/587_range_parameter_delimited_by_dash_spec.rb
98
96
  - spec/issues/605_root_route_documentation_spec.rb
99
97
  - spec/issues/650_params_array_spec.rb
98
+ - spec/issues/677_consumes_produces_add_swagger_documentation_options_spec.rb
100
99
  - spec/issues/680_keep_204_error_schemas_spec.rb
101
100
  - spec/issues/751_deeply_nested_objects_spec.rb
102
101
  - spec/issues/776_multiple_presents_spec.rb
103
102
  - spec/issues/784_extensions_on_params_spec.rb
104
103
  - spec/issues/809_utf8_routes_spec.rb
105
104
  - spec/issues/832_array_hash_float_decimal_spec.rb
105
+ - spec/issues/847_route_param_options_spec.rb
106
106
  - spec/lib/data_type_spec.rb
107
107
  - spec/lib/endpoint/params_parser_spec.rb
108
108
  - spec/lib/endpoint_spec.rb
@@ -189,7 +189,8 @@ files:
189
189
  homepage: https://github.com/ruby-grape/grape-swagger
190
190
  licenses:
191
191
  - MIT
192
- metadata: {}
192
+ metadata:
193
+ rubygems_mfa_required: 'true'
193
194
  post_install_message:
194
195
  rdoc_options: []
195
196
  require_paths:
@@ -198,121 +199,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
198
199
  requirements:
199
200
  - - ">="
200
201
  - !ruby/object:Gem::Version
201
- version: '2.5'
202
+ version: '2.7'
202
203
  required_rubygems_version: !ruby/object:Gem::Requirement
203
204
  requirements:
204
205
  - - ">="
205
206
  - !ruby/object:Gem::Version
206
207
  version: '0'
207
208
  requirements: []
208
- rubygems_version: 3.2.22
209
+ rubygems_version: 3.4.7
209
210
  signing_key:
210
211
  specification_version: 4
211
212
  summary: Add auto generated documentation to your Grape API that can be displayed
212
213
  with Swagger.
213
- test_files:
214
- - spec/issues/267_nested_namespaces.rb
215
- - spec/issues/403_versions_spec.rb
216
- - spec/issues/427_entity_as_string_spec.rb
217
- - spec/issues/430_entity_definitions_spec.rb
218
- - spec/issues/532_allow_custom_format_spec.rb
219
- - spec/issues/533_specify_status_code_spec.rb
220
- - spec/issues/537_enum_values_spec.rb
221
- - spec/issues/539_array_post_body_spec.rb
222
- - spec/issues/542_array_of_type_in_post_body_spec.rb
223
- - spec/issues/553_align_array_put_post_params_spec.rb
224
- - spec/issues/572_array_post_body_spec.rb
225
- - spec/issues/579_align_put_post_parameters_spec.rb
226
- - spec/issues/582_file_response_spec.rb
227
- - spec/issues/587_range_parameter_delimited_by_dash_spec.rb
228
- - spec/issues/605_root_route_documentation_spec.rb
229
- - spec/issues/650_params_array_spec.rb
230
- - spec/issues/680_keep_204_error_schemas_spec.rb
231
- - spec/issues/751_deeply_nested_objects_spec.rb
232
- - spec/issues/776_multiple_presents_spec.rb
233
- - spec/issues/784_extensions_on_params_spec.rb
234
- - spec/issues/809_utf8_routes_spec.rb
235
- - spec/issues/832_array_hash_float_decimal_spec.rb
236
- - spec/lib/data_type_spec.rb
237
- - spec/lib/endpoint/params_parser_spec.rb
238
- - spec/lib/endpoint_spec.rb
239
- - spec/lib/extensions_spec.rb
240
- - spec/lib/format_data_spec.rb
241
- - spec/lib/model_parsers_spec.rb
242
- - spec/lib/move_params_spec.rb
243
- - spec/lib/oapi_tasks_spec.rb
244
- - spec/lib/operation_id_spec.rb
245
- - spec/lib/optional_object_spec.rb
246
- - spec/lib/parse_params_spec.rb
247
- - spec/lib/path_string_spec.rb
248
- - spec/lib/produces_consumes_spec.rb
249
- - spec/lib/tag_name_description_spec.rb
250
- - spec/lib/version_spec.rb
251
- - spec/spec_helper.rb
252
- - spec/support/empty_model_parser.rb
253
- - spec/support/grape_version.rb
254
- - spec/support/mock_parser.rb
255
- - spec/support/model_parsers/entity_parser.rb
256
- - spec/support/model_parsers/mock_parser.rb
257
- - spec/support/model_parsers/representable_parser.rb
258
- - spec/support/namespace_tags.rb
259
- - spec/support/the_paths_definitions.rb
260
- - spec/swagger_v2/api_documentation_spec.rb
261
- - spec/swagger_v2/api_swagger_v2_additional_properties_spec.rb
262
- - spec/swagger_v2/api_swagger_v2_body_definitions_spec.rb
263
- - spec/swagger_v2/api_swagger_v2_definitions-models_spec.rb
264
- - spec/swagger_v2/api_swagger_v2_detail_spec.rb
265
- - spec/swagger_v2/api_swagger_v2_extensions_spec.rb
266
- - spec/swagger_v2/api_swagger_v2_format-content_type_spec.rb
267
- - spec/swagger_v2/api_swagger_v2_global_configuration_spec.rb
268
- - spec/swagger_v2/api_swagger_v2_hash_and_array_spec.rb
269
- - spec/swagger_v2/api_swagger_v2_headers_spec.rb
270
- - spec/swagger_v2/api_swagger_v2_hide_documentation_path_spec.rb
271
- - spec/swagger_v2/api_swagger_v2_hide_param_spec.rb
272
- - spec/swagger_v2/api_swagger_v2_ignore_defaults_spec.rb
273
- - spec/swagger_v2/api_swagger_v2_mounted_spec.rb
274
- - spec/swagger_v2/api_swagger_v2_param_type_body_nested_spec.rb
275
- - spec/swagger_v2/api_swagger_v2_param_type_body_spec.rb
276
- - spec/swagger_v2/api_swagger_v2_param_type_spec.rb
277
- - spec/swagger_v2/api_swagger_v2_request_params_fix_spec.rb
278
- - spec/swagger_v2/api_swagger_v2_response_spec.rb
279
- - spec/swagger_v2/api_swagger_v2_response_with_examples_spec.rb
280
- - spec/swagger_v2/api_swagger_v2_response_with_headers_spec.rb
281
- - spec/swagger_v2/api_swagger_v2_response_with_models_spec.rb
282
- - spec/swagger_v2/api_swagger_v2_response_with_root_spec.rb
283
- - spec/swagger_v2/api_swagger_v2_spec.rb
284
- - spec/swagger_v2/api_swagger_v2_status_codes_spec.rb
285
- - spec/swagger_v2/api_swagger_v2_type-format_spec.rb
286
- - spec/swagger_v2/boolean_params_spec.rb
287
- - spec/swagger_v2/default_api_spec.rb
288
- - spec/swagger_v2/deprecated_field_spec.rb
289
- - spec/swagger_v2/description_not_initialized_spec.rb
290
- - spec/swagger_v2/endpoint_versioned_path_spec.rb
291
- - spec/swagger_v2/errors_spec.rb
292
- - spec/swagger_v2/float_api_spec.rb
293
- - spec/swagger_v2/form_params_spec.rb
294
- - spec/swagger_v2/grape-swagger_spec.rb
295
- - spec/swagger_v2/guarded_endpoint_spec.rb
296
- - spec/swagger_v2/hide_api_spec.rb
297
- - spec/swagger_v2/host_spec.rb
298
- - spec/swagger_v2/inheritance_and_discriminator_spec.rb
299
- - spec/swagger_v2/mount_override_api_spec.rb
300
- - spec/swagger_v2/mounted_target_class_spec.rb
301
- - spec/swagger_v2/namespace_tags_prefix_spec.rb
302
- - spec/swagger_v2/namespace_tags_spec.rb
303
- - spec/swagger_v2/namespaced_api_spec.rb
304
- - spec/swagger_v2/nicknamed_api_spec.rb
305
- - spec/swagger_v2/operation_id_api_spec.rb
306
- - spec/swagger_v2/param_multi_type_spec.rb
307
- - spec/swagger_v2/param_type_spec.rb
308
- - spec/swagger_v2/param_values_spec.rb
309
- - spec/swagger_v2/params_array_collection_format_spec.rb
310
- - spec/swagger_v2/params_array_spec.rb
311
- - spec/swagger_v2/params_example_spec.rb
312
- - spec/swagger_v2/params_hash_spec.rb
313
- - spec/swagger_v2/params_nested_spec.rb
314
- - spec/swagger_v2/parent_less_namespace_spec.rb
315
- - spec/swagger_v2/reference_entity_spec.rb
316
- - spec/swagger_v2/security_requirement_spec.rb
317
- - spec/swagger_v2/simple_mounted_api_spec.rb
318
- - spec/version_spec.rb
214
+ test_files: []
@@ -1,26 +0,0 @@
1
- name: Rubocop
2
-
3
- on:
4
- push:
5
- branches:
6
- - '*'
7
- pull_request:
8
- branches:
9
- - '*'
10
-
11
- jobs:
12
- rubocop:
13
- name: Rubocop
14
- runs-on: ubuntu-latest
15
- steps:
16
- - uses: actions/checkout@v2
17
- - uses: actions/setup-ruby@v1
18
- with:
19
- ruby-version: '3.0'
20
- - run: gem install rubocop --no-doc
21
- - run: rubocop --format progress --format json --out rubocop.json
22
- id: rubocop
23
- - uses: duderman/rubocop-annotate-action@v0.1.0
24
- with:
25
- path: rubocop.json
26
- if: ${{ failure() }}
@@ -1,30 +0,0 @@
1
- name: Ruby
2
-
3
- on:
4
- push:
5
- branches:
6
- - '*'
7
- pull_request:
8
- branches:
9
- - '*'
10
-
11
- jobs:
12
- rspec:
13
- runs-on: ubuntu-latest
14
- strategy:
15
- matrix:
16
- ruby-version: ['2.6', '2.7', '3.0', 'head']
17
- grape-version: [1.6.0, 1.5.3]
18
- model-parser: [grape-swagger-entity, grape-swagger-representable, '']
19
-
20
- steps:
21
- - uses: actions/checkout@v2
22
- - name: Set up Ruby
23
- uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
24
- with:
25
- ruby-version: ${{ matrix.ruby-version }}
26
- GRAPE_VERSION: ${{ matrix.grape-version }}
27
- MODEL_PARSER: ${{ matrix.model-parser }}
28
- bundler-cache: true
29
- - name: Run rspec
30
- run: bundle exec rspec
data/.ruby-gemset DELETED
@@ -1 +0,0 @@
1
- grape-swagger