grape 2.0.0 → 2.4.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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +151 -1
  3. data/CONTRIBUTING.md +1 -1
  4. data/README.md +404 -334
  5. data/UPGRADING.md +279 -7
  6. data/grape.gemspec +8 -8
  7. data/lib/grape/api/instance.rb +34 -66
  8. data/lib/grape/api.rb +47 -70
  9. data/lib/grape/content_types.rb +13 -10
  10. data/lib/grape/cookies.rb +31 -24
  11. data/lib/grape/dry_types.rb +0 -2
  12. data/lib/grape/dsl/api.rb +0 -2
  13. data/lib/grape/dsl/desc.rb +49 -44
  14. data/lib/grape/dsl/headers.rb +2 -2
  15. data/lib/grape/dsl/helpers.rb +8 -4
  16. data/lib/grape/dsl/inside_route.rb +67 -54
  17. data/lib/grape/dsl/parameters.rb +10 -9
  18. data/lib/grape/dsl/request_response.rb +14 -18
  19. data/lib/grape/dsl/routing.rb +34 -17
  20. data/lib/grape/dsl/validations.rb +13 -0
  21. data/lib/grape/endpoint.rb +120 -118
  22. data/lib/grape/{util/env.rb → env.rb} +0 -5
  23. data/lib/grape/error_formatter/base.rb +51 -21
  24. data/lib/grape/error_formatter/json.rb +7 -15
  25. data/lib/grape/error_formatter/serializable_hash.rb +7 -0
  26. data/lib/grape/error_formatter/txt.rb +11 -17
  27. data/lib/grape/error_formatter/xml.rb +3 -13
  28. data/lib/grape/error_formatter.rb +5 -25
  29. data/lib/grape/exceptions/base.rb +18 -30
  30. data/lib/grape/exceptions/conflicting_types.rb +11 -0
  31. data/lib/grape/exceptions/invalid_parameters.rb +11 -0
  32. data/lib/grape/exceptions/too_deep_parameters.rb +11 -0
  33. data/lib/grape/exceptions/unknown_auth_strategy.rb +11 -0
  34. data/lib/grape/exceptions/unknown_params_builder.rb +11 -0
  35. data/lib/grape/exceptions/validation.rb +5 -6
  36. data/lib/grape/exceptions/validation_array_errors.rb +1 -0
  37. data/lib/grape/exceptions/validation_errors.rb +4 -6
  38. data/lib/grape/extensions/active_support/hash_with_indifferent_access.rb +2 -5
  39. data/lib/grape/extensions/hash.rb +7 -2
  40. data/lib/grape/extensions/hashie/mash.rb +3 -5
  41. data/lib/grape/formatter/base.rb +16 -0
  42. data/lib/grape/formatter/json.rb +4 -6
  43. data/lib/grape/formatter/serializable_hash.rb +1 -1
  44. data/lib/grape/formatter/txt.rb +3 -5
  45. data/lib/grape/formatter/xml.rb +4 -6
  46. data/lib/grape/formatter.rb +7 -25
  47. data/lib/grape/{util/json.rb → json.rb} +1 -3
  48. data/lib/grape/locale/en.yml +46 -42
  49. data/lib/grape/middleware/auth/base.rb +11 -34
  50. data/lib/grape/middleware/auth/dsl.rb +23 -31
  51. data/lib/grape/middleware/base.rb +41 -23
  52. data/lib/grape/middleware/error.rb +77 -76
  53. data/lib/grape/middleware/formatter.rb +48 -79
  54. data/lib/grape/middleware/globals.rb +1 -3
  55. data/lib/grape/middleware/stack.rb +26 -37
  56. data/lib/grape/middleware/versioner/accept_version_header.rb +6 -33
  57. data/lib/grape/middleware/versioner/base.rb +74 -0
  58. data/lib/grape/middleware/versioner/header.rb +59 -126
  59. data/lib/grape/middleware/versioner/param.rb +4 -25
  60. data/lib/grape/middleware/versioner/path.rb +10 -34
  61. data/lib/grape/middleware/versioner.rb +7 -14
  62. data/lib/grape/namespace.rb +4 -5
  63. data/lib/grape/params_builder/base.rb +18 -0
  64. data/lib/grape/params_builder/hash.rb +11 -0
  65. data/lib/grape/params_builder/hash_with_indifferent_access.rb +11 -0
  66. data/lib/grape/params_builder/hashie_mash.rb +11 -0
  67. data/lib/grape/params_builder.rb +32 -0
  68. data/lib/grape/parser/base.rb +16 -0
  69. data/lib/grape/parser/json.rb +6 -8
  70. data/lib/grape/parser/xml.rb +6 -8
  71. data/lib/grape/parser.rb +5 -23
  72. data/lib/grape/path.rb +38 -60
  73. data/lib/grape/request.rb +161 -30
  74. data/lib/grape/router/base_route.rb +39 -0
  75. data/lib/grape/router/greedy_route.rb +20 -0
  76. data/lib/grape/router/pattern.rb +45 -31
  77. data/lib/grape/router/route.rb +28 -57
  78. data/lib/grape/router.rb +56 -43
  79. data/lib/grape/util/base_inheritable.rb +4 -4
  80. data/lib/grape/util/cache.rb +0 -3
  81. data/lib/grape/util/endpoint_configuration.rb +1 -1
  82. data/lib/grape/util/header.rb +13 -0
  83. data/lib/grape/util/inheritable_values.rb +0 -2
  84. data/lib/grape/util/lazy/block.rb +29 -0
  85. data/lib/grape/util/lazy/value.rb +38 -0
  86. data/lib/grape/util/lazy/value_array.rb +21 -0
  87. data/lib/grape/util/lazy/value_enumerable.rb +34 -0
  88. data/lib/grape/util/lazy/value_hash.rb +21 -0
  89. data/lib/grape/util/media_type.rb +70 -0
  90. data/lib/grape/util/registry.rb +27 -0
  91. data/lib/grape/util/reverse_stackable_values.rb +1 -6
  92. data/lib/grape/util/stackable_values.rb +1 -6
  93. data/lib/grape/util/strict_hash_configuration.rb +3 -3
  94. data/lib/grape/validations/attributes_doc.rb +38 -36
  95. data/lib/grape/validations/attributes_iterator.rb +1 -0
  96. data/lib/grape/validations/contract_scope.rb +34 -0
  97. data/lib/grape/validations/params_scope.rb +36 -32
  98. data/lib/grape/validations/types/array_coercer.rb +0 -2
  99. data/lib/grape/validations/types/dry_type_coercer.rb +9 -15
  100. data/lib/grape/validations/types/json.rb +0 -2
  101. data/lib/grape/validations/types/primitive_coercer.rb +0 -2
  102. data/lib/grape/validations/types/set_coercer.rb +0 -3
  103. data/lib/grape/validations/types.rb +0 -3
  104. data/lib/grape/validations/validator_factory.rb +2 -2
  105. data/lib/grape/validations/validators/allow_blank_validator.rb +1 -1
  106. data/lib/grape/validations/validators/base.rb +8 -11
  107. data/lib/grape/validations/validators/coerce_validator.rb +1 -1
  108. data/lib/grape/validations/validators/contract_scope_validator.rb +41 -0
  109. data/lib/grape/validations/validators/default_validator.rb +6 -2
  110. data/lib/grape/validations/validators/exactly_one_of_validator.rb +1 -1
  111. data/lib/grape/validations/validators/except_values_validator.rb +2 -2
  112. data/lib/grape/validations/validators/length_validator.rb +49 -0
  113. data/lib/grape/validations/validators/presence_validator.rb +1 -1
  114. data/lib/grape/validations/validators/regexp_validator.rb +2 -2
  115. data/lib/grape/validations/validators/values_validator.rb +20 -57
  116. data/lib/grape/validations.rb +8 -21
  117. data/lib/grape/version.rb +1 -1
  118. data/lib/grape/{util/xml.rb → xml.rb} +1 -1
  119. data/lib/grape.rb +42 -274
  120. metadata +45 -44
  121. data/lib/grape/eager_load.rb +0 -20
  122. data/lib/grape/http/headers.rb +0 -71
  123. data/lib/grape/middleware/helpers.rb +0 -12
  124. data/lib/grape/middleware/versioner/parse_media_type_patch.rb +0 -24
  125. data/lib/grape/router/attribute_translator.rb +0 -63
  126. data/lib/grape/util/lazy_block.rb +0 -27
  127. data/lib/grape/util/lazy_object.rb +0 -43
  128. data/lib/grape/util/lazy_value.rb +0 -91
  129. data/lib/grape/util/registrable.rb +0 -15
  130. data/lib/grape/validations/types/build_coercer.rb +0 -94
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Bleigh
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-11-11 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activesupport
@@ -16,28 +15,14 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '5'
18
+ version: '6.1'
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: '5'
27
- - !ruby/object:Gem::Dependency
28
- name: builder
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
25
+ version: '6.1'
41
26
  - !ruby/object:Gem::Dependency
