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
@@ -1,261 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module DSL
5
- module SettingsSpec
6
- class Dummy
7
- include Grape::DSL::Settings
8
-
9
- def reset_validations!; end
10
- end
11
- end
12
-
13
- describe Settings do
14
- subject { SettingsSpec::Dummy.new }
15
-
16
- describe '#unset' do
17
- it 'deletes a key from settings' do
18
- subject.namespace_setting :dummy, 1
19
- expect(subject.inheritable_setting.namespace.keys).to include(:dummy)
20
-
21
- subject.unset :namespace, :dummy
22
- expect(subject.inheritable_setting.namespace.keys).not_to include(:dummy)
23
- end
24
- end
25
-
26
- describe '#get_or_set' do
27
- it 'sets a values' do
28
- subject.get_or_set :namespace, :dummy, 1
29
- expect(subject.namespace_setting(:dummy)).to eq 1
30
- end
31
-
32
- it 'returns a value when nil is new value is provided' do
33
- subject.get_or_set :namespace, :dummy, 1
34
- expect(subject.get_or_set(:namespace, :dummy, nil)).to eq 1
35
- end
36
- end
37
-
38
- describe '#global_setting' do
39
- it 'delegates to get_or_set' do
40
- expect(subject).to receive(:get_or_set).with(:global, :dummy, 1)
41
- subject.global_setting(:dummy, 1)
42
- end
43
- end
44
-
45
- describe '#unset_global_setting' do
46
- it 'delegates to unset' do
47
- expect(subject).to receive(:unset).with(:global, :dummy)
48
- subject.unset_global_setting(:dummy)
49
- end
50
- end
51
-
52
- describe '#route_setting' do
53
- it 'delegates to get_or_set' do
54
- expect(subject).to receive(:get_or_set).with(:route, :dummy, 1)
55
- subject.route_setting(:dummy, 1)
56
- end
57
-
58
- it 'sets a value until the next route' do
59
- subject.route_setting :some_thing, :foo_bar
60
- expect(subject.route_setting(:some_thing)).to eq :foo_bar
61
-
62
- subject.route_end
63
-
64
- expect(subject.route_setting(:some_thing)).to be_nil
65
- end
66
- end
67
-
68
- describe '#unset_route_setting' do
69
- it 'delegates to unset' do
70
- expect(subject).to receive(:unset).with(:route, :dummy)
71
- subject.unset_route_setting(:dummy)
72
- end
73
- end
74
-
75
- describe '#namespace_setting' do
76
- it 'delegates to get_or_set' do
77
- expect(subject).to receive(:get_or_set).with(:namespace, :dummy, 1)
78
- subject.namespace_setting(:dummy, 1)
79
- end
80
-
81
- it 'sets a value until the end of a namespace' do
82
- subject.namespace_start
83
-
84
- subject.namespace_setting :some_thing, :foo_bar
85
- expect(subject.namespace_setting(:some_thing)).to eq :foo_bar
86
-
87
- subject.namespace_end
88
-
89
- expect(subject.namespace_setting(:some_thing)).to be_nil
90
- end
91
-
92
- it 'resets values after leaving nested namespaces' do
93
- subject.namespace_start
94
-
95
- subject.namespace_setting :some_thing, :foo_bar
96
- expect(subject.namespace_setting(:some_thing)).to eq :foo_bar
97
-
98
- subject.namespace_start
99
-
100
- expect(subject.namespace_setting(:some_thing)).to be_nil
101
-
102
- subject.namespace_end
103
- expect(subject.namespace_setting(:some_thing)).to eq :foo_bar
104
-
105
- subject.namespace_end
106
-
107
- expect(subject.namespace_setting(:some_thing)).to be_nil
108
- end
109
- end
110
-
111
- describe '#unset_namespace_setting' do
112
- it 'delegates to unset' do
113
- expect(subject).to receive(:unset).with(:namespace, :dummy)
114
- subject.unset_namespace_setting(:dummy)
115
- end
116
- end
117
-
118
- describe '#namespace_inheritable' do
119
- it 'delegates to get_or_set' do
120
- expect(subject).to receive(:get_or_set).with(:namespace_inheritable, :dummy, 1)
121
- subject.namespace_inheritable(:dummy, 1)
122
- end
123
-
124
- it 'inherits values from surrounding namespace' do
125
- subject.namespace_start
126
-
127
- subject.namespace_inheritable(:some_thing, :foo_bar)
128
- expect(subject.namespace_inheritable(:some_thing)).to eq :foo_bar
129
-
130
- subject.namespace_start
131
-
132
- expect(subject.namespace_inheritable(:some_thing)).to eq :foo_bar
133
-
134
- subject.namespace_inheritable(:some_thing, :foo_bar_2)
135
-
136
- expect(subject.namespace_inheritable(:some_thing)).to eq :foo_bar_2
137
-
138
- subject.namespace_end
139
- expect(subject.namespace_inheritable(:some_thing)).to eq :foo_bar
140
- subject.namespace_end
141
- end
142
- end
143
-
144
- describe '#unset_namespace_inheritable' do
145
- it 'delegates to unset' do
146
- expect(subject).to receive(:unset).with(:namespace_inheritable, :dummy)
147
- subject.unset_namespace_inheritable(:dummy)
148
- end
149
- end
150
-
151
- describe '#namespace_stackable' do
152
- it 'delegates to get_or_set' do
153
- expect(subject).to receive(:get_or_set).with(:namespace_stackable, :dummy, 1)
154
- subject.namespace_stackable(:dummy, 1)
155
- end
156
-
157
- it 'stacks values from surrounding namespace' do
158
- subject.namespace_start
159
-
160
- subject.namespace_stackable(:some_thing, :foo_bar)
161
- expect(subject.namespace_stackable(:some_thing)).to eq [:foo_bar]
162
-
163
- subject.namespace_start
164
-
165
- expect(subject.namespace_stackable(:some_thing)).to eq [:foo_bar]
166
-
167
- subject.namespace_stackable(:some_thing, :foo_bar_2)
168
-
169
- expect(subject.namespace_stackable(:some_thing)).to eq %i[foo_bar foo_bar_2]
170
-
171
- subject.namespace_end
172
- expect(subject.namespace_stackable(:some_thing)).to eq [:foo_bar]
173
- subject.namespace_end
174
- end
175
- end
176
-
177
- describe '#unset_namespace_stackable' do
178
- it 'delegates to unset' do
179
- expect(subject).to receive(:unset).with(:namespace_stackable, :dummy)
180
- subject.unset_namespace_stackable(:dummy)
181
- end
182
- end
183
-
184
- describe '#api_class_setting' do
185
- it 'delegates to get_or_set' do
186
- expect(subject).to receive(:get_or_set).with(:api_class, :dummy, 1)
187
- subject.api_class_setting(:dummy, 1)
188
- end
189
- end
190
-
191
- describe '#unset_api_class_setting' do
192
- it 'delegates to unset' do
193
- expect(subject).to receive(:unset).with(:api_class, :dummy)
194
- subject.unset_api_class_setting(:dummy)
195
- end
196
- end
197
-
198
- describe '#within_namespace' do
199
- it 'calls start and end for a namespace' do
200
- expect(subject).to receive :namespace_start
201
- expect(subject).to receive :namespace_end
202
-
203
- subject.within_namespace do
204
- end
205
- end
206
-
207
- it 'returns the last result' do
208
- result = subject.within_namespace do
209
- 1
210
- end
211
-
212
- expect(result).to eq 1
213
- end
214
- end
215
-
216
- describe 'complex scenario' do
217
- it 'plays well' do
218
- obj1 = SettingsSpec::Dummy.new
219
- obj2 = SettingsSpec::Dummy.new
220
- obj3 = SettingsSpec::Dummy.new
221
-
222
- obj1_copy = nil
223
- obj2_copy = nil
224
- obj3_copy = nil
225
-
226
- obj1.within_namespace do
227
- obj1.namespace_stackable(:some_thing, :obj1)
228
- expect(obj1.namespace_stackable(:some_thing)).to eq [:obj1]
229
- obj1_copy = obj1.inheritable_setting.point_in_time_copy
230
- end
231
-
232
- expect(obj1.namespace_stackable(:some_thing)).to eq []
233
- expect(obj1_copy.namespace_stackable[:some_thing]).to eq [:obj1]
234
-
235
- obj2.within_namespace do
236
- obj2.namespace_stackable(:some_thing, :obj2)
237
- expect(obj2.namespace_stackable(:some_thing)).to eq [:obj2]
238
- obj2_copy = obj2.inheritable_setting.point_in_time_copy
239
- end
240
-
241
- expect(obj2.namespace_stackable(:some_thing)).to eq []
242
- expect(obj2_copy.namespace_stackable[:some_thing]).to eq [:obj2]
243
-
244
- obj3.within_namespace do
245
- obj3.namespace_stackable(:some_thing, :obj3)
246
- expect(obj3.namespace_stackable(:some_thing)).to eq [:obj3]
247
- obj3_copy = obj3.inheritable_setting.point_in_time_copy
248
- end
249
-
250
- expect(obj3.namespace_stackable(:some_thing)).to eq []
251
- expect(obj3_copy.namespace_stackable[:some_thing]).to eq [:obj3]
252
-
253
- obj1.top_level_setting.inherit_from obj2_copy.point_in_time_copy
254
- obj2.top_level_setting.inherit_from obj3_copy.point_in_time_copy
255
-
256
- expect(obj1_copy.namespace_stackable[:some_thing]).to eq %i[obj3 obj2 obj1]
257
- end
258
- end
259
- end
260
- end
261
- end
@@ -1,55 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module DSL
5
- module ValidationsSpec
6
- class Dummy
7
- include Grape::DSL::Validations
8
- end
9
- end
10
-
11
- describe Validations do
12
- subject { ValidationsSpec::Dummy }
13
-
14
- describe '.reset_validations!' do
15
- before do
16
- subject.namespace_stackable :declared_params, ['dummy']
17
- subject.namespace_stackable :validations, ['dummy']
18
- subject.namespace_stackable :params, ['dummy']
19
- subject.route_setting :description, description: 'lol', params: ['dummy']
20
- subject.reset_validations!
21
- end
22
-
23
- after do
24
- subject.unset_route_setting :description
25
- end
26
-
27
- it 'resets declared params' do
28
- expect(subject.namespace_stackable(:declared_params)).to eq []
29
- end
30
-
31
- it 'resets validations' do
32
- expect(subject.namespace_stackable(:validations)).to eq []
33
- end
34
-
35
- it 'resets params' do
36
- expect(subject.namespace_stackable(:params)).to eq []
37
- end
38
-
39
- it 'does not reset documentation description' do
40
- expect(subject.route_setting(:description)[:description]).to eq 'lol'
41
- end
42
- end
43
-
44
- describe '.params' do
45
- it 'returns a ParamsScope' do
46
- expect(subject.params).to be_a Grape::Validations::ParamsScope
47
- end
48
-
49
- it 'evaluates block' do
50
- expect { subject.params { raise 'foo' } }.to raise_error RuntimeError, 'foo'
51
- end
52
- end
53
- end
54
- end
55
- end