grape 1.8.0 → 3.3.5

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 (312) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +391 -1
  3. data/CONTRIBUTING.md +3 -11
  4. data/README.md +648 -552
  5. data/UPGRADING.md +803 -7
  6. data/grape.gemspec +11 -14
  7. data/lib/grape/api/instance.rb +68 -158
  8. data/lib/grape/api.rb +71 -107
  9. data/lib/grape/content_types.rb +23 -11
  10. data/lib/grape/cookies.rb +28 -25
  11. data/lib/grape/declared_params_handler.rb +116 -0
  12. data/lib/grape/dry_types.rb +48 -6
  13. data/lib/grape/dsl/callbacks.rb +14 -58
  14. data/lib/grape/dsl/declared.rb +35 -0
  15. data/lib/grape/dsl/desc.rb +15 -63
  16. data/lib/grape/dsl/entity.rb +88 -0
  17. data/lib/grape/dsl/headers.rb +2 -2
  18. data/lib/grape/dsl/helpers.rb +83 -64
  19. data/lib/grape/dsl/inside_route.rb +56 -295
  20. data/lib/grape/dsl/logger.rb +4 -9
  21. data/lib/grape/dsl/middleware.rb +22 -40
  22. data/lib/grape/dsl/parameters.rb +50 -82
  23. data/lib/grape/dsl/request_response.rb +144 -146
  24. data/lib/grape/dsl/rescue_options.rb +24 -0
  25. data/lib/grape/dsl/routing.rb +261 -186
  26. data/lib/grape/dsl/settings.rb +29 -135
  27. data/lib/grape/dsl/validations.rb +39 -32
  28. data/lib/grape/dsl/version_options.rb +23 -0
  29. data/lib/grape/endpoint/options.rb +19 -0
  30. data/lib/grape/endpoint.rb +277 -250
  31. data/lib/grape/{util/env.rb → env.rb} +1 -8
  32. data/lib/grape/error_formatter/base.rb +56 -21
  33. data/lib/grape/error_formatter/json.rb +13 -15
  34. data/lib/grape/error_formatter/serializable_hash.rb +7 -0
  35. data/lib/grape/error_formatter/txt.rb +12 -18
  36. data/lib/grape/error_formatter/xml.rb +3 -13
  37. data/lib/grape/error_formatter.rb +5 -25
  38. data/lib/grape/exceptions/base.rb +22 -58
  39. data/lib/grape/exceptions/error_response.rb +45 -0
  40. data/lib/grape/exceptions/incompatible_option_values.rb +1 -1
  41. data/lib/grape/exceptions/internal_server_error.rb +16 -0
  42. data/lib/grape/exceptions/invalid_accept_header.rb +1 -1
  43. data/lib/grape/exceptions/invalid_formatter.rb +1 -1
  44. data/lib/grape/exceptions/invalid_message_body.rb +1 -1
  45. data/lib/grape/exceptions/invalid_version_header.rb +1 -1
  46. data/lib/grape/exceptions/invalid_versioner_option.rb +1 -1
  47. data/lib/grape/exceptions/method_not_allowed.rb +1 -1
  48. data/lib/grape/exceptions/missing_group_type.rb +0 -2
  49. data/lib/grape/exceptions/missing_mime_type.rb +1 -1
  50. data/lib/grape/exceptions/request_error.rb +11 -0
  51. data/lib/grape/exceptions/unknown_auth_strategy.rb +11 -0
  52. data/lib/grape/exceptions/unknown_parameter.rb +1 -1
  53. data/lib/grape/exceptions/unknown_params_builder.rb +11 -0
  54. data/lib/grape/exceptions/unknown_validator.rb +1 -1
  55. data/lib/grape/exceptions/unsupported_group_type.rb +0 -2
  56. data/lib/grape/exceptions/validation.rb +25 -9
  57. data/lib/grape/exceptions/validation_array_errors.rb +5 -0
  58. data/lib/grape/exceptions/validation_errors.rb +22 -26
  59. data/lib/grape/formatter/base.rb +16 -0
  60. data/lib/grape/formatter/json.rb +4 -6
  61. data/lib/grape/formatter/serializable_hash.rb +6 -10
  62. data/lib/grape/formatter/txt.rb +3 -5
  63. data/lib/grape/formatter/xml.rb +4 -6
  64. data/lib/grape/formatter.rb +7 -25
  65. data/lib/grape/json.rb +46 -0
  66. data/lib/grape/locale/en.yml +43 -42
  67. data/lib/grape/middleware/auth/base.rb +11 -33
  68. data/lib/grape/middleware/auth/dsl.rb +37 -31
  69. data/lib/grape/middleware/auth/strategies.rb +1 -2
  70. data/lib/grape/middleware/base.rb +56 -33
  71. data/lib/grape/middleware/deprecated_options_hash_access.rb +19 -0
  72. data/lib/grape/middleware/error.rb +183 -91
  73. data/lib/grape/middleware/formatter.rb +94 -105
  74. data/lib/grape/middleware/precomputed_content_types.rb +46 -0
  75. data/lib/grape/middleware/stack.rb +27 -38
  76. data/lib/grape/middleware/versioner/accept_version_header.rb +6 -33
  77. data/lib/grape/middleware/versioner/base.rb +72 -0
  78. data/lib/grape/middleware/versioner/header.rb +44 -129
  79. data/lib/grape/middleware/versioner/param.rb +4 -25
  80. data/lib/grape/middleware/versioner/path.rb +13 -32
  81. data/lib/grape/middleware/versioner.rb +7 -14
  82. data/lib/grape/mountable.rb +22 -0
  83. data/lib/grape/namespace.rb +18 -12
  84. data/lib/grape/params_builder/base.rb +20 -0
  85. data/lib/grape/params_builder/hash.rb +11 -0
  86. data/lib/grape/params_builder/hash_with_indifferent_access.rb +11 -0
  87. data/lib/grape/params_builder/hashie_mash.rb +11 -0
  88. data/lib/grape/params_builder.rb +15 -0
  89. data/lib/grape/parser/base.rb +16 -0
  90. data/lib/grape/parser/json.rb +6 -8
  91. data/lib/grape/parser/xml.rb +6 -8
  92. data/lib/grape/parser.rb +5 -23
  93. data/lib/grape/path.rb +38 -63
  94. data/lib/grape/railtie.rb +9 -0
  95. data/lib/grape/request.rb +168 -26
  96. data/lib/grape/router/base_route.rb +48 -0
  97. data/lib/grape/router/greedy_route.rb +26 -0
  98. data/lib/grape/router/mustermann_pattern.rb +44 -0
  99. data/lib/grape/router/pattern.rb +30 -34
  100. data/lib/grape/router/route.rb +28 -61
  101. data/lib/grape/router.rb +71 -86
  102. data/lib/grape/serve_stream/file_body.rb +1 -0
  103. data/lib/grape/serve_stream/sendfile_response.rb +3 -5
  104. data/lib/grape/serve_stream/stream_response.rb +1 -0
  105. data/lib/grape/testing.rb +33 -0
  106. data/lib/grape/util/api_description.rb +58 -0
  107. data/lib/grape/util/base_inheritable.rb +14 -14
  108. data/lib/grape/util/cache.rb +1 -3
  109. data/lib/grape/util/deep_freeze.rb +35 -0
  110. data/lib/grape/util/endpoint_configuration.rb +1 -1
  111. data/lib/grape/util/header.rb +13 -0
  112. data/lib/grape/util/inheritable_setting.rb +51 -27
  113. data/lib/grape/util/inheritable_values.rb +7 -5
  114. data/lib/grape/util/lazy/base.rb +16 -0
  115. data/lib/grape/util/lazy/block.rb +22 -0
  116. data/lib/grape/util/lazy/value.rb +31 -0
  117. data/lib/grape/util/lazy/value_array.rb +21 -0
  118. data/lib/grape/util/lazy/value_enumerable.rb +31 -0
  119. data/lib/grape/util/lazy/value_hash.rb +21 -0
  120. data/lib/grape/util/media_type.rb +67 -0
  121. data/lib/grape/util/path_normalizer.rb +34 -0
  122. data/lib/grape/util/registry.rb +27 -0
  123. data/lib/grape/util/reverse_stackable_values.rb +1 -6
  124. data/lib/grape/util/stackable_values.rb +12 -14
  125. data/lib/grape/util/translation.rb +42 -0
  126. data/lib/grape/validations/attributes_iterator.rb +43 -27
  127. data/lib/grape/validations/coerce_options.rb +21 -0
  128. data/lib/grape/validations/contract_scope.rb +28 -0
  129. data/lib/grape/validations/multiple_attributes_iterator.rb +1 -1
  130. data/lib/grape/validations/oneof_collector.rb +39 -0
  131. data/lib/grape/validations/param_scope_tracker.rb +62 -0
  132. data/lib/grape/validations/params_documentation.rb +52 -0
  133. data/lib/grape/validations/params_scope.rb +180 -303
  134. data/lib/grape/validations/shared_options.rb +19 -0
  135. data/lib/grape/validations/single_attribute_iterator.rb +2 -2
  136. data/lib/grape/validations/types/array_coercer.rb +4 -7
  137. data/lib/grape/validations/types/custom_type_coercer.rb +41 -85
  138. data/lib/grape/validations/types/custom_type_collection_coercer.rb +1 -1
  139. data/lib/grape/validations/types/dry_type_coercer.rb +15 -28
  140. data/lib/grape/validations/types/json.rb +0 -2
  141. data/lib/grape/validations/types/primitive_coercer.rb +11 -35
  142. data/lib/grape/validations/types/set_coercer.rb +1 -4
  143. data/lib/grape/validations/types/variant_collection_coercer.rb +11 -0
  144. data/lib/grape/validations/types.rb +29 -54
  145. data/lib/grape/validations/validations_spec.rb +164 -0
  146. data/lib/grape/validations/validators/all_or_none_of_validator.rb +6 -3
  147. data/lib/grape/validations/validators/allow_blank_validator.rb +10 -5
  148. data/lib/grape/validations/validators/at_least_one_of_validator.rb +5 -2
  149. data/lib/grape/validations/validators/base.rb +120 -36
  150. data/lib/grape/validations/validators/coerce_validator.rb +18 -36
  151. data/lib/grape/validations/validators/contract_scope_validator.rb +45 -0
  152. data/lib/grape/validations/validators/default_validator.rb +13 -16
  153. data/lib/grape/validations/validators/exactly_one_of_validator.rb +10 -3
  154. data/lib/grape/validations/validators/except_values_validator.rb +15 -5
  155. data/lib/grape/validations/validators/length_validator.rb +48 -0
  156. data/lib/grape/validations/validators/multiple_params_base.rb +12 -9
  157. data/lib/grape/validations/validators/{mutual_exclusion_validator.rb → mutually_exclusive_validator.rb} +4 -2
  158. data/lib/grape/validations/validators/oneof_validator.rb +49 -0
  159. data/lib/grape/validations/validators/presence_validator.rb +4 -2
  160. data/lib/grape/validations/validators/regexp_validator.rb +11 -3
  161. data/lib/grape/validations/validators/same_as_validator.rb +6 -15
  162. data/lib/grape/validations/validators/values_validator.rb +36 -65
  163. data/lib/grape/validations.rb +8 -21
  164. data/lib/grape/version.rb +1 -2
  165. data/lib/grape/xml.rb +17 -0
  166. data/lib/grape.rb +75 -288
  167. metadata +79 -291
  168. data/lib/grape/api/helpers.rb +0 -9
  169. data/lib/grape/dsl/api.rb +0 -19
  170. data/lib/grape/dsl/configuration.rb +0 -15
  171. data/lib/grape/eager_load.rb +0 -20
  172. data/lib/grape/exceptions/empty_message_body.rb +0 -11
  173. data/lib/grape/exceptions/missing_option.rb +0 -11
  174. data/lib/grape/exceptions/too_many_multipart_files.rb +0 -11
  175. data/lib/grape/exceptions/unknown_options.rb +0 -11
  176. data/lib/grape/extensions/active_support/hash_with_indifferent_access.rb +0 -27
  177. data/lib/grape/extensions/hash.rb +0 -22
  178. data/lib/grape/extensions/hashie/mash.rb +0 -26
  179. data/lib/grape/http/headers.rb +0 -61
  180. data/lib/grape/middleware/globals.rb +0 -16
  181. data/lib/grape/middleware/helpers.rb +0 -12
  182. data/lib/grape/middleware/versioner/parse_media_type_patch.rb +0 -24
  183. data/lib/grape/router/attribute_translator.rb +0 -63
  184. data/lib/grape/types/invalid_value.rb +0 -8
  185. data/lib/grape/util/json.rb +0 -12
  186. data/lib/grape/util/lazy_block.rb +0 -27
  187. data/lib/grape/util/lazy_object.rb +0 -43
  188. data/lib/grape/util/lazy_value.rb +0 -91
  189. data/lib/grape/util/registrable.rb +0 -15
  190. data/lib/grape/util/strict_hash_configuration.rb +0 -108
  191. data/lib/grape/util/xml.rb +0 -10
  192. data/lib/grape/validations/attributes_doc.rb +0 -58
  193. data/lib/grape/validations/types/build_coercer.rb +0 -94
  194. data/lib/grape/validations/validator_factory.rb +0 -15
  195. data/spec/grape/api/custom_validations_spec.rb +0 -213
  196. data/spec/grape/api/deeply_included_options_spec.rb +0 -56
  197. data/spec/grape/api/defines_boolean_in_params_spec.rb +0 -38
  198. data/spec/grape/api/documentation_spec.rb +0 -59
  199. data/spec/grape/api/inherited_helpers_spec.rb +0 -114
  200. data/spec/grape/api/instance_spec.rb +0 -103
  201. data/spec/grape/api/invalid_format_spec.rb +0 -45
  202. data/spec/grape/api/namespace_parameters_in_route_spec.rb +0 -38
  203. data/spec/grape/api/nested_helpers_spec.rb +0 -50
  204. data/spec/grape/api/optional_parameters_in_route_spec.rb +0 -43
  205. data/spec/grape/api/parameters_modification_spec.rb +0 -41
  206. data/spec/grape/api/patch_method_helpers_spec.rb +0 -79
  207. data/spec/grape/api/recognize_path_spec.rb +0 -21
  208. data/spec/grape/api/required_parameters_in_route_spec.rb +0 -37
  209. data/spec/grape/api/required_parameters_with_invalid_method_spec.rb +0 -26
  210. data/spec/grape/api/routes_with_requirements_spec.rb +0 -59
  211. data/spec/grape/api/shared_helpers_exactly_one_of_spec.rb +0 -41
  212. data/spec/grape/api/shared_helpers_spec.rb +0 -36
  213. data/spec/grape/api_remount_spec.rb +0 -509
  214. data/spec/grape/api_spec.rb +0 -4356
  215. data/spec/grape/dsl/callbacks_spec.rb +0 -45
  216. data/spec/grape/dsl/desc_spec.rb +0 -98
  217. data/spec/grape/dsl/headers_spec.rb +0 -62
  218. data/spec/grape/dsl/helpers_spec.rb +0 -100
  219. data/spec/grape/dsl/inside_route_spec.rb +0 -531
  220. data/spec/grape/dsl/logger_spec.rb +0 -24
  221. data/spec/grape/dsl/middleware_spec.rb +0 -60
  222. data/spec/grape/dsl/parameters_spec.rb +0 -180
  223. data/spec/grape/dsl/request_response_spec.rb +0 -225
  224. data/spec/grape/dsl/routing_spec.rb +0 -275
  225. data/spec/grape/dsl/settings_spec.rb +0 -261
  226. data/spec/grape/dsl/validations_spec.rb +0 -55
  227. data/spec/grape/endpoint/declared_spec.rb +0 -846
  228. data/spec/grape/endpoint_spec.rb +0 -1085
  229. data/spec/grape/entity_spec.rb +0 -336
  230. data/spec/grape/exceptions/base_spec.rb +0 -81
  231. data/spec/grape/exceptions/body_parse_errors_spec.rb +0 -185
  232. data/spec/grape/exceptions/invalid_accept_header_spec.rb +0 -358
  233. data/spec/grape/exceptions/invalid_formatter_spec.rb +0 -15
  234. data/spec/grape/exceptions/invalid_response_spec.rb +0 -11
  235. data/spec/grape/exceptions/invalid_versioner_option_spec.rb +0 -15
  236. data/spec/grape/exceptions/missing_group_type_spec.rb +0 -17
  237. data/spec/grape/exceptions/missing_mime_type_spec.rb +0 -17
  238. data/spec/grape/exceptions/missing_option_spec.rb +0 -15
  239. data/spec/grape/exceptions/unknown_options_spec.rb +0 -15
  240. data/spec/grape/exceptions/unknown_validator_spec.rb +0 -15
  241. data/spec/grape/exceptions/unsupported_group_type_spec.rb +0 -19
  242. data/spec/grape/exceptions/validation_errors_spec.rb +0 -92
  243. data/spec/grape/exceptions/validation_spec.rb +0 -19
  244. data/spec/grape/extensions/param_builders/hash_spec.rb +0 -83
  245. data/spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb +0 -105
  246. data/spec/grape/extensions/param_builders/hashie/mash_spec.rb +0 -79
  247. data/spec/grape/grape_spec.rb +0 -9
  248. data/spec/grape/integration/global_namespace_function_spec.rb +0 -29
  249. data/spec/grape/integration/rack_sendfile_spec.rb +0 -48
  250. data/spec/grape/integration/rack_spec.rb +0 -51
  251. data/spec/grape/loading_spec.rb +0 -44
  252. data/spec/grape/middleware/auth/base_spec.rb +0 -31
  253. data/spec/grape/middleware/auth/dsl_spec.rb +0 -60
  254. data/spec/grape/middleware/auth/strategies_spec.rb +0 -120
  255. data/spec/grape/middleware/base_spec.rb +0 -221
  256. data/spec/grape/middleware/error_spec.rb +0 -85
  257. data/spec/grape/middleware/exception_spec.rb +0 -294
  258. data/spec/grape/middleware/formatter_spec.rb +0 -461
  259. data/spec/grape/middleware/globals_spec.rb +0 -30
  260. data/spec/grape/middleware/stack_spec.rb +0 -155
  261. data/spec/grape/middleware/versioner/accept_version_header_spec.rb +0 -122
  262. data/spec/grape/middleware/versioner/header_spec.rb +0 -345
  263. data/spec/grape/middleware/versioner/param_spec.rb +0 -171
  264. data/spec/grape/middleware/versioner/path_spec.rb +0 -62
  265. data/spec/grape/middleware/versioner_spec.rb +0 -21
  266. data/spec/grape/named_api_spec.rb +0 -19
  267. data/spec/grape/parser_spec.rb +0 -86
  268. data/spec/grape/path_spec.rb +0 -252
  269. data/spec/grape/presenters/presenter_spec.rb +0 -71
  270. data/spec/grape/request_spec.rb +0 -126
  271. data/spec/grape/util/inheritable_setting_spec.rb +0 -242
  272. data/spec/grape/util/inheritable_values_spec.rb +0 -79
  273. data/spec/grape/util/reverse_stackable_values_spec.rb +0 -134
  274. data/spec/grape/util/stackable_values_spec.rb +0 -128
  275. data/spec/grape/util/strict_hash_configuration_spec.rb +0 -38
  276. data/spec/grape/validations/attributes_doc_spec.rb +0 -153
  277. data/spec/grape/validations/instance_behaivour_spec.rb +0 -43
  278. data/spec/grape/validations/multiple_attributes_iterator_spec.rb +0 -38
  279. data/spec/grape/validations/params_scope_spec.rb +0 -1420
  280. data/spec/grape/validations/single_attribute_iterator_spec.rb +0 -56
  281. data/spec/grape/validations/types/array_coercer_spec.rb +0 -33
  282. data/spec/grape/validations/types/primitive_coercer_spec.rb +0 -150
  283. data/spec/grape/validations/types/set_coercer_spec.rb +0 -32
  284. data/spec/grape/validations/types_spec.rb +0 -111
  285. data/spec/grape/validations/validators/all_or_none_spec.rb +0 -162
  286. data/spec/grape/validations/validators/allow_blank_spec.rb +0 -575
  287. data/spec/grape/validations/validators/at_least_one_of_spec.rb +0 -205
  288. data/spec/grape/validations/validators/base_spec.rb +0 -38
  289. data/spec/grape/validations/validators/coerce_spec.rb +0 -1261
  290. data/spec/grape/validations/validators/default_spec.rb +0 -463
  291. data/spec/grape/validations/validators/exactly_one_of_spec.rb +0 -233
  292. data/spec/grape/validations/validators/except_values_spec.rb +0 -192
  293. data/spec/grape/validations/validators/mutual_exclusion_spec.rb +0 -214
  294. data/spec/grape/validations/validators/presence_spec.rb +0 -315
  295. data/spec/grape/validations/validators/regexp_spec.rb +0 -161
  296. data/spec/grape/validations/validators/same_as_spec.rb +0 -57
  297. data/spec/grape/validations/validators/values_spec.rb +0 -733
  298. data/spec/grape/validations/validators/zh-CN.yml +0 -10
  299. data/spec/grape/validations_spec.rb +0 -2030
  300. data/spec/integration/eager_load/eager_load_spec.rb +0 -15
  301. data/spec/integration/multi_json/json_spec.rb +0 -7
  302. data/spec/integration/multi_xml/xml_spec.rb +0 -7
  303. data/spec/shared/deprecated_class_examples.rb +0 -16
  304. data/spec/shared/versioning_examples.rb +0 -215
  305. data/spec/spec_helper.rb +0 -52
  306. data/spec/support/basic_auth_encode_helpers.rb +0 -11
  307. data/spec/support/chunks.rb +0 -14
  308. data/spec/support/content_type_helpers.rb +0 -15
  309. data/spec/support/endpoint_faker.rb +0 -25
  310. data/spec/support/file_streamer.rb +0 -13
  311. data/spec/support/integer_helpers.rb +0 -13
  312. data/spec/support/versioned_helpers.rb +0 -55