42
27
  name: dry-types
43
28
  requirement: !ruby/object:Gem::Requirement
@@ -58,30 +43,30 @@ dependencies:
58
43
  requirements:
59
44
  - - "~>"
60
45
  - !ruby/object:Gem::Version
61
- version: 1.0.0
46
+ version: 1.1.0
62
47
  type: :runtime
63
48
  prerelease: false
64
49
  version_requirements: !ruby/object:Gem::Requirement
65
50
  requirements:
66
51
  - - "~>"
67
52
  - !ruby/object:Gem::Version
68
- version: 1.0.0
53
+ version: 1.1.0
69
54
  - !ruby/object:Gem::Dependency
70
55
  name: rack
71
56
  requirement: !ruby/object:Gem::Requirement
72
57
  requirements:
73
58
  - - ">="
74
59
  - !ruby/object:Gem::Version
75
- version: 1.3.0
60
+ version: '2'
76
61
  type: :runtime
77
62
  prerelease: false
78
63
  version_requirements: !ruby/object:Gem::Requirement
79
64
  requirements:
80
65
  - - ">="
81
66
  - !ruby/object:Gem::Version
82
- version: 1.3.0
67
+ version: '2'
83
68
  - !ruby/object:Gem::Dependency
84
- name: rack-accept
69
+ name: zeitwerk
85
70
  requirement: !ruby/object:Gem::Requirement
