dry-validation 0.13.3 → 1.7.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 (207) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +506 -95
  3. data/LICENSE +1 -1
  4. data/README.md +16 -12
  5. data/config/errors.yml +3 -88
  6. data/dry-validation.gemspec +37 -24
  7. data/lib/dry/validation/config.rb +24 -0
  8. data/lib/dry/validation/constants.rb +43 -0
  9. data/lib/dry/validation/contract/class_interface.rb +230 -0
  10. data/lib/dry/validation/contract.rb +171 -0
  11. data/lib/dry/validation/evaluator.rb +224 -0
  12. data/lib/dry/validation/extensions/hints.rb +67 -0
  13. data/lib/dry/validation/extensions/monads.rb +24 -8
  14. data/lib/dry/validation/extensions/predicates_as_macros.rb +75 -0
  15. data/lib/dry/validation/failures.rb +70 -0
  16. data/lib/dry/validation/function.rb +44 -0
  17. data/lib/dry/validation/macro.rb +38 -0
  18. data/lib/dry/validation/macros.rb +104 -0
  19. data/lib/dry/validation/message.rb +80 -80
  20. data/lib/dry/validation/message_set.rb +80 -105
  21. data/lib/dry/validation/messages/resolver.rb +131 -0
  22. data/lib/dry/validation/result.rb +183 -41
  23. data/lib/dry/validation/rule.rb +135 -0
  24. data/lib/dry/validation/schema_ext.rb +19 -0
  25. data/lib/dry/validation/values.rb +104 -0
  26. data/lib/dry/validation/version.rb +3 -1
  27. data/lib/dry/validation.rb +45 -28
  28. data/lib/dry-validation.rb +3 -1
  29. metadata +46 -344
  30. data/.codeclimate.yml +0 -17
  31. data/.gitignore +0 -9
  32. data/.rspec +0 -3
  33. data/.travis.yml +0 -29
  34. data/CONTRIBUTING.md +0 -31
  35. data/Gemfile +0 -25
  36. data/Rakefile +0 -22
  37. data/benchmarks/benchmark_form_invalid.rb +0 -64
  38. data/benchmarks/benchmark_form_valid.rb +0 -64
  39. data/benchmarks/benchmark_schema_invalid_huge.rb +0 -52
  40. data/benchmarks/profile_schema_call_invalid.rb +0 -20
  41. data/benchmarks/profile_schema_call_valid.rb +0 -20
  42. data/benchmarks/profile_schema_definition.rb +0 -14
  43. data/benchmarks/profile_schema_huge_invalid.rb +0 -30
  44. data/benchmarks/profile_schema_messages_invalid.rb +0 -20
  45. data/benchmarks/suite.rb +0 -5
  46. data/examples/basic.rb +0 -15
  47. data/examples/each.rb +0 -14
  48. data/examples/json.rb +0 -12
  49. data/examples/multiple.rb +0 -27
  50. data/examples/nested.rb +0 -22
  51. data/examples/params.rb +0 -11
  52. data/lib/dry/validation/compat/form.rb +0 -67
  53. data/lib/dry/validation/deprecations.rb +0 -24
  54. data/lib/dry/validation/executor.rb +0 -91
  55. data/lib/dry/validation/extensions/struct.rb +0 -32
  56. data/lib/dry/validation/extensions.rb +0 -7
  57. data/lib/dry/validation/input_processor_compiler/json.rb +0 -45
  58. data/lib/dry/validation/input_processor_compiler/params.rb +0 -49
  59. data/lib/dry/validation/input_processor_compiler/sanitizer.rb +0 -47
  60. data/lib/dry/validation/input_processor_compiler.rb +0 -137
  61. data/lib/dry/validation/message_compiler/visitor_opts.rb +0 -37
  62. data/lib/dry/validation/message_compiler.rb +0 -188
  63. data/lib/dry/validation/messages/abstract.rb +0 -119
  64. data/lib/dry/validation/messages/i18n.rb +0 -47
  65. data/lib/dry/validation/messages/namespaced.rb +0 -39
  66. data/lib/dry/validation/messages/yaml.rb +0 -61
  67. data/lib/dry/validation/messages.rb +0 -14
  68. data/lib/dry/validation/predicate_registry.rb +0 -115
  69. data/lib/dry/validation/predicates.rb +0 -19
  70. data/lib/dry/validation/schema/check.rb +0 -37
  71. data/lib/dry/validation/schema/class_interface.rb +0 -190
  72. data/lib/dry/validation/schema/deprecated.rb +0 -30
  73. data/lib/dry/validation/schema/dsl.rb +0 -118
  74. data/lib/dry/validation/schema/form.rb +0 -9
  75. data/lib/dry/validation/schema/json.rb +0 -21
  76. data/lib/dry/validation/schema/key.rb +0 -71
  77. data/lib/dry/validation/schema/params.rb +0 -22
  78. data/lib/dry/validation/schema/rule.rb +0 -202
  79. data/lib/dry/validation/schema/value.rb +0 -211
  80. data/lib/dry/validation/schema.rb +0 -126
  81. data/lib/dry/validation/schema_compiler.rb +0 -81
  82. data/lib/dry/validation/template.rb +0 -66
  83. data/lib/dry/validation/type_specs.rb +0 -70
  84. data/log/.gitkeep +0 -0
  85. data/spec/extensions/monads/result_spec.rb +0 -40
  86. data/spec/extensions/struct/schema_spec.rb +0 -32
  87. data/spec/fixtures/locales/en.yml +0 -8
  88. data/spec/fixtures/locales/pl.yml +0 -22
  89. data/spec/integration/custom_error_messages_spec.rb +0 -54
  90. data/spec/integration/custom_predicates_spec.rb +0 -228
  91. data/spec/integration/hints_spec.rb +0 -170
  92. data/spec/integration/injecting_rules_spec.rb +0 -30
  93. data/spec/integration/json/defining_base_schema_spec.rb +0 -41
  94. data/spec/integration/localized_error_messages_spec.rb +0 -72
  95. data/spec/integration/message_compiler_spec.rb +0 -405
  96. data/spec/integration/messages/i18n_spec.rb +0 -104
  97. data/spec/integration/optional_keys_spec.rb +0 -28
  98. data/spec/integration/params/predicates/array_spec.rb +0 -287
  99. data/spec/integration/params/predicates/empty_spec.rb +0 -263
  100. data/spec/integration/params/predicates/eql_spec.rb +0 -327
  101. data/spec/integration/params/predicates/even_spec.rb +0 -455
  102. data/spec/integration/params/predicates/excluded_from_spec.rb +0 -455
  103. data/spec/integration/params/predicates/excludes_spec.rb +0 -391
  104. data/spec/integration/params/predicates/false_spec.rb +0 -455
  105. data/spec/integration/params/predicates/filled_spec.rb +0 -467
  106. data/spec/integration/params/predicates/format_spec.rb +0 -454
  107. data/spec/integration/params/predicates/gt_spec.rb +0 -519
  108. data/spec/integration/params/predicates/gteq_spec.rb +0 -519
  109. data/spec/integration/params/predicates/included_in_spec.rb +0 -455
  110. data/spec/integration/params/predicates/includes_spec.rb +0 -391
  111. data/spec/integration/params/predicates/key_spec.rb +0 -67
  112. data/spec/integration/params/predicates/lt_spec.rb +0 -519
  113. data/spec/integration/params/predicates/lteq_spec.rb +0 -519
  114. data/spec/integration/params/predicates/max_size_spec.rb +0 -391
  115. data/spec/integration/params/predicates/min_size_spec.rb +0 -391
  116. data/spec/integration/params/predicates/none_spec.rb +0 -265
  117. data/spec/integration/params/predicates/not_eql_spec.rb +0 -327
  118. data/spec/integration/params/predicates/odd_spec.rb +0 -455
  119. data/spec/integration/params/predicates/size/fixed_spec.rb +0 -393
  120. data/spec/integration/params/predicates/size/range_spec.rb +0 -396
  121. data/spec/integration/params/predicates/true_spec.rb +0 -455
  122. data/spec/integration/params/predicates/type_spec.rb +0 -391
  123. data/spec/integration/result_spec.rb +0 -81
  124. data/spec/integration/schema/array_schema_spec.rb +0 -59
  125. data/spec/integration/schema/check_rules_spec.rb +0 -119
  126. data/spec/integration/schema/check_with_nested_el_spec.rb +0 -37
  127. data/spec/integration/schema/check_with_nth_el_spec.rb +0 -25
  128. data/spec/integration/schema/default_settings_spec.rb +0 -11
  129. data/spec/integration/schema/defining_base_schema_spec.rb +0 -41
  130. data/spec/integration/schema/dynamic_predicate_args_spec.rb +0 -43
  131. data/spec/integration/schema/each_with_set_spec.rb +0 -70
  132. data/spec/integration/schema/extending_dsl_spec.rb +0 -27
  133. data/spec/integration/schema/form_spec.rb +0 -236
  134. data/spec/integration/schema/hash_schema_spec.rb +0 -47
  135. data/spec/integration/schema/inheriting_schema_spec.rb +0 -31
  136. data/spec/integration/schema/input_processor_spec.rb +0 -46
  137. data/spec/integration/schema/json/explicit_types_spec.rb +0 -157
  138. data/spec/integration/schema/json_spec.rb +0 -163
  139. data/spec/integration/schema/macros/confirmation_spec.rb +0 -35
  140. data/spec/integration/schema/macros/each_spec.rb +0 -268
  141. data/spec/integration/schema/macros/filled_spec.rb +0 -87
  142. data/spec/integration/schema/macros/input_spec.rb +0 -139
  143. data/spec/integration/schema/macros/maybe_spec.rb +0 -99
  144. data/spec/integration/schema/macros/rule_spec.rb +0 -75
  145. data/spec/integration/schema/macros/value_spec.rb +0 -119
  146. data/spec/integration/schema/macros/when_spec.rb +0 -62
  147. data/spec/integration/schema/nested_schemas_spec.rb +0 -236
  148. data/spec/integration/schema/nested_values_spec.rb +0 -46
  149. data/spec/integration/schema/not_spec.rb +0 -34
  150. data/spec/integration/schema/numbers_spec.rb +0 -19
  151. data/spec/integration/schema/option_with_default_spec.rb +0 -64
  152. data/spec/integration/schema/or_spec.rb +0 -87
  153. data/spec/integration/schema/params/defining_base_schema_spec.rb +0 -41
  154. data/spec/integration/schema/params/explicit_types_spec.rb +0 -195
  155. data/spec/integration/schema/params_spec.rb +0 -234
  156. data/spec/integration/schema/predicate_verification_spec.rb +0 -9
  157. data/spec/integration/schema/predicates/array_spec.rb +0 -295
  158. data/spec/integration/schema/predicates/custom_spec.rb +0 -103
  159. data/spec/integration/schema/predicates/empty_spec.rb +0 -263
  160. data/spec/integration/schema/predicates/eql_spec.rb +0 -327
  161. data/spec/integration/schema/predicates/even_spec.rb +0 -455
  162. data/spec/integration/schema/predicates/excluded_from/array_spec.rb +0 -459
  163. data/spec/integration/schema/predicates/excluded_from/range_spec.rb +0 -459
  164. data/spec/integration/schema/predicates/excludes_spec.rb +0 -391
  165. data/spec/integration/schema/predicates/filled_spec.rb +0 -467
  166. data/spec/integration/schema/predicates/format_spec.rb +0 -455
  167. data/spec/integration/schema/predicates/gt_spec.rb +0 -519
  168. data/spec/integration/schema/predicates/gteq_spec.rb +0 -519
  169. data/spec/integration/schema/predicates/hash_spec.rb +0 -69
  170. data/spec/integration/schema/predicates/included_in/array_spec.rb +0 -459
  171. data/spec/integration/schema/predicates/included_in/range_spec.rb +0 -459
  172. data/spec/integration/schema/predicates/includes_spec.rb +0 -391
  173. data/spec/integration/schema/predicates/key_spec.rb +0 -88
  174. data/spec/integration/schema/predicates/lt_spec.rb +0 -520
  175. data/spec/integration/schema/predicates/lteq_spec.rb +0 -519
  176. data/spec/integration/schema/predicates/max_size_spec.rb +0 -391
  177. data/spec/integration/schema/predicates/min_size_spec.rb +0 -391
  178. data/spec/integration/schema/predicates/none_spec.rb +0 -265
  179. data/spec/integration/schema/predicates/not_eql_spec.rb +0 -391
  180. data/spec/integration/schema/predicates/odd_spec.rb +0 -455
  181. data/spec/integration/schema/predicates/size/fixed_spec.rb +0 -398
  182. data/spec/integration/schema/predicates/size/range_spec.rb +0 -395
  183. data/spec/integration/schema/predicates/type_spec.rb +0 -413
  184. data/spec/integration/schema/reusing_schema_spec.rb +0 -33
  185. data/spec/integration/schema/using_types_spec.rb +0 -135
  186. data/spec/integration/schema/validate_spec.rb +0 -120
  187. data/spec/integration/schema/xor_spec.rb +0 -35
  188. data/spec/integration/schema_builders_spec.rb +0 -17
  189. data/spec/integration/schema_spec.rb +0 -173
  190. data/spec/shared/message_compiler.rb +0 -11
  191. data/spec/shared/predicate_helper.rb +0 -15
  192. data/spec/shared/rule_compiler.rb +0 -8
  193. data/spec/spec_helper.rb +0 -62
  194. data/spec/support/define_struct.rb +0 -25
  195. data/spec/support/matchers.rb +0 -38
  196. data/spec/support/mutant.rb +0 -9
  197. data/spec/support/predicates_integration.rb +0 -7
  198. data/spec/unit/input_processor_compiler/json_spec.rb +0 -283
  199. data/spec/unit/input_processor_compiler/params_spec.rb +0 -328
  200. data/spec/unit/message_compiler/visit_failure_spec.rb +0 -38
  201. data/spec/unit/message_compiler/visit_spec.rb +0 -16
  202. data/spec/unit/message_compiler_spec.rb +0 -7
  203. data/spec/unit/predicate_registry_spec.rb +0 -34
  204. data/spec/unit/schema/key_spec.rb +0 -38
  205. data/spec/unit/schema/rule_spec.rb +0 -42
  206. data/spec/unit/schema/value_spec.rb +0 -131
  207. data/spec/unit/schema_spec.rb +0 -35
@@ -1,459 +0,0 @@
1
- RSpec.describe 'Predicates: Excluded From' do
2
-
3
- context "Array" do
4
-
5
- context 'with required' do
6
- subject(:schema) do
7
- Dry::Validation.Schema do
8
- required(:foo) { excluded_from?([1, 3, 5]) }
9
- end
10
- end
11
-
12
- context 'with valid input' do
13
- let(:input) { { foo: 2 } }
14
-
15
- it 'is successful' do
16
- expect(result).to be_successful
17
- end
18
- end
19
-
20
- context 'with missing input' do
21
- let(:input) { {} }
22
-
23
- it 'is not successful' do
24
- expect(result).to be_failing ['is missing', 'must not be one of: 1, 3, 5']
25
- end
26
- end
27
-
28
- context 'with nil input' do
29
- let(:input) { { foo: nil } }
30
-
31
- it 'is successful' do
32
- expect(result).to be_successful
33
- end
34
- end
35
-
36
- context 'with blank input' do
37
- let(:input) { { foo: '' } }
38
-
39
- it 'is successful' do
40
- expect(result).to be_successful
41
- end
42
- end
43
-
44
- context 'with invalid type' do
45
- let(:input) { { foo: { a: 1 } } }
46
-
47
- it 'is successful' do
48
- expect(result).to be_successful
49
- end
50
- end
51
-
52
- context 'with invalid input' do
53
- let(:input) { { foo: 5 } }
54
-
55
- it 'is not successful' do
56
- expect(result).to be_failing ['must not be one of: 1, 3, 5']
57
- end
58
- end
59
- end
60
-
61
- context 'with optional' do
62
- subject(:schema) do
63
- Dry::Validation.Schema do
64
- optional(:foo) { excluded_from?([1, 3, 5]) }
65
- end
66
- end
67
-
68
- context 'with valid input' do
69
- let(:input) { { foo: 2 } }
70
-
71
- it 'is successful' do
72
- expect(result).to be_successful
73
- end
74
- end
75
-
76
- context 'with missing input' do
77
- let(:input) { {} }
78
-
79
- it 'is successful' do
80
- expect(result).to be_successful
81
- end
82
- end
83
-
84
- context 'with nil input' do
85
- let(:input) { { foo: nil } }
86
-
87
- it 'is successful' do
88
- expect(result).to be_successful
89
- end
90
- end
91
-
92
- context 'with blank input' do
93
- let(:input) { { foo: '' } }
94
-
95
- it 'is successful' do
96
- expect(result).to be_successful
97
- end
98
- end
99
-
100
- context 'with invalid type' do
101
- let(:input) { { foo: { a: 1 } } }
102
-
103
- it 'is successful' do
104
- expect(result).to be_successful
105
- end
106
- end
107
-
108
- context 'with invalid input' do
109
- let(:input) { { foo: 5 } }
110
-
111
- it 'is not successful' do
112
- expect(result).to be_failing ['must not be one of: 1, 3, 5']
113
- end
114
- end
115
- end
116
-
117
- context 'as macro' do
118
- context 'with required' do
119
- context 'with value' do
120
- subject(:schema) do
121
- Dry::Validation.Schema do
122
- required(:foo).value(excluded_from?: [1, 3, 5])
123
- end
124
- end
125
-
126
- context 'with valid input' do
127
- let(:input) { { foo: 2 } }
128
-
129
- it 'is successful' do
130
- expect(result).to be_successful
131
- end
132
- end
133
-
134
- context 'with missing input' do
135
- let(:input) { {} }
136
-
137
- it 'is not successful' do
138
- expect(result).to be_failing ['is missing', 'must not be one of: 1, 3, 5']
139
- end
140
- end
141
-
142
- context 'with nil input' do
143
- let(:input) { { foo: nil } }
144
-
145
- it 'is successful' do
146
- expect(result).to be_successful
147
- end
148
- end
149
-
150
- context 'with blank input' do
151
- let(:input) { { foo: '' } }
152
-
153
- it 'is successful' do
154
- expect(result).to be_successful
155
- end
156
- end
157
-
158
- context 'with invalid type' do
159
- let(:input) { { foo: { a: 1 } } }
160
-
161
- it 'is successful' do
162
- expect(result).to be_successful
163
- end
164
- end
165
-
166
- context 'with invalid input' do
167
- let(:input) { { foo: 5 } }
168
-
169
- it 'is not successful' do
170
- expect(result).to be_failing ['must not be one of: 1, 3, 5']
171
- end
172
- end
173
- end
174
-
175
- context 'with filled' do
176
- subject(:schema) do
177
- Dry::Validation.Schema do
178
- required(:foo).filled(excluded_from?: [1, 3, 5])
179
- end
180
- end
181
-
182
- context 'with valid input' do
183
- let(:input) { { foo: 2 } }
184
-
185
- it 'is successful' do
186
- expect(result).to be_successful
187
- end
188
- end
189
-
190
- context 'with missing input' do
191
- let(:input) { {} }
192
-
193
- it 'is not successful' do
194
- expect(result).to be_failing ['is missing', 'must not be one of: 1, 3, 5']
195
- end
196
- end
197
-
198
- context 'with nil input' do
199
- let(:input) { { foo: nil } }
200
-
201
- it 'is not successful' do
202
- expect(result).to be_failing ['must be filled', 'must not be one of: 1, 3, 5']
203
- end
204
- end
205
-
206
- context 'with blank input' do
207
- let(:input) { { foo: '' } }
208
-
209
- it 'is not successful' do
210
- expect(result).to be_failing ['must be filled', 'must not be one of: 1, 3, 5']
211
- end
212
- end
213
-
214
- context 'with invalid type' do
215
- let(:input) { { foo: { a: 1 } } }
216
-
217
- it 'is successful' do
218
- expect(result).to be_successful
219
- end
220
- end
221
-
222
- context 'with invalid input' do
223
- let(:input) { { foo: 5 } }
224
-
225
- it 'is not successful' do
226
- expect(result).to be_failing ['must not be one of: 1, 3, 5']
227
- end
228
- end
229
- end
230
-
231
- context 'with maybe' do
232
- subject(:schema) do
233
- Dry::Validation.Schema do
234
- required(:foo).maybe(excluded_from?: [1, 3, 5])
235
- end
236
- end
237
-
238
- context 'with valid input' do
239
- let(:input) { { foo: 2 } }
240
-
241
- it 'is successful' do
242
- expect(result).to be_successful
243
- end
244
- end
245
-
246
- context 'with missing input' do
247
- let(:input) { {} }
248
-
249
- it 'is not successful' do
250
- expect(result).to be_failing ['is missing', 'must not be one of: 1, 3, 5']
251
- end
252
- end
253
-
254
- context 'with nil input' do
255
- let(:input) { { foo: nil } }
256
-
257
- it 'is successful' do
258
- expect(result).to be_successful
259
- end
260
- end
261
-
262
- context 'with blank input' do
263
- let(:input) { { foo: '' } }
264
-
265
- it 'is successful' do
266
- expect(result).to be_successful
267
- end
268
- end
269
-
270
- context 'with invalid type' do
271
- let(:input) { { foo: { a: 1 } } }
272
-
273
- it 'is successful' do
274
- expect(result).to be_successful
275
- end
276
- end
277
-
278
- context 'with invalid input' do
279
- let(:input) { { foo: 5 } }
280
-
281
- it 'is not successful' do
282
- expect(result).to be_failing ['must not be one of: 1, 3, 5']
283
- end
284
- end
285
- end
286
- end
287
-
288
- context 'with optional' do
289
- context 'with value' do
290
- subject(:schema) do
291
- Dry::Validation.Schema do
292
- optional(:foo).value(excluded_from?: [1, 3, 5])
293
- end
294
- end
295
-
296
- context 'with valid input' do
297
- let(:input) { { foo: 2 } }
298
-
299
- it 'is successful' do
300
- expect(result).to be_successful
301
- end
302
- end
303
-
304
- context 'with missing input' do
305
- let(:input) { {} }
306
-
307
- it 'is successful' do
308
- expect(result).to be_successful
309
- end
310
- end
311
-
312
- context 'with nil input' do
313
- let(:input) { { foo: nil } }
314
-
315
- it 'is successful' do
316
- expect(result).to be_successful
317
- end
318
- end
319
-
320
- context 'with blank input' do
321
- let(:input) { { foo: '' } }
322
-
323
- it 'is successful' do
324
- expect(result).to be_successful
325
- end
326
- end
327
-
328
- context 'with invalid type' do
329
- let(:input) { { foo: { a: 1 } } }
330
-
331
- it 'is successful' do
332
- expect(result).to be_successful
333
- end
334
- end
335
-
336
- context 'with invalid input' do
337
- let(:input) { { foo: 5 } }
338
-
339
- it 'is not successful' do
340
- expect(result).to be_failing ['must not be one of: 1, 3, 5']
341
- end
342
- end
343
- end
344
-
345
- context 'with filled' do
346
- subject(:schema) do
347
- Dry::Validation.Schema do
348
- optional(:foo).filled(excluded_from?: [1, 3, 5])
349
- end
350
- end
351
-
352
- context 'with valid input' do
353
- let(:input) { { foo: 2 } }
354
-
355
- it 'is successful' do
356
- expect(result).to be_successful
357
- end
358
- end
359
-
360
- context 'with missing input' do
361
- let(:input) { {} }
362
-
363
- it 'is successful' do
364
- expect(result).to be_successful
365
- end
366
- end
367
-
368
- context 'with nil input' do
369
- let(:input) { { foo: nil } }
370
-
371
- it 'is not successful' do
372
- expect(result).to be_failing ['must be filled', 'must not be one of: 1, 3, 5']
373
- end
374
- end
375
-
376
- context 'with blank input' do
377
- let(:input) { { foo: '' } }
378
-
379
- it 'is not successful' do
380
- expect(result).to be_failing ['must be filled', 'must not be one of: 1, 3, 5']
381
- end
382
- end
383
-
384
- context 'with invalid type' do
385
- let(:input) { { foo: { a: 1 } } }
386
-
387
- it 'is successful' do
388
- expect(result).to be_successful
389
- end
390
- end
391
-
392
- context 'with invalid input' do
393
- let(:input) { { foo: 5 } }
394
-
395
- it 'is not successful' do
396
- expect(result).to be_failing ['must not be one of: 1, 3, 5']
397
- end
398
- end
399
- end
400
-
401
- context 'with maybe' do
402
- subject(:schema) do
403
- Dry::Validation.Schema do
404
- optional(:foo).maybe(excluded_from?: [1, 3, 5])
405
- end
406
- end
407
-
408
- context 'with valid input' do
409
- let(:input) { { foo: 2 } }
410
-
411
- it 'is successful' do
412
- expect(result).to be_successful
413
- end
414
- end
415
-
416
- context 'with missing input' do
417
- let(:input) { {} }
418
-
419
- it 'is successful' do
420
- expect(result).to be_successful
421
- end
422
- end
423
-
424
- context 'with nil input' do
425
- let(:input) { { foo: nil } }
426
-
427
- it 'is successful' do
428
- expect(result).to be_successful
429
- end
430
- end
431
-
432
- context 'with blank input' do
433
- let(:input) { { foo: '' } }
434
-
435
- it 'is successful' do
436
- expect(result).to be_successful
437
- end
438
- end
439
-
440
- context 'with invalid type' do
441
- let(:input) { { foo: { a: 1 } } }
442
-
443
- it 'is successful' do
444
- expect(result).to be_successful
445
- end
446
- end
447
-
448
- context 'with invalid input' do
449
- let(:input) { { foo: 5 } }
450
-
451
- it 'is not successful' do
452
- expect(result).to be_failing ['must not be one of: 1, 3, 5']
453
- end
454
- end
455
- end
456
- end
457
- end
458
- end
459
- end