grape 1.3.0 → 1.5.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.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +119 -1
  3. data/LICENSE +1 -1
  4. data/README.md +123 -29
  5. data/UPGRADING.md +265 -39
  6. data/lib/grape/api/instance.rb +32 -31
  7. data/lib/grape/api.rb +5 -5
  8. data/lib/grape/content_types.rb +34 -0
  9. data/lib/grape/dsl/callbacks.rb +1 -1
  10. data/lib/grape/dsl/helpers.rb +2 -1
  11. data/lib/grape/dsl/inside_route.rb +77 -43
  12. data/lib/grape/dsl/parameters.rb +12 -8
  13. data/lib/grape/dsl/routing.rb +12 -11
  14. data/lib/grape/dsl/validations.rb +18 -1
  15. data/lib/grape/eager_load.rb +1 -1
  16. data/lib/grape/endpoint.rb +8 -6
  17. data/lib/grape/exceptions/base.rb +0 -4
  18. data/lib/grape/exceptions/validation.rb +1 -1
  19. data/lib/grape/exceptions/validation_errors.rb +12 -13
  20. data/lib/grape/http/headers.rb +26 -0
  21. data/lib/grape/middleware/auth/base.rb +3 -3
  22. data/lib/grape/middleware/base.rb +4 -5
  23. data/lib/grape/middleware/error.rb +11 -13
  24. data/lib/grape/middleware/formatter.rb +3 -3
  25. data/lib/grape/middleware/stack.rb +10 -2
  26. data/lib/grape/middleware/versioner/header.rb +4 -4
  27. data/lib/grape/middleware/versioner/parse_media_type_patch.rb +2 -1
  28. data/lib/grape/middleware/versioner/path.rb +1 -1
  29. data/lib/grape/namespace.rb +12 -2
  30. data/lib/grape/path.rb +13 -3
  31. data/lib/grape/request.rb +13 -8
  32. data/lib/grape/router/attribute_translator.rb +26 -5
  33. data/lib/grape/router/pattern.rb +17 -16
  34. data/lib/grape/router/route.rb +5 -24
  35. data/lib/grape/router.rb +26 -30
  36. data/lib/grape/{serve_file → serve_stream}/file_body.rb +1 -1
  37. data/lib/grape/{serve_file → serve_stream}/sendfile_response.rb +1 -1
  38. data/lib/grape/{serve_file/file_response.rb → serve_stream/stream_response.rb} +8 -8
  39. data/lib/grape/util/base_inheritable.rb +15 -8
  40. data/lib/grape/util/cache.rb +20 -0
  41. data/lib/grape/util/lazy_object.rb +43 -0
  42. data/lib/grape/util/lazy_value.rb +1 -0
  43. data/lib/grape/util/reverse_stackable_values.rb +2 -0
  44. data/lib/grape/util/stackable_values.rb +7 -20
  45. data/lib/grape/validations/attributes_iterator.rb +8 -0
  46. data/lib/grape/validations/multiple_attributes_iterator.rb +1 -1
  47. data/lib/grape/validations/params_scope.rb +10 -8
  48. data/lib/grape/validations/single_attribute_iterator.rb +1 -1
  49. data/lib/grape/validations/types/array_coercer.rb +14 -5
  50. data/lib/grape/validations/types/build_coercer.rb +5 -8
  51. data/lib/grape/validations/types/custom_type_coercer.rb +16 -2
  52. data/lib/grape/validations/types/dry_type_coercer.rb +36 -1
  53. data/lib/grape/validations/types/file.rb +15 -12
  54. data/lib/grape/validations/types/invalid_value.rb +24 -0
  55. data/lib/grape/validations/types/json.rb +40 -36
  56. data/lib/grape/validations/types/primitive_coercer.rb +15 -6
  57. data/lib/grape/validations/types/set_coercer.rb +6 -4
  58. data/lib/grape/validations/types/variant_collection_coercer.rb +1 -1
  59. data/lib/grape/validations/types.rb +7 -9
  60. data/lib/grape/validations/validator_factory.rb +1 -1
  61. data/lib/grape/validations/validators/as.rb +1 -1
  62. data/lib/grape/validations/validators/base.rb +8 -8
  63. data/lib/grape/validations/validators/coerce.rb +11 -15
  64. data/lib/grape/validations/validators/default.rb +3 -5
  65. data/lib/grape/validations/validators/exactly_one_of.rb +4 -2
  66. data/lib/grape/validations/validators/except_values.rb +1 -1
  67. data/lib/grape/validations/validators/multiple_params_base.rb +2 -1
  68. data/lib/grape/validations/validators/regexp.rb +1 -1
  69. data/lib/grape/validations/validators/values.rb +1 -1
  70. data/lib/grape/version.rb +1 -1
  71. data/lib/grape.rb +5 -5
  72. data/spec/grape/api/instance_spec.rb +50 -0
  73. data/spec/grape/api_remount_spec.rb +9 -4
  74. data/spec/grape/api_spec.rb +82 -6
  75. data/spec/grape/dsl/inside_route_spec.rb +182 -33
  76. data/spec/grape/endpoint/declared_spec.rb +601 -0
  77. data/spec/grape/endpoint_spec.rb +0 -521
  78. data/spec/grape/entity_spec.rb +7 -1
  79. data/spec/grape/exceptions/validation_errors_spec.rb +2 -2
  80. data/spec/grape/integration/rack_sendfile_spec.rb +12 -8
  81. data/spec/grape/middleware/auth/strategies_spec.rb +1 -1
  82. data/spec/grape/middleware/error_spec.rb +1 -1
  83. data/spec/grape/middleware/formatter_spec.rb +3 -3
  84. data/spec/grape/middleware/stack_spec.rb +10 -0
  85. data/spec/grape/path_spec.rb +4 -4
  86. data/spec/grape/request_spec.rb +1 -1
  87. data/spec/grape/validations/instance_behaivour_spec.rb +1 -1
  88. data/spec/grape/validations/multiple_attributes_iterator_spec.rb +13 -3
  89. data/spec/grape/validations/params_scope_spec.rb +26 -0
  90. data/spec/grape/validations/single_attribute_iterator_spec.rb +17 -6
  91. data/spec/grape/validations/types/array_coercer_spec.rb +35 -0
  92. data/spec/grape/validations/types/primitive_coercer_spec.rb +135 -0
  93. data/spec/grape/validations/types/set_coercer_spec.rb +34 -0
  94. data/spec/grape/validations/types_spec.rb +1 -1
  95. data/spec/grape/validations/validators/coerce_spec.rb +366 -86
  96. data/spec/grape/validations/validators/default_spec.rb +170 -0
  97. data/spec/grape/validations/validators/exactly_one_of_spec.rb +12 -12
  98. data/spec/grape/validations/validators/except_values_spec.rb +1 -0
  99. data/spec/grape/validations/validators/values_spec.rb +1 -1
  100. data/spec/grape/validations_spec.rb +298 -30
  101. data/spec/integration/eager_load/eager_load_spec.rb +15 -0
  102. data/spec/shared/versioning_examples.rb +20 -20
  103. data/spec/spec_helper.rb +3 -10
  104. data/spec/support/chunks.rb +14 -0
  105. data/spec/support/eager_load.rb +19 -0
  106. data/spec/support/versioned_helpers.rb +4 -6
  107. metadata +27 -10
  108. data/lib/grape/util/content_types.rb +0 -28
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Grape uses autoload https://api.rubyonrails.org/classes/ActiveSupport/Autoload.html.
4
+ # When a class/module get added to the list, ActiveSupport doesn't check whether it really exists.
5
+ # This method loads all classes/modules defined via autoload to be sure only existing
6
+ # classes/modules were listed.
7
+ def eager_load!(scope = Grape)
8
+ # get modules
9
+ scope.constants.each do |const_name|
10
+ const = scope.const_get(const_name)
11
+
12
+ next unless const.respond_to?(:eager_load!)
13
+
14
+ const.eager_load!
15
+
16
+ # check its modules, they might need to be loaded as well.
17
+ eager_load!(const)
18
+ end
19
+ end
@@ -6,7 +6,7 @@ module Spec
6
6
  module Helpers