86
71
  requirements:
87
72
  - - ">="
@@ -129,19 +114,22 @@ files:
129
114
  - lib/grape/dsl/routing.rb
130
115
  - lib/grape/dsl/settings.rb
131
116
  - lib/grape/dsl/validations.rb
132
- - lib/grape/eager_load.rb
133
117
  - lib/grape/endpoint.rb
118
+ - lib/grape/env.rb
134
119
  - lib/grape/error_formatter.rb
135
120
  - lib/grape/error_formatter/base.rb
136
121
  - lib/grape/error_formatter/json.rb
122
+ - lib/grape/error_formatter/serializable_hash.rb
137
123
  - lib/grape/error_formatter/txt.rb
138
124
  - lib/grape/error_formatter/xml.rb
139
125
  - lib/grape/exceptions/base.rb
126
+ - lib/grape/exceptions/conflicting_types.rb
140
127
  - lib/grape/exceptions/empty_message_body.rb
141
128
  - lib/grape/exceptions/incompatible_option_values.rb
142
129
  - lib/grape/exceptions/invalid_accept_header.rb
143
130
  - lib/grape/exceptions/invalid_formatter.rb
144
131
  - lib/grape/exceptions/invalid_message_body.rb
132
+ - lib/grape/exceptions/invalid_parameters.rb
145
133
  - lib/grape/exceptions/invalid_response.rb
146
134
  - lib/grape/exceptions/invalid_version_header.rb
147
135
  - lib/grape/exceptions/invalid_versioner_option.rb
@@ -151,9 +139,12 @@ files:
151
139
  - lib/grape/exceptions/missing_mime_type.rb
152
140
  - lib/grape/exceptions/missing_option.rb
153
141
  - lib/grape/exceptions/missing_vendor_option.rb
142
+ - lib/grape/exceptions/too_deep_parameters.rb
154
143
  - lib/grape/exceptions/too_many_multipart_files.rb
144
+ - lib/grape/exceptions/unknown_auth_strategy.rb
155
145
  - lib/grape/exceptions/unknown_options.rb
156
146
  - lib/grape/exceptions/unknown_parameter.rb
147
+ - lib/grape/exceptions/unknown_params_builder.rb
157
148
  - lib/grape/exceptions/unknown_validator.rb
158
149
  - lib/grape/exceptions/unsupported_group_type.rb
159
150
  - lib/grape/exceptions/validation.rb
@@ -163,11 +154,12 @@ files:
163
154
  - lib/grape/extensions/hash.rb
164
155
  - lib/grape/extensions/hashie/mash.rb
165
156
  - lib/grape/formatter.rb
