grape 1.7.1 → 2.0.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 (163) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +37 -1
  3. data/CONTRIBUTING.md +1 -1
  4. data/README.md +30 -25
  5. data/UPGRADING.md +35 -0
  6. data/grape.gemspec +3 -6
  7. data/lib/grape/api.rb +2 -2
  8. data/lib/grape/content_types.rb +2 -8
  9. data/lib/grape/dsl/desc.rb +1 -1
  10. data/lib/grape/dsl/inside_route.rb +11 -11
  11. data/lib/grape/dsl/request_response.rb +2 -1
  12. data/lib/grape/dsl/settings.rb +2 -6
  13. data/lib/grape/endpoint.rb +28 -18
  14. data/lib/grape/error_formatter/base.rb +1 -1
  15. data/lib/grape/exceptions/base.rb +2 -2
  16. data/lib/grape/exceptions/missing_group_type.rb +1 -6
  17. data/lib/grape/exceptions/unsupported_group_type.rb +1 -6
  18. data/lib/grape/exceptions/validation_errors.rb +1 -6
  19. data/lib/grape/extensions/active_support/hash_with_indifferent_access.rb +3 -3
  20. data/lib/grape/extensions/hash.rb +4 -7
  21. data/lib/grape/extensions/hashie/mash.rb +3 -3
  22. data/lib/grape/formatter/serializable_hash.rb +7 -7
  23. data/lib/grape/http/headers.rb +12 -2
  24. data/lib/grape/middleware/auth/base.rb +1 -1
  25. data/lib/grape/middleware/auth/strategies.rb +1 -2
  26. data/lib/grape/middleware/error.rb +5 -5
  27. data/lib/grape/middleware/formatter.rb +6 -6
  28. data/lib/grape/middleware/versioner/header.rb +11 -19
  29. data/lib/grape/railtie.rb +9 -0
  30. data/lib/grape/request.rb +8 -2
  31. data/lib/grape/router/route.rb +1 -3
  32. data/lib/grape/util/lazy_value.rb +3 -11
  33. data/lib/grape/util/strict_hash_configuration.rb +3 -4
  34. data/lib/grape/validations/multiple_attributes_iterator.rb +1 -1
  35. data/lib/grape/validations/params_scope.rb +8 -2
  36. data/lib/grape/validations/single_attribute_iterator.rb +3 -1
  37. data/lib/grape/validations/types/custom_type_coercer.rb +2 -16
  38. data/lib/grape/validations/validators/base.rb +9 -20
  39. data/lib/grape/validations/validators/default_validator.rb +2 -20
  40. data/lib/grape/validations/validators/multiple_params_base.rb +4 -8
  41. data/lib/grape/validations/validators/values_validator.rb +14 -5
  42. data/lib/grape/version.rb +1 -1
  43. data/lib/grape.rb +26 -5
  44. metadata +13 -253
  45. data/lib/grape/config.rb +0 -34
  46. data/lib/grape/extensions/deep_mergeable_hash.rb +0 -21
  47. data/lib/grape/extensions/deep_symbolize_hash.rb +0 -32
  48. data/spec/grape/api/custom_validations_spec.rb +0 -256
  49. data/spec/grape/api/deeply_included_options_spec.rb +0 -56
  50. data/spec/grape/api/defines_boolean_in_params_spec.rb +0 -38
  51. data/spec/grape/api/documentation_spec.rb +0 -59
  52. data/spec/grape/api/inherited_helpers_spec.rb +0 -114
  53. data/spec/grape/api/instance_spec.rb +0 -103
  54. data/spec/grape/api/invalid_format_spec.rb +0 -45
  55. data/spec/grape/api/namespace_parameters_in_route_spec.rb +0 -38
  56. data/spec/grape/api/nested_helpers_spec.rb +0 -50
  57. data/spec/grape/api/optional_parameters_in_route_spec.rb +0 -43
  58. data/spec/grape/api/parameters_modification_spec.rb +0 -41
  59. data/spec/grape/api/patch_method_helpers_spec.rb +0 -79
  60. data/spec/grape/api/recognize_path_spec.rb +0 -21
  61. data/spec/grape/api/required_parameters_in_route_spec.rb +0 -37
  62. data/spec/grape/api/required_parameters_with_invalid_method_spec.rb +0 -26
  63. data/spec/grape/api/routes_with_requirements_spec.rb +0 -59
  64. data/spec/grape/api/shared_helpers_exactly_one_of_spec.rb +0 -41
  65. data/spec/grape/api/shared_helpers_spec.rb +0 -36
  66. data/spec/grape/api_remount_spec.rb +0 -473
  67. data/spec/grape/api_spec.rb +0 -4347
  68. data/spec/grape/config_spec.rb +0 -17
  69. data/spec/grape/dsl/callbacks_spec.rb +0 -45
  70. data/spec/grape/dsl/desc_spec.rb +0 -101
  71. data/spec/grape/dsl/headers_spec.rb +0 -62
  72. data/spec/grape/dsl/helpers_spec.rb +0 -100
  73. data/spec/grape/dsl/inside_route_spec.rb +0 -535
  74. data/spec/grape/dsl/logger_spec.rb +0 -24
  75. data/spec/grape/dsl/middleware_spec.rb +0 -60
  76. data/spec/grape/dsl/parameters_spec.rb +0 -180
  77. data/spec/grape/dsl/request_response_spec.rb +0 -206
  78. data/spec/grape/dsl/routing_spec.rb +0 -275
  79. data/spec/grape/dsl/settings_spec.rb +0 -261
  80. data/spec/grape/dsl/validations_spec.rb +0 -55
  81. data/spec/grape/endpoint/declared_spec.rb +0 -846
  82. data/spec/grape/endpoint_spec.rb +0 -1085
  83. data/spec/grape/entity_spec.rb +0 -336
  84. data/spec/grape/exceptions/base_spec.rb +0 -81
  85. data/spec/grape/exceptions/body_parse_errors_spec.rb +0 -145
  86. data/spec/grape/exceptions/invalid_accept_header_spec.rb +0 -358
  87. data/spec/grape/exceptions/invalid_formatter_spec.rb +0 -15
  88. data/spec/grape/exceptions/invalid_response_spec.rb +0 -11
  89. data/spec/grape/exceptions/invalid_versioner_option_spec.rb +0 -15
  90. data/spec/grape/exceptions/missing_group_type_spec.rb +0 -21
  91. data/spec/grape/exceptions/missing_mime_type_spec.rb +0 -17
  92. data/spec/grape/exceptions/missing_option_spec.rb +0 -15
  93. data/spec/grape/exceptions/unknown_options_spec.rb +0 -15
  94. data/spec/grape/exceptions/unknown_validator_spec.rb +0 -15
  95. data/spec/grape/exceptions/unsupported_group_type_spec.rb +0 -23
  96. data/spec/grape/exceptions/validation_errors_spec.rb +0 -92
  97. data/spec/grape/exceptions/validation_spec.rb +0 -19
  98. data/spec/grape/extensions/param_builders/hash_spec.rb +0 -83
  99. data/spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb +0 -105
  100. data/spec/grape/extensions/param_builders/hashie/mash_spec.rb +0 -79
  101. data/spec/grape/integration/global_namespace_function_spec.rb +0 -29
  102. data/spec/grape/integration/rack_sendfile_spec.rb +0 -48
  103. data/spec/grape/integration/rack_spec.rb +0 -51
  104. data/spec/grape/loading_spec.rb +0 -44
  105. data/spec/grape/middleware/auth/base_spec.rb +0 -31
  106. data/spec/grape/middleware/auth/dsl_spec.rb +0 -60
  107. data/spec/grape/middleware/auth/strategies_spec.rb +0 -120
  108. data/spec/grape/middleware/base_spec.rb +0 -221
  109. data/spec/grape/middleware/error_spec.rb +0 -85
  110. data/spec/grape/middleware/exception_spec.rb +0 -294
  111. data/spec/grape/middleware/formatter_spec.rb +0 -461
  112. data/spec/grape/middleware/globals_spec.rb +0 -30
  113. data/spec/grape/middleware/stack_spec.rb +0 -155
  114. data/spec/grape/middleware/versioner/accept_version_header_spec.rb +0 -122
  115. data/spec/grape/middleware/versioner/header_spec.rb +0 -345
  116. data/spec/grape/middleware/versioner/param_spec.rb +0 -171
  117. data/spec/grape/middleware/versioner/path_spec.rb +0 -62
  118. data/spec/grape/middleware/versioner_spec.rb +0 -21
  119. data/spec/grape/named_api_spec.rb +0 -19
  120. data/spec/grape/parser_spec.rb +0 -86
  121. data/spec/grape/path_spec.rb +0 -252
  122. data/spec/grape/presenters/presenter_spec.rb +0 -71
  123. data/spec/grape/request_spec.rb +0 -136
  124. data/spec/grape/util/inheritable_setting_spec.rb +0 -242
  125. data/spec/grape/util/inheritable_values_spec.rb +0 -79
  126. data/spec/grape/util/reverse_stackable_values_spec.rb +0 -134
  127. data/spec/grape/util/stackable_values_spec.rb +0 -128
  128. data/spec/grape/util/strict_hash_configuration_spec.rb +0 -38
  129. data/spec/grape/validations/attributes_doc_spec.rb +0 -153
  130. data/spec/grape/validations/instance_behaivour_spec.rb +0 -43
  131. data/spec/grape/validations/multiple_attributes_iterator_spec.rb +0 -40
  132. data/spec/grape/validations/params_scope_spec.rb +0 -1420
  133. data/spec/grape/validations/single_attribute_iterator_spec.rb +0 -57
  134. data/spec/grape/validations/types/array_coercer_spec.rb +0 -33
  135. data/spec/grape/validations/types/primitive_coercer_spec.rb +0 -150
  136. data/spec/grape/validations/types/set_coercer_spec.rb +0 -32
  137. data/spec/grape/validations/types_spec.rb +0 -111
  138. data/spec/grape/validations/validators/all_or_none_spec.rb +0 -162
  139. data/spec/grape/validations/validators/allow_blank_spec.rb +0 -575
  140. data/spec/grape/validations/validators/at_least_one_of_spec.rb +0 -205
  141. data/spec/grape/validations/validators/coerce_spec.rb +0 -1261
  142. data/spec/grape/validations/validators/default_spec.rb +0 -463
  143. data/spec/grape/validations/validators/exactly_one_of_spec.rb +0 -233
  144. data/spec/grape/validations/validators/except_values_spec.rb +0 -192
  145. data/spec/grape/validations/validators/mutual_exclusion_spec.rb +0 -214
  146. data/spec/grape/validations/validators/presence_spec.rb +0 -315
  147. data/spec/grape/validations/validators/regexp_spec.rb +0 -161
  148. data/spec/grape/validations/validators/same_as_spec.rb +0 -57
  149. data/spec/grape/validations/validators/values_spec.rb +0 -696
  150. data/spec/grape/validations/validators/zh-CN.yml +0 -10
  151. data/spec/grape/validations_spec.rb +0 -2029
  152. data/spec/integration/eager_load/eager_load_spec.rb +0 -15
  153. data/spec/integration/multi_json/json_spec.rb +0 -7
  154. data/spec/integration/multi_xml/xml_spec.rb +0 -7
  155. data/spec/shared/versioning_examples.rb +0 -215
  156. data/spec/spec_helper.rb +0 -52
  157. data/spec/support/basic_auth_encode_helpers.rb +0 -11
  158. data/spec/support/chunks.rb +0 -14
  159. data/spec/support/content_type_helpers.rb +0 -15
  160. data/spec/support/endpoint_faker.rb +0 -25
  161. data/spec/support/file_streamer.rb +0 -13
  162. data/spec/support/integer_helpers.rb +0 -13
  163. 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