data/lib/grape.rb CHANGED
@@ -1,305 +1,92 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'logger'
4
- require 'rack'
5
- require 'rack/builder'
6
- require 'rack/accept'
7
- require 'rack/auth/basic'
8
- require 'rack/auth/digest/md5'
9
- require 'set'
10
- require 'bigdecimal'
11
- require 'date'
12
4
  require 'active_support'
13
- require 'active_support/concern'
14
- require 'active_support/configurable'
15
- require 'active_support/version'
16
- require 'active_support/isolated_execution_state' if ActiveSupport::VERSION::MAJOR > 6
17
- require 'active_support/core_ext/array/conversions'
18
- require 'active_support/core_ext/array/extract_options'
5
+ require 'active_support/isolated_execution_state'
6
+ require 'active_support/core_ext/array/conversions' # to_xml
19
7
  require 'active_support/core_ext/array/wrap'
20
- require 'active_support/core_ext/hash/conversions'
8
+ require 'active_support/core_ext/hash/conversions' # to_xml
21
9
  require 'active_support/core_ext/hash/deep_merge'
22
- require 'active_support/core_ext/hash/except'
23
- require 'active_support/core_ext/hash/indifferent_access'
24
- require 'active_support/core_ext/hash/keys'
25
- require 'active_support/core_ext/hash/reverse_merge'
26
- require 'active_support/core_ext/hash/slice'
10
+ require 'active_support/core_ext/hash/deep_transform_values'
11
+ require 'active_support/core_ext/hash/indifferent_access' # nested_under_indifferent_access, required by HashWithIndifferentAccess.new
12
+ require 'active_support/hash_with_indifferent_access'
13
+ require 'active_support/core_ext/module/delegation' # delegate_missing_to
27
14
  require 'active_support/core_ext/object/blank'