157
+ - lib/grape/formatter/base.rb
166
158
  - lib/grape/formatter/json.rb
167
159
  - lib/grape/formatter/serializable_hash.rb
168
160
  - lib/grape/formatter/txt.rb
169
161
  - lib/grape/formatter/xml.rb
170
- - lib/grape/http/headers.rb
162
+ - lib/grape/json.rb
171
163
  - lib/grape/locale/en.yml
172
164
  - lib/grape/middleware/auth/base.rb
173
165
  - lib/grape/middleware/auth/dsl.rb
@@ -178,16 +170,21 @@ files:
178
170
  - lib/grape/middleware/filter.rb
179
171
  - lib/grape/middleware/formatter.rb
180
172
  - lib/grape/middleware/globals.rb
181
- - lib/grape/middleware/helpers.rb
182
173
  - lib/grape/middleware/stack.rb
183
174
  - lib/grape/middleware/versioner.rb
184
175
  - lib/grape/middleware/versioner/accept_version_header.rb
176
+ - lib/grape/middleware/versioner/base.rb
185
177
  - lib/grape/middleware/versioner/header.rb
186
178
  - lib/grape/middleware/versioner/param.rb
187
- - lib/grape/middleware/versioner/parse_media_type_patch.rb
188
179
  - lib/grape/middleware/versioner/path.rb
189
180
  - lib/grape/namespace.rb
181
+ - lib/grape/params_builder.rb
182
+ - lib/grape/params_builder/base.rb
183
+ - lib/grape/params_builder/hash.rb
184
+ - lib/grape/params_builder/hash_with_indifferent_access.rb
185
+ - lib/grape/params_builder/hashie_mash.rb
190
186
  - lib/grape/parser.rb
187
+ - lib/grape/parser/base.rb
191
188
  - lib/grape/parser/json.rb
192
189
  - lib/grape/parser/xml.rb
193
190
  - lib/grape/path.rb
@@ -195,7 +192,8 @@ files:
195
192
  - lib/grape/railtie.rb
196
193
  - lib/grape/request.rb
197
194
  - lib/grape/router.rb
198
- - lib/grape/router/attribute_translator.rb
195
+ - lib/grape/router/base_route.rb
196
+ - lib/grape/router/greedy_route.rb
199
197
  - lib/grape/router/pattern.rb
200
198
  - lib/grape/router/route.rb
201
199
  - lib/grape/serve_stream/file_body.rb
@@ -205,27 +203,28 @@ files:
205
203
  - lib/grape/util/base_inheritable.rb
206
204
  - lib/grape/util/cache.rb
207
205
  - lib/grape/util/endpoint_configuration.rb
208
- - lib/grape/util/env.rb
206
+ - lib/grape/util/header.rb
209
207
  - lib/grape/util/inheritable_setting.rb
210
208
  - lib/grape/util/inheritable_values.rb
211
- - lib/grape/util/json.rb
212
- - lib/grape/util/lazy_block.rb
213
- - lib/grape/util/lazy_object.rb
214
- - lib/grape/util/lazy_value.rb
215
- - lib/grape/util/registrable.rb
209
+ - lib/grape/util/lazy/block.rb
210
+ - lib/grape/util/lazy/value.rb
211
+ - lib/grape/util/lazy/value_array.rb
212
+ - lib/grape/util/lazy/value_enumerable.rb
213
+ - lib/grape/util/lazy/value_hash.rb
214
+ - lib/grape/util/media_type.rb
215
+ - lib/grape/util/registry.rb
216
216
  - lib/grape/util/reverse_stackable_values.rb
217
217
  - lib/grape/util/stackable_values.rb
218
218
  - lib/grape/util/strict_hash_configuration.rb
219
- - lib/grape/util/xml.rb
220
219
  - lib/grape/validations.rb
221
220
  - lib/grape/validations/attributes_doc.rb
222
221
  - lib/grape/validations/attributes_iterator.rb
222
+ - lib/grape/validations/contract_scope.rb
223
223
  - lib/grape/validations/multiple_attributes_iterator.rb
224
224
  - lib/grape/validations/params_scope.rb
225
225
  - lib/grape/validations/single_attribute_iterator.rb
226
226
  - lib/grape/validations/types.rb
227
227
  - lib/grape/validations/types/array_coercer.rb
228
- - lib/grape/validations/types/build_coercer.rb
229
228
  - lib/grape/validations/types/custom_type_coercer.rb