7
7
  # Returns the path with options[:version] prefixed if options[:using] is :path.
8
8
  # Returns normal path otherwise.
9
- def versioned_path(options = {})
9
+ def versioned_path(**options)
10
10
  case options[:using]
11
11
  when :path
12
12
  File.join('/', options[:prefix] || '', options[:version], options[:path])
@@ -43,13 +43,11 @@ module Spec
43
43
  end
44
44
  end
45
45
 
46
- def versioned_get(path, version_name, version_options = {})
47
- path = versioned_path(version_options.merge(version: version_name, path: path))
46
+ def versioned_get(path, version_name, **version_options)
47
+ path = versioned_path(**version_options.merge(version: version_name, path: path))
48
48
  headers = versioned_headers(**version_options.merge(version: version_name))
49
49
  params = {}
50
- if version_options[:using] == :param
51
- params = { version_options[:parameter] => version_name }
52
- end
50
+ params = { version_options[:parameter] => version_name } if version_options[:using] == :param
53
51
  get path, params, headers
54
52
  end
55
53
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Bleigh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-11 00:00:00.000000000 Z
11
+ date: 2021-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -113,6 +113,7 @@ files:
113
113
  - lib/grape/api/helpers.rb
114
114
  - lib/grape/api/instance.rb
115
115
  - lib/grape/config.rb