15
+ require 'active_support/core_ext/object/deep_dup'
28
16
  require 'active_support/core_ext/object/duplicable'
29
- require 'active_support/dependencies/autoload'
17
+ require 'active_support/core_ext/string/inflections' # demodulize, underscore
30
18
  require 'active_support/deprecation'
31
- require 'active_support/inflector'
19
+ require 'active_support/ordered_options'
32
20
  require 'active_support/notifications'
33
- require 'i18n'
21
+
22
+ require 'English'
23
+ require 'bigdecimal'
24
+ require 'date'
25
+ require 'dry-types'
26
+ require 'dry-configurable'
27
+ require 'forwardable'
28
+ require 'json'
29
+ require 'mustermann'
30
+ require 'mustermann/ast/pattern'
31
+ require 'rack'
32
+ require 'rack/auth/basic'
33
+ require 'rack/builder'
34
+ require 'rack/head'
35
+ require 'singleton'
36
+ require 'zeitwerk'
37
+
38
+ loader = Zeitwerk::Loader.for_gem
39
+ loader.inflector.inflect(
40
+ 'api' => 'API',
41
+ 'dsl' => 'DSL'
42
+ )
43
+ railtie = "#{__dir__}/grape/railtie.rb"
44
+ loader.do_not_eager_load(railtie)
45
+ loader.setup
34
46
 