230
229
  - lib/grape/validations/types/custom_type_collection_coercer.rb
231
230
  - lib/grape/validations/types/dry_type_coercer.rb
@@ -243,9 +242,11 @@ files:
243
242
  - lib/grape/validations/validators/at_least_one_of_validator.rb
244
243
  - lib/grape/validations/validators/base.rb
245
244
  - lib/grape/validations/validators/coerce_validator.rb
245
+ - lib/grape/validations/validators/contract_scope_validator.rb
246
246
  - lib/grape/validations/validators/default_validator.rb
247
247
  - lib/grape/validations/validators/exactly_one_of_validator.rb
248
248
  - lib/grape/validations/validators/except_values_validator.rb
249
+ - lib/grape/validations/validators/length_validator.rb
249
250
  - lib/grape/validations/validators/multiple_params_base.rb
250
251
  - lib/grape/validations/validators/mutual_exclusion_validator.rb
251
252
  - lib/grape/validations/validators/presence_validator.rb
@@ -253,15 +254,16 @@ files:
253
254
  - lib/grape/validations/validators/same_as_validator.rb
254
255
  - lib/grape/validations/validators/values_validator.rb
255
256
  - lib/grape/version.rb
257
+ - lib/grape/xml.rb
256
258
  homepage: https://github.com/ruby-grape/grape
257
259
  licenses:
258
260
  - MIT
259
261
  metadata:
260
262
  bug_tracker_uri: https://github.com/ruby-grape/grape/issues
261
- changelog_uri: https://github.com/ruby-grape/grape/blob/v2.0.0/CHANGELOG.md
262
- documentation_uri: https://www.rubydoc.info/gems/grape/2.0.0
263
- source_code_uri: https://github.com/ruby-grape/grape/tree/v2.0.0
264
- post_install_message:
263
+ changelog_uri: https://github.com/ruby-grape/grape/blob/v2.4.0/CHANGELOG.md
264
+ documentation_uri: https://www.rubydoc.info/gems/grape/2.4.0
265
+ source_code_uri: https://github.com/ruby-grape/grape/tree/v2.4.0
266
+ rubygems_mfa_required: 'true'
265
267
  rdoc_options: []
266
268
  require_paths:
267
269
  - lib
@@ -269,15 +271,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
269
271
  requirements:
270
272
  - - ">="
271
273
  - !ruby/object:Gem::Version
272
- version: 2.6.0
274
+ version: 2.7.0
273
275
  required_rubygems_version: !ruby/object:Gem::Requirement
274
276
  requirements:
275
277
  - - ">="
276
278
  - !ruby/object:Gem::Version
277
279
  version: '0'
278
280
  requirements: []
279
- rubygems_version: 3.4.6
280
- signing_key:
281
+ rubygems_version: 3.6.9
281
282
  specification_version: 4
282
283
  summary: A simple Ruby framework for building REST-like APIs.
