grape 3.2.1 → 3.3.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.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +80 -0
  3. data/README.md +116 -43
  4. data/UPGRADING.md +336 -1
  5. data/grape.gemspec +5 -5
  6. data/lib/grape/api/instance.rb +7 -7
  7. data/lib/grape/api.rb +22 -25
  8. data/lib/grape/cookies.rb +2 -6
  9. data/lib/grape/declared_params_handler.rb +48 -50
  10. data/lib/grape/dsl/callbacks.rb +9 -3
  11. data/lib/grape/dsl/desc.rb +8 -2
  12. data/lib/grape/dsl/entity.rb +88 -0
  13. data/lib/grape/dsl/helpers.rb +27 -7
  14. data/lib/grape/dsl/inside_route.rb +38 -129
  15. data/lib/grape/dsl/logger.rb +3 -5
  16. data/lib/grape/dsl/parameters.rb +32 -38
  17. data/lib/grape/dsl/request_response.rb +53 -48
  18. data/lib/grape/dsl/rescue_options.rb +24 -0
  19. data/lib/grape/dsl/routing.rb +51 -35
  20. data/lib/grape/dsl/settings.rb +14 -8
  21. data/lib/grape/dsl/version_options.rb +23 -0
  22. data/lib/grape/endpoint/options.rb +19 -0
  23. data/lib/grape/endpoint.rb +96 -68
  24. data/lib/grape/env.rb +1 -3
  25. data/lib/grape/error_formatter/base.rb +23 -20
  26. data/lib/grape/error_formatter/json.rb +8 -4
  27. data/lib/grape/error_formatter/txt.rb +10 -10
  28. data/lib/grape/exceptions/base.rb +3 -1
  29. data/lib/grape/exceptions/error_response.rb +45 -0
  30. data/lib/grape/exceptions/internal_server_error.rb +16 -0
  31. data/lib/grape/exceptions/validation.rb +14 -0
  32. data/lib/grape/exceptions/validation_array_errors.rb +4 -0
  33. data/lib/grape/exceptions/validation_errors.rb +12 -20
  34. data/lib/grape/formatter/serializable_hash.rb +5 -9
  35. data/lib/grape/json.rb +38 -2
  36. data/lib/grape/locale/en.yml +2 -0
  37. data/lib/grape/middleware/auth/base.rb +2 -3
  38. data/lib/grape/middleware/auth/dsl.rb +23 -8
  39. data/lib/grape/middleware/base.rb +22 -33
  40. data/lib/grape/middleware/deprecated_options_hash_access.rb +19 -0
  41. data/lib/grape/middleware/error.rb +152 -62
  42. data/lib/grape/middleware/formatter.rb +66 -50
  43. data/lib/grape/middleware/precomputed_content_types.rb +46 -0
  44. data/lib/grape/middleware/stack.rb +5 -6
  45. data/lib/grape/middleware/versioner/accept_version_header.rb +1 -1
  46. data/lib/grape/middleware/versioner/base.rb +34 -38
  47. data/lib/grape/middleware/versioner/header.rb +3 -5
  48. data/lib/grape/middleware/versioner/path.rb +8 -3
  49. data/lib/grape/namespace.rb +3 -3
  50. data/lib/grape/params_builder/hash_with_indifferent_access.rb +1 -1
  51. data/lib/grape/parser/json.rb +1 -1
  52. data/lib/grape/path.rb +14 -17
  53. data/lib/grape/request.rb +15 -8
  54. data/lib/grape/router/mustermann_pattern.rb +44 -0
  55. data/lib/grape/router/pattern.rb +6 -10
  56. data/lib/grape/router.rb +28 -42
  57. data/lib/grape/serve_stream/file_body.rb +1 -0
  58. data/lib/grape/serve_stream/sendfile_response.rb +3 -5
  59. data/lib/grape/serve_stream/stream_response.rb +1 -0
  60. data/lib/grape/testing.rb +33 -0
  61. data/lib/grape/util/base_inheritable.rb +13 -16
  62. data/lib/grape/util/inheritable_setting.rb +44 -27
  63. data/lib/grape/util/inheritable_values.rb +7 -3
  64. data/lib/grape/util/lazy/base.rb +16 -0
  65. data/lib/grape/util/lazy/block.rb +2 -9
  66. data/lib/grape/util/lazy/value.rb +2 -9
  67. data/lib/grape/util/lazy/value_enumerable.rb +13 -16
  68. data/lib/grape/util/media_type.rb +1 -4
  69. data/lib/grape/util/path_normalizer.rb +34 -0
  70. data/lib/grape/util/registry.rb +1 -1
  71. data/lib/grape/util/stackable_values.rb +11 -8
  72. data/lib/grape/validations/attributes_iterator.rb +13 -13
  73. data/lib/grape/validations/coerce_options.rb +21 -0
  74. data/lib/grape/validations/oneof_collector.rb +39 -0
  75. data/lib/grape/validations/param_scope_tracker.rb +14 -9
  76. data/lib/grape/validations/params_documentation.rb +25 -23
  77. data/lib/grape/validations/params_scope.rb +54 -172
  78. data/lib/grape/validations/shared_options.rb +19 -0
  79. data/lib/grape/validations/types/array_coercer.rb +2 -2
  80. data/lib/grape/validations/types/custom_type_coercer.rb +41 -85
  81. data/lib/grape/validations/types/custom_type_collection_coercer.rb +1 -1
  82. data/lib/grape/validations/types/dry_type_coercer.rb +3 -3
  83. data/lib/grape/validations/types/primitive_coercer.rb +10 -5
  84. data/lib/grape/validations/types/set_coercer.rb +1 -1
  85. data/lib/grape/validations/types/variant_collection_coercer.rb +8 -0
  86. data/lib/grape/validations/types.rb +23 -30
  87. data/lib/grape/validations/validations_spec.rb +149 -0
  88. data/lib/grape/validations/validators/all_or_none_of_validator.rb +1 -1
  89. data/lib/grape/validations/validators/at_least_one_of_validator.rb +1 -1
  90. data/lib/grape/validations/validators/base.rb +39 -22
  91. data/lib/grape/validations/validators/coerce_validator.rb +5 -3
  92. data/lib/grape/validations/validators/default_validator.rb +7 -8
  93. data/lib/grape/validations/validators/except_values_validator.rb +3 -2
  94. data/lib/grape/validations/validators/length_validator.rb +1 -1
  95. data/lib/grape/validations/validators/multiple_params_base.rb +10 -7
  96. data/lib/grape/validations/validators/oneof_validator.rb +49 -0
  97. data/lib/grape/validations/validators/values_validator.rb +5 -5
  98. data/lib/grape/version.rb +1 -1
  99. data/lib/grape/xml.rb +8 -1
  100. data/lib/grape.rb +6 -6
  101. metadata +34 -18
  102. data/lib/grape/middleware/globals.rb +0 -14
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.1
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Bleigh
@@ -29,14 +29,14 @@ dependencies:
29
29
  requirements:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: '0'