35
47
  I18n.load_path << File.expand_path('grape/locale/en.yml', __dir__)
36
48
 
37
49
  module Grape
38
- include ActiveSupport::Configurable
39
- extend ::ActiveSupport::Autoload
40
-
41
- eager_autoload do
42
- autoload :API
43
- autoload :Endpoint
44
-
45
- autoload :Namespace
46
-
47
- autoload :Path
48
- autoload :Cookies
49
- autoload :Validations
50
- autoload :ErrorFormatter
51
- autoload :Formatter
52
- autoload :Parser
53
- autoload :Request
54
- autoload :Env, 'grape/util/env'
55
- autoload :Json, 'grape/util/json'
56
- autoload :Xml, 'grape/util/xml'
57
- autoload :DryTypes
58
- end
59
-
60
- module Http
61
- extend ::ActiveSupport::Autoload
62
- eager_autoload do
63
- autoload :Headers
64
- end
65
- end
66
-
67
- module Exceptions
68
- extend ::ActiveSupport::Autoload
69
- eager_autoload do
70
- autoload :Base
71
- autoload :Validation
72
- autoload :ValidationArrayErrors
73
- autoload :ValidationErrors
74
- autoload :MissingVendorOption
75
- autoload :MissingMimeType
76
- autoload :MissingOption
77
- autoload :InvalidFormatter
78
- autoload :InvalidVersionerOption
79
- autoload :UnknownValidator
80
- autoload :UnknownOptions
81
- autoload :UnknownParameter
82
- autoload :InvalidWithOptionForRepresent
83
- autoload :IncompatibleOptionValues
84
- autoload :MissingGroupType
85
- autoload :UnsupportedGroupType
86
- autoload :InvalidMessageBody
87
- autoload :InvalidAcceptHeader
88
- autoload :InvalidVersionHeader
89
- autoload :MethodNotAllowed
90
- autoload :InvalidResponse
91
- autoload :EmptyMessageBody
92
- autoload :TooManyMultipartFiles
93
- autoload :MissingGroupTypeError, 'grape/exceptions/missing_group_type'
94
- autoload :UnsupportedGroupTypeError, 'grape/exceptions/unsupported_group_type'
95
- end
96
- end
97
-
98
- module Extensions
99
- extend ::ActiveSupport::Autoload
100
- eager_autoload do
101
- autoload :Hash
102
- end
103
- module ActiveSupport
104
- extend ::ActiveSupport::Autoload
105
- eager_autoload do
106
- autoload :HashWithIndifferentAccess
107
- end
108
- end
109
-
110
- module Hashie
111
- extend ::ActiveSupport::Autoload
112
- eager_autoload do
113
- autoload :Mash
114
- end
115
- end
116
- end
117
-
118
- module Middleware
119
- extend ::ActiveSupport::Autoload
120
- eager_autoload do
121
- autoload :Base
122
- autoload :Versioner
123
- autoload :Formatter
124
- autoload :Error
125
- autoload :Globals
126
- autoload :Stack
127
- autoload :Helpers
128
- end
129
-
130
- module Auth
131
- extend ::ActiveSupport::Autoload
132
- eager_autoload do
133
- autoload :Base
134
- autoload :DSL
135
- autoload :StrategyInfo
136
- autoload :Strategies
137
- end
138
- end
139
-
140
- module Versioner
141
- extend ::ActiveSupport::Autoload
142
- eager_autoload do
143
- autoload :Path
144
- autoload :Header
145
- autoload :Param
146
- autoload :AcceptVersionHeader
147
- end
148
- end
149
- end
150
-
151
- module Util
152
- extend ::ActiveSupport::Autoload
153
- eager_autoload do
154
- autoload :InheritableValues
155
- autoload :StackableValues
156
- autoload :ReverseStackableValues
157
- autoload :InheritableSetting
158
- autoload :StrictHashConfiguration
159
- autoload :Registrable
160
- end
161
- end
162
-
163
- module ErrorFormatter
164
- extend ::ActiveSupport::Autoload
165
- eager_autoload do
166
- autoload :Base
167
- autoload :Json
168
- autoload :Txt
169
- autoload :Xml
170
- end
171
- end
172
-
173
- module Formatter
174
- extend ::ActiveSupport::Autoload
175
- eager_autoload do
176
- autoload :Json
177
- autoload :SerializableHash
178
- autoload :Txt
179
- autoload :Xml
180
- end
181
- end
182
-
183
- module Parser
184
- extend ::ActiveSupport::Autoload
185
- eager_autoload do
186
- autoload :Json
187
- autoload :Xml
188
- end
189
- end
190
-
191
- module DSL
192
- extend ::ActiveSupport::Autoload
193
- eager_autoload do
194
- autoload :API
195
- autoload :Callbacks
196
- autoload :Settings
197
- autoload :Configuration
198
- autoload :InsideRoute
199
- autoload :Helpers
200
- autoload :Middleware
201
- autoload :Parameters
202
- autoload :RequestResponse
203
- autoload :Routing
204
- autoload :Validations
205
- autoload :Logger
206
- autoload :Desc
207
- end
208
- end
209
-
210
- class API
211
- extend ::ActiveSupport::Autoload
212
- eager_autoload do
213
- autoload :Helpers
214
- end
215
- end
216
-
217
- module Presenters
218
- extend ::ActiveSupport::Autoload
219
- eager_autoload do
220
- autoload :Presenter
221
- end
222
- end
223
-
224
- module ServeStream
225
- extend ::ActiveSupport::Autoload
226
- eager_autoload do
227
- autoload :FileBody
228
- autoload :SendfileResponse
229
- autoload :StreamResponse
230
- end
231
- end
232
-
233
- module Validations
234
- extend ::ActiveSupport::Autoload
235
-
236
- eager_autoload do
237
- autoload :AttributesIterator
238
- autoload :MultipleAttributesIterator
239
- autoload :SingleAttributeIterator
240
- autoload :Types
241
- autoload :ParamsScope
242
- autoload :ValidatorFactory
243
- autoload :Base, 'grape/validations/validators/base'
244
- end
245
-
246
- module Types
247
- extend ::ActiveSupport::Autoload
248
-
249
- eager_autoload do
250
- autoload :InvalidValue
251
- autoload :DryTypeCoercer
252
- autoload :ArrayCoercer
253
- autoload :SetCoercer
254
- autoload :PrimitiveCoercer
255
- autoload :CustomTypeCoercer
256
- autoload :CustomTypeCollectionCoercer
257
- autoload :MultipleTypeCoercer
258
- autoload :VariantCollectionCoercer
259
- end
260
- end
261
-
262
- module Validators
263
- extend ::ActiveSupport::Autoload
264
-
265
- eager_autoload do
266
- autoload :Base
267
- autoload :MultipleParamsBase
268
- autoload :AllOrNoneOfValidator
269
- autoload :AllowBlankValidator
270
- autoload :AsValidator
271
- autoload :AtLeastOneOfValidator
272
- autoload :CoerceValidator
273
- autoload :DefaultValidator
274
- autoload :ExactlyOneOfValidator
275
- autoload :ExceptValuesValidator
276
- autoload :MutualExclusionValidator
277
- autoload :PresenceValidator
278
- autoload :RegexpValidator
279
- autoload :SameAsValidator
280
- autoload :ValuesValidator
281
- end
282
- end
283
- end
284
-
285
- module Types
286
- extend ::ActiveSupport::Autoload
287
-
288
- eager_autoload do
289
- autoload :InvalidValue
290
- end
291
- end
292
-
293
- configure do |config|
294
- config.param_builder = Grape::Extensions::ActiveSupport::HashWithIndifferentAccess::ParamBuilder
295
- config.compile_methods!
50
+ extend Dry::Configurable
51
+
52
+ setting :param_builder, default: :hash_with_indifferent_access
53
+ setting :lint, default: false
54
+ setting :warn_on_helper_overrides, default: false
55
+
56
+ HTTP_SUPPORTED_METHODS = [
57
+ Rack::GET,
58
+ Rack::POST,
59
+ Rack::PUT,
60
+ Rack::PATCH,
61
+ Rack::DELETE,
62
+ Rack::HEAD,
63
+ Rack::OPTIONS
64
+ ].freeze
65
+
66
+ # Rack errors that should be rescued and wrapped as Grape::Exceptions::RequestError.
67
+ # Rack 3.1.0 introduced Rack::BadRequest as a marker module included by all bad request
68
+ # exception classes, allowing a single rescue entry to cover them all.
69
+ # Before, these errors are raised as individual exception classes.
70
+ RACK_ERRORS =
71
+ if Gem::Version.new(Rack.release) >= Gem::Version.new('3.1.0')
72
+ [EOFError, Rack::BadRequest]
73
+ else
74
+ [
75
+ EOFError,
76
+ Rack::Multipart::MultipartPartLimitError,
77
+ Rack::Multipart::MultipartTotalPartLimitError,
78
+ Rack::Utils::ParameterTypeError,
79
+ Rack::Utils::InvalidParameterError,
80
+ Rack::QueryParser::ParamsTooDeepError
81
+ ]
82
+ end.freeze
83
+
84
+ def self.deprecator
85
+ @deprecator ||= ActiveSupport::Deprecation.new('2.0', 'Grape')
296
86
  end
297
87
  end
298
88
 
299
- require 'grape/content_types'
300
-
301
- require 'grape/util/lazy_value'
302
- require 'grape/util/lazy_block'
303
- require 'grape/util/endpoint_configuration'
304
-
305
- require 'grape/version'
89
+ # https://api.rubyonrails.org/classes/ActiveSupport/Deprecation.html
90
+ # adding Grape.deprecator to Rails App if any
91
+ require 'grape/railtie' if defined?(Rails::Railtie)
92
+ loader.eager_load