116
+ - lib/grape/content_types.rb
116
117
  - lib/grape/cookies.rb
117
118
  - lib/grape/dsl/api.rb
118
119
  - lib/grape/dsl/callbacks.rb
@@ -196,17 +197,18 @@ files:
196
197
  - lib/grape/router/attribute_translator.rb
197
198
  - lib/grape/router/pattern.rb
198
199
  - lib/grape/router/route.rb
199
- - lib/grape/serve_file/file_body.rb
200
- - lib/grape/serve_file/file_response.rb
201
- - lib/grape/serve_file/sendfile_response.rb
200
+ - lib/grape/serve_stream/file_body.rb
201
+ - lib/grape/serve_stream/sendfile_response.rb
202
+ - lib/grape/serve_stream/stream_response.rb
202
203
  - lib/grape/util/base_inheritable.rb
203
- - lib/grape/util/content_types.rb
204
+ - lib/grape/util/cache.rb
204
205
  - lib/grape/util/endpoint_configuration.rb
205
206
  - lib/grape/util/env.rb
206
207
  - lib/grape/util/inheritable_setting.rb
207
208
  - lib/grape/util/inheritable_values.rb
208
209
  - lib/grape/util/json.rb
209
210
  - lib/grape/util/lazy_block.rb
211
+ - lib/grape/util/lazy_object.rb
210
212
  - lib/grape/util/lazy_value.rb
211
213
  - lib/grape/util/registrable.rb
212
214
  - lib/grape/util/reverse_stackable_values.rb
@@ -225,6 +227,7 @@ files:
225
227
  - lib/grape/validations/types/custom_type_collection_coercer.rb
226
228
  - lib/grape/validations/types/dry_type_coercer.rb
227
229
  - lib/grape/validations/types/file.rb
230
+ - lib/grape/validations/types/invalid_value.rb
228
231
  - lib/grape/validations/types/json.rb
229
232
  - lib/grape/validations/types/multiple_type_coercer.rb
230
233
  - lib/grape/validations/types/primitive_coercer.rb
@@ -280,6 +283,7 @@ files:
280
283
  - spec/grape/dsl/routing_spec.rb
281
284
  - spec/grape/dsl/settings_spec.rb
282
285
  - spec/grape/dsl/validations_spec.rb
286
+ - spec/grape/endpoint/declared_spec.rb
283
287
  - spec/grape/endpoint_spec.rb
284
288
  - spec/grape/entity_spec.rb
285
289
  - spec/grape/exceptions/base_spec.rb
@@ -330,6 +334,9 @@ files:
330
334
  - spec/grape/validations/multiple_attributes_iterator_spec.rb
331
335
  - spec/grape/validations/params_scope_spec.rb
332
336
  - spec/grape/validations/single_attribute_iterator_spec.rb
337
+ - spec/grape/validations/types/array_coercer_spec.rb
338
+ - spec/grape/validations/types/primitive_coercer_spec.rb
339
+ - spec/grape/validations/types/set_coercer_spec.rb
333
340
  - spec/grape/validations/types_spec.rb
334
341
  - spec/grape/validations/validators/all_or_none_spec.rb
335
342
  - spec/grape/validations/validators/allow_blank_spec.rb
@@ -345,12 +352,15 @@ files:
345
352
  - spec/grape/validations/validators/values_spec.rb
346
353
  - spec/grape/validations/validators/zh-CN.yml
347
354
  - spec/grape/validations_spec.rb
355
+ - spec/integration/eager_load/eager_load_spec.rb
348
356
  - spec/integration/multi_json/json_spec.rb
349
357
  - spec/integration/multi_xml/xml_spec.rb
350
358
  - spec/shared/versioning_examples.rb
351
359
  - spec/spec_helper.rb
352
360
  - spec/support/basic_auth_encode_helpers.rb