32
+ version: '1.0'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '0'
39
+ version: '1.0'
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: dry-types
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -52,47 +52,47 @@ dependencies:
52
52
  - !ruby/object:Gem::Version
53
53
  version: '1.1'
54
54
  - !ruby/object:Gem::Dependency
55
- name: mustermann-grape
55
+ name: mustermann
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - "~>"
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: 1.1.0
60
+ version: '4.0'
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - "~>"
65
+ - - ">="
66
66
  - !ruby/object:Gem::Version
67
- version: 1.1.0
67
+ version: '4.0'
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: rack
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: '2'
74
+ version: 2.2.4
75
75
  type: :runtime
76
76
  prerelease: false
77
77
  version_requirements: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - ">="
80
80
  - !ruby/object:Gem::Version
81
- version: '2'
81
+ version: 2.2.4
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: zeitwerk
84
84
  requirement: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - ">="
87
87
  - !ruby/object:Gem::Version
88
- version: '0'
88
+ version: '2.6'
89
89
  type: :runtime
90
90
  prerelease: false
91
91
  version_requirements: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - ">="
94
94
  - !ruby/object:Gem::Version
95
- version: '0'
95
+ version: '2.6'
96
96
  description: A Ruby framework for rapid API development with great conventions.
97
97
  email:
98
98
  - michael@intridea.com
@@ -117,6 +117,7 @@ files:
117
117
  - lib/grape/dsl/callbacks.rb
118
118
  - lib/grape/dsl/declared.rb
119
119
  - lib/grape/dsl/desc.rb
120
+ - lib/grape/dsl/entity.rb
120
121
  - lib/grape/dsl/headers.rb
121
122
  - lib/grape/dsl/helpers.rb
122
123
  - lib/grape/dsl/inside_route.rb
@@ -124,10 +125,13 @@ files:
124
125
  - lib/grape/dsl/middleware.rb
125
126
  - lib/grape/dsl/parameters.rb
126
127
  - lib/grape/dsl/request_response.rb
128
+ - lib/grape/dsl/rescue_options.rb
127
129
  - lib/grape/dsl/routing.rb
128
130
  - lib/grape/dsl/settings.rb
129
131
  - lib/grape/dsl/validations.rb
132
+ - lib/grape/dsl/version_options.rb
130
133
  - lib/grape/endpoint.rb
134
+ - lib/grape/endpoint/options.rb
131
135
  - lib/grape/env.rb
132
136
  - lib/grape/error_formatter.rb
133
137
  - lib/grape/error_formatter/base.rb
@@ -136,7 +140,9 @@ files:
136
140
  - lib/grape/error_formatter/txt.rb
137
141
  - lib/grape/error_formatter/xml.rb
138
142
  - lib/grape/exceptions/base.rb
143
+ - lib/grape/exceptions/error_response.rb
139
144
  - lib/grape/exceptions/incompatible_option_values.rb
145
+ - lib/grape/exceptions/internal_server_error.rb
140
146
  - lib/grape/exceptions/invalid_accept_header.rb
141
147
  - lib/grape/exceptions/invalid_formatter.rb
142
148
  - lib/grape/exceptions/invalid_message_body.rb
@@ -170,10 +176,11 @@ files:
170
176
  - lib/grape/middleware/auth/strategies.rb
171
177
  - lib/grape/middleware/auth/strategy_info.rb
172
178
  - lib/grape/middleware/base.rb
179
+ - lib/grape/middleware/deprecated_options_hash_access.rb
173
180
  - lib/grape/middleware/error.rb
174
181
  - lib/grape/middleware/filter.rb
175
182
  - lib/grape/middleware/formatter.rb
176
- - lib/grape/middleware/globals.rb
183
+ - lib/grape/middleware/precomputed_content_types.rb
177
184
  - lib/grape/middleware/stack.rb
178
185
  - lib/grape/middleware/versioner.rb
179
186
  - lib/grape/middleware/versioner/accept_version_header.rb
@@ -198,11 +205,13 @@ files:
198
205
  - lib/grape/router.rb
199
206
  - lib/grape/router/base_route.rb
200
207
  - lib/grape/router/greedy_route.rb
208
+ - lib/grape/router/mustermann_pattern.rb
201
209
  - lib/grape/router/pattern.rb
202
210
  - lib/grape/router/route.rb
203
211
  - lib/grape/serve_stream/file_body.rb
204
212
  - lib/grape/serve_stream/sendfile_response.rb
205
213
  - lib/grape/serve_stream/stream_response.rb
214
+ - lib/grape/testing.rb
206
215
  - lib/grape/util/api_description.rb
207
216
  - lib/grape/util/base_inheritable.rb
208
217
  - lib/grape/util/cache.rb
@@ -211,23 +220,28 @@ files:
211
220
  - lib/grape/util/header.rb
212
221
  - lib/grape/util/inheritable_setting.rb
213
222
  - lib/grape/util/inheritable_values.rb
223
+ - lib/grape/util/lazy/base.rb
214
224
  - lib/grape/util/lazy/block.rb
215
225
  - lib/grape/util/lazy/value.rb
216
226
  - lib/grape/util/lazy/value_array.rb
217
227
  - lib/grape/util/lazy/value_enumerable.rb
218
228
  - lib/grape/util/lazy/value_hash.rb
219
229
  - lib/grape/util/media_type.rb
230
+ - lib/grape/util/path_normalizer.rb
220
231
  - lib/grape/util/registry.rb
221
232
  - lib/grape/util/reverse_stackable_values.rb
222
233
  - lib/grape/util/stackable_values.rb
223
234
  - lib/grape/util/translation.rb
224
235
  - lib/grape/validations.rb
225
236
  - lib/grape/validations/attributes_iterator.rb
237
+ - lib/grape/validations/coerce_options.rb
226
238
  - lib/grape/validations/contract_scope.rb
227
239
  - lib/grape/validations/multiple_attributes_iterator.rb
240
+ - lib/grape/validations/oneof_collector.rb
228
241
  - lib/grape/validations/param_scope_tracker.rb
229
242
  - lib/grape/validations/params_documentation.rb
230
243
  - lib/grape/validations/params_scope.rb
244
+ - lib/grape/validations/shared_options.rb
231
245
  - lib/grape/validations/single_attribute_iterator.rb
232
246
  - lib/grape/validations/types.rb
233
247
  - lib/grape/validations/types/array_coercer.rb
@@ -241,6 +255,7 @@ files:
241
255
  - lib/grape/validations/types/primitive_coercer.rb
242
256
  - lib/grape/validations/types/set_coercer.rb
243
257
  - lib/grape/validations/types/variant_collection_coercer.rb
258
+ - lib/grape/validations/validations_spec.rb
244
259
  - lib/grape/validations/validators/all_or_none_of_validator.rb
245
260
  - lib/grape/validations/validators/allow_blank_validator.rb
246
261
  - lib/grape/validations/validators/as_validator.rb
@@ -254,6 +269,7 @@ files:
254
269
  - lib/grape/validations/validators/length_validator.rb
255
270
  - lib/grape/validations/validators/multiple_params_base.rb
256
271
  - lib/grape/validations/validators/mutually_exclusive_validator.rb
272
+ - lib/grape/validations/validators/oneof_validator.rb
257
273
  - lib/grape/validations/validators/presence_validator.rb
258
274
  - lib/grape/validations/validators/regexp_validator.rb
259
275
  - lib/grape/validations/validators/same_as_validator.rb
@@ -265,9 +281,9 @@ licenses:
265
281
  - MIT
266
282
  metadata:
267
283
  bug_tracker_uri: https://github.com/ruby-grape/grape/issues
268
- changelog_uri: https://github.com/ruby-grape/grape/blob/v3.2.1/CHANGELOG.md
269
- documentation_uri: https://www.rubydoc.info/gems/grape/3.2.1
270
- source_code_uri: https://github.com/ruby-grape/grape/tree/v3.2.1
284
+ changelog_uri: https://github.com/ruby-grape/grape/blob/v3.3.0/CHANGELOG.md
285
+ documentation_uri: https://www.rubydoc.info/gems/grape/3.3.0
286
+ source_code_uri: https://github.com/ruby-grape/grape/tree/v3.3.0
271
287
  rubygems_mfa_required: 'true'
272
288
  rdoc_options: []
273
289
  require_paths:
@@ -276,14 +292,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
276
292
  requirements:
277
293
  - - ">="
278
294
  - !ruby/object:Gem::Version
279
- version: '3.2'
295
+ version: '3.3'
280
296
  required_rubygems_version: !ruby/object:Gem::Requirement
281
297
  requirements:
282
298
  - - ">="
283
299
  - !ruby/object:Gem::Version
284
300
  version: '0'
285
301
  requirements: []
286
- rubygems_version: 4.0.3
302
+ rubygems_version: 4.0.10
287
303
  specification_version: 4
288
304
  summary: A simple Ruby framework for building REST-like APIs.
289
305
  test_files: []
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module Middleware
5
- class Globals < Base
6
- def before
7
- request = Grape::Request.new(@env, build_params_with: @options[:build_params_with])
8
- @env[Grape::Env::GRAPE_REQUEST] = request
9
- @env[Grape::Env::GRAPE_REQUEST_HEADERS] = request.headers
10
- @env[Grape::Env::GRAPE_REQUEST_PARAMS] = request.params if @env[Rack::RACK_INPUT]
11
- end
12
- end
13
- end
14
- end