283
284
  test_files: []
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Grape.eager_load!
4
- Grape::Http.eager_load!
5
- Grape::Exceptions.eager_load!
6
- Grape::Extensions.eager_load!
7
- Grape::Extensions::ActiveSupport.eager_load!
8
- Grape::Extensions::Hashie.eager_load!
9
- Grape::Middleware.eager_load!
10
- Grape::Middleware::Auth.eager_load!
11
- Grape::Middleware::Versioner.eager_load!
12
- Grape::Util.eager_load!
13
- Grape::ErrorFormatter.eager_load!
14
- Grape::Formatter.eager_load!
15
- Grape::Parser.eager_load!
16
- Grape::DSL.eager_load!
17
- Grape::API.eager_load!
18
- Grape::Presenters.eager_load!
19
- Grape::ServeStream.eager_load!
20
- Rack::Head # AutoLoads the Rack::Head
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'grape/util/lazy_object'
4
-
5
- module Grape
6
- module Http
7
- module Headers
8
- # https://github.com/rack/rack/blob/master/lib/rack.rb
9
- HTTP_VERSION = 'HTTP_VERSION'
10
- PATH_INFO = 'PATH_INFO'
11
- REQUEST_METHOD = 'REQUEST_METHOD'
12
- QUERY_STRING = 'QUERY_STRING'
13
-
14
- if Grape.lowercase_headers?
15
- ALLOW = 'allow'
16
- LOCATION = 'location'
17
- TRANSFER_ENCODING = 'transfer-encoding'
18
- X_CASCADE = 'x-cascade'
19
- else
20
- ALLOW = 'Allow'
21
- LOCATION = 'Location'
22
- TRANSFER_ENCODING = 'Transfer-Encoding'
23
- X_CASCADE = 'X-Cascade'
24
- end
25
-
26
- GET = 'GET'
27
- POST = 'POST'
28
- PUT = 'PUT'
29
- PATCH = 'PATCH'
30
- DELETE = 'DELETE'
31
- HEAD = 'HEAD'
32
- OPTIONS = 'OPTIONS'
33
-
34
- SUPPORTED_METHODS = [GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS].freeze
35
- SUPPORTED_METHODS_WITHOUT_OPTIONS = Grape::Util::LazyObject.new { [GET, POST, PUT, PATCH, DELETE, HEAD].freeze }
36
-
37
- HTTP_ACCEPT_VERSION = 'HTTP_ACCEPT_VERSION'
38
- HTTP_TRANSFER_ENCODING = 'HTTP_TRANSFER_ENCODING'
39
- HTTP_ACCEPT = 'HTTP_ACCEPT'
40
-
41
- FORMAT = 'format'
42
-
43
- HTTP_HEADERS = Grape::Util::LazyObject.new do
44
- common_http_headers = %w[
45
- Version
46
- Host
47
- Connection
48
- Cache-Control
49
- Dnt
50
- Upgrade-Insecure-Requests
51
- User-Agent
52
- Sec-Fetch-Dest
53
- Accept
54
- Sec-Fetch-Site
55
- Sec-Fetch-Mode
56
- Sec-Fetch-User
57
- Accept-Encoding
58
- Accept-Language
59
- Cookie
60
- ].freeze
61
- common_http_headers.each_with_object({}) do |header, response|
62
- response["HTTP_#{header.upcase.tr('-', '_')}"] = header
63
- end.freeze
64
- end
65
-
66
- def self.find_supported_method(route_method)
67
- Grape::Http::Headers::SUPPORTED_METHODS.detect { |supported_method| supported_method.casecmp(route_method).zero? }
68
- end
69
- end
70
- end
71
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module Middleware
5
- # Common methods for all types of Grape middleware
6
- module Helpers
7
- def context
8
- env[Grape::Env::API_ENDPOINT]
9
- end
10
- end
11
- end
12
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'English'
4
- module Rack
5
- module Accept
6
- module Header
7
- ALLOWED_CHARACTERS = %r{^([a-z*]+)/([a-z0-9*&\^\-_#{$ERROR_INFO}.+]+)(?:;([a-z0-9=;]+))?$}.freeze
8
- class << self
9
- # Corrected version of https://github.com/mjackson/rack-accept/blob/master/lib/rack/accept/header.rb#L40-L44
10
- def parse_media_type(media_type)
11
- # see http://tools.ietf.org/html/rfc6838#section-4.2 for allowed characters in media type names
12
- m = media_type&.match(ALLOWED_CHARACTERS)
13
- m ? [m[1], m[2], m[3] || ''] : []
14
- end
15
- end
16
- end
17
-
18
- class MediaType
19
- def parse_media_type(media_type)
20
- Header.parse_media_type(media_type)
21
- end
22
- end
23
- end
24
- end
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- class Router
5
- # this could be an OpenStruct, but doesn't work in Ruby 2.3.0, see https://bugs.ruby-lang.org/issues/12251
6
- class AttributeTranslator
7
- attr_reader :attributes
8
-
9
- ROUTE_ATTRIBUTES = %i[
10
- prefix
11
- version
12
- settings
13
- format
14
- description
15
- http_codes
16
- headers
17
- entity
18
- details
19
- requirements
20
- request_method
21
- namespace
22
- ].freeze
23
-
24
- ROUTER_ATTRIBUTES = %i[pattern index].freeze
25
-
26
- def initialize(**attributes)
27
- @attributes = attributes
28
- end
29
-
30
- (ROUTER_ATTRIBUTES + ROUTE_ATTRIBUTES).each do |attr|
31
- define_method attr do
32
- attributes[attr]
33
- end
34
- end
35
-
36
- def to_h
37
- attributes
38
- end
39
-
40
- def method_missing(method_name, *args)
41
- if setter?(method_name[-1])
42
- attributes[method_name[0..]] = *args
43
- else
44
- attributes[method_name]
45
- end
46
- end
47
-
48
- def respond_to_missing?(method_name, _include_private = false)
49
- if setter?(method_name[-1])
50
- true
51
- else
52
- @attributes.key?(method_name)
53
- end
54
- end
55
-
56
- private
57
-
58
- def setter?(method_name)
59
- method_name[-1] == '='
60
- end
61
- end
62
- end
63
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module Util
5
- class LazyBlock
6
- def initialize(&new_block)
7
- @block = new_block
8
- end
9
-
10
- def evaluate_from(configuration)
11
- @block.call(configuration)
12
- end
13
-
14
- def evaluate
15
- @block.call({})
16
- end
17
-
18
- def lazy?
19
- true
20
- end
21
-
22
- def to_s
23
- evaluate.to_s
24
- end
25
- end
26
- end
27
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Based on https://github.com/HornsAndHooves/lazy_object
4
-
5
- module Grape
6
- module Util
7
- class LazyObject < BasicObject
8
- attr_reader :callable
9
-
10
- def initialize(&callable)
11
- @callable = callable
12
- end
13
-
14
- def __target_object__
15
- @__target_object__ ||= callable.call
16
- end
17
-
18
- def ==(other)
19
- __target_object__ == other
20
- end
21
-
22
- def !=(other)
23
- __target_object__ != other
24
- end
25
-
26
- def !
27
- !__target_object__
28
- end
29
-
30
- def method_missing(method_name, *args, &block)
31
- if __target_object__.respond_to?(method_name)
32
- __target_object__.send(method_name, *args, &block)
33
- else
34
- super
35
- end
36
- end
37
-
38
- def respond_to_missing?(method_name, include_priv = false)
39
- __target_object__.respond_to?(method_name, include_priv)
40
- end
41
- end
42
- end
43
- end
@@ -1,91 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module Util
5
- class LazyValue
6
- attr_reader :access_keys
7
-
8
- def initialize(value, access_keys = [])
9
- @value = value
10
- @access_keys = access_keys
11
- end
12
-
13
- def evaluate_from(configuration)
14
- matching_lazy_value = configuration.fetch(@access_keys)
15
- matching_lazy_value.evaluate
16
- end
17
-
18
- def evaluate
19
- @value
20
- end
21
-
22
- def lazy?
23
- true
24
- end
25
-
26
- def reached_by(parent_access_keys, access_key)
27
- @access_keys = parent_access_keys + [access_key]
28
- self
29
- end
30
-
31
- def to_s
32
- evaluate.to_s
33
- end
34
- end
35
-
36
- class LazyValueEnumerable < LazyValue
37
- def [](key)
38
- if @value_hash[key].nil?
39
- LazyValue.new(nil).reached_by(access_keys, key)
40
- else
41
- @value_hash[key].reached_by(access_keys, key)
42
- end
43
- end
44
-
45
- def fetch(access_keys)
46
- fetched_keys = access_keys.dup
47
- value = self[fetched_keys.shift]
48
- fetched_keys.any? ? value.fetch(fetched_keys) : value
49
- end
50
-
51
- def []=(key, value)
52
- @value_hash[key] = case value
53
- when Hash
54
- LazyValueHash.new(value)
55
- when Array
56
- LazyValueArray.new(value)
57
- else
58
- LazyValue.new(value)
59
- end
60
- end
61
- end
62
-
63
- class LazyValueArray < LazyValueEnumerable
64
- def initialize(array)
65
- super
66
- @value_hash = []
67
- array.each_with_index do |value, index|
68
- self[index] = value
69
- end
70
- end
71
-
72
- def evaluate
73
- @value_hash.map(&:evaluate)
74
- end
75
- end
76
-
77
- class LazyValueHash < LazyValueEnumerable
78
- def initialize(hash)
79
- super
80
- @value_hash = ActiveSupport::HashWithIndifferentAccess.new
81
- hash.each do |key, value|
82
- self[key] = value
83
- end
84
- end
85
-
86
- def evaluate
87
- @value_hash.transform_values(&:evaluate)
88
- end
89
- end
90
- end
91
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module Util
5
- module Registrable
6
- def default_elements
7
- @default_elements ||= {}
8
- end
9
-
10
- def register(format, element)
11
- default_elements[format] = element unless default_elements[format]
12
- end
13
- end
14
- end
15
- end