361
+ - spec/support/chunks.rb
353
362
  - spec/support/content_type_helpers.rb
363
+ - spec/support/eager_load.rb
354
364
  - spec/support/endpoint_faker.rb
355
365
  - spec/support/file_streamer.rb
356
366
  - spec/support/integer_helpers.rb
@@ -360,9 +370,9 @@ licenses:
360
370
  - MIT
361
371
  metadata:
362
372
  bug_tracker_uri: https://github.com/ruby-grape/grape/issues
363
- changelog_uri: https://github.com/ruby-grape/grape/blob/v1.3.0/CHANGELOG.md
364
- documentation_uri: https://www.rubydoc.info/gems/grape/1.3.0
365
- source_code_uri: https://github.com/ruby-grape/grape/tree/v1.3.0
373
+ changelog_uri: https://github.com/ruby-grape/grape/blob/v1.5.2/CHANGELOG.md
374
+ documentation_uri: https://www.rubydoc.info/gems/grape/1.5.2
375
+ source_code_uri: https://github.com/ruby-grape/grape/tree/v1.5.2
366
376
  post_install_message:
367
377
  rdoc_options: []
368
378
  require_paths:
@@ -378,7 +388,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
378
388
  - !ruby/object:Gem::Version
379
389
  version: '0'
380
390
  requirements: []
381
- rubygems_version: 3.0.3
391
+ rubygems_version: 3.1.2
382
392
  signing_key:
383
393
  specification_version: 4
384
394
  summary: A simple Ruby framework for building REST-like APIs.
@@ -386,8 +396,10 @@ test_files:
386
396
  - spec/shared/versioning_examples.rb
387
397
  - spec/support/versioned_helpers.rb
388
398
  - spec/support/content_type_helpers.rb
399
+ - spec/support/eager_load.rb
389
400
  - spec/support/basic_auth_encode_helpers.rb
390
401
  - spec/support/file_streamer.rb
402
+ - spec/support/chunks.rb
391
403
  - spec/support/endpoint_faker.rb
392
404
  - spec/support/integer_helpers.rb
393
405
  - spec/grape/api/namespace_parameters_in_route_spec.rb
@@ -410,6 +422,9 @@ test_files:
410
422
  - spec/grape/api_remount_spec.rb
411
423
  - spec/grape/validations/types_spec.rb
412
424
  - spec/grape/validations/attributes_iterator_spec.rb
425
+ - spec/grape/validations/types/array_coercer_spec.rb
426
+ - spec/grape/validations/types/set_coercer_spec.rb
427
+ - spec/grape/validations/types/primitive_coercer_spec.rb
413
428
  - spec/grape/validations/validators/regexp_spec.rb
414
429
  - spec/grape/validations/validators/default_spec.rb
415
430
  - spec/grape/validations/validators/values_spec.rb
@@ -453,6 +468,7 @@ test_files:
453
468
  - spec/grape/integration/rack_spec.rb
454
469
  - spec/grape/integration/rack_sendfile_spec.rb
455
470
  - spec/grape/integration/global_namespace_function_spec.rb
471
+ - spec/grape/endpoint/declared_spec.rb
456
472
  - spec/grape/presenters/presenter_spec.rb
457
473
  - spec/grape/endpoint_spec.rb
458
474
  - spec/grape/api_spec.rb
@@ -488,6 +504,7 @@ test_files:
488
504
  - spec/grape/named_api_spec.rb
489
505
  - spec/grape/loading_spec.rb
490
506
  - spec/grape/request_spec.rb
507
+ - spec/integration/eager_load/eager_load_spec.rb
491
508
  - spec/integration/multi_xml/xml_spec.rb
492
509
  - spec/integration/multi_json/json_spec.rb
493
510
  - spec/spec_helper.rb
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module ContentTypes
5
- # Content types are listed in order of preference.
6
- CONTENT_TYPES = { # rubocop:disable Style/MutableConstant
7
- xml: 'application/xml',
8
- serializable_hash: 'application/json',
9
- json: 'application/json',
10
- binary: 'application/octet-stream',
11
- txt: 'text/plain'
12
- }
13
-
14
- def self.content_types_for_settings(settings)
15
- return if settings.blank?
16
-
17
- settings.each_with_object({}) { |value, result| result.merge!(value) }
18
- end
19
-
20
- def self.content_types_for(from_settings)
21
- if from_settings.present?
22
- from_settings
23
- else
24
- Grape::ContentTypes::CONTENT_TYPES
25
- end
26
- end
27
- end
28
- end