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,455 +0,0 @@
1
- RSpec.describe 'Predicates: Included In' do
2
- context 'with required' do
3
- subject(:schema) do
4
- Dry::Validation.Params do
5
- required(:foo) { included_in?(%w(1 3 5)) }
6
- end
7
- end
8
-
9
- context 'with valid input' do
10
- let(:input) { { 'foo' => '3' } }
11
-
12
- it 'is successful' do
13
- expect(result).to be_successful
14
- end
15
- end
16
-
17
- context 'with missing input' do
18
- let(:input) { {} }
19
-
20
- it 'is not successful' do
21
- expect(result).to be_failing ['is missing', 'must be one of: 1, 3, 5']
22
- end
23
- end
24
-
25
- context 'with nil input' do
26
- let(:input) { { 'foo' => nil } }
27
-
28
- it 'is not successful' do
29
- expect(result).to be_failing ['must be one of: 1, 3, 5']
30
- end
31
- end
32
-
33
- context 'with blank input' do
34
- let(:input) { { 'foo' => '' } }
35
-
36
- it 'is not successful' do
37
- expect(result).to be_failing ['must be one of: 1, 3, 5']
38
- end
39
- end
40
-
41
- context 'with invalid type' do
42
- let(:input) { { 'foo' => { 'a' => '1' } } }
43
-
44
- it 'is not successful' do
45
- expect(result).to be_failing ['must be one of: 1, 3, 5']
46
- end
47
- end
48
-
49
- context 'with invalid input' do
50
- let(:input) { { 'foo' => '4' } }
51
-
52
- it 'is not successful' do
53
- expect(result).to be_failing ['must be one of: 1, 3, 5']
54
- end
55
- end
56
- end
57
-
58
- context 'with optional' do
59
- subject(:schema) do
60
- Dry::Validation.Params do
61
- optional(:foo) { included_in?(%w(1 3 5)) }
62
- end
63
- end
64
-
65
- context 'with valid input' do
66
- let(:input) { { 'foo' => '3' } }
67
-
68
- it 'is successful' do
69
- expect(result).to be_successful
70
- end
71
- end
72
-
73
- context 'with missing input' do
74
- let(:input) { {} }
75
-
76
- it 'is successful' do
77
- expect(result).to be_successful
78
- end
79
- end
80
-
81
- context 'with nil input' do
82
- let(:input) { { 'foo' => nil } }
83
-
84
- it 'is not successful' do
85
- expect(result).to be_failing ['must be one of: 1, 3, 5']
86
- end
87
- end
88
-
89
- context 'with blank input' do
90
- let(:input) { { 'foo' => '' } }
91
-
92
- it 'is not successful' do
93
- expect(result).to be_failing ['must be one of: 1, 3, 5']
94
- end
95
- end
96
-
97
- context 'with invalid type' do
98
- let(:input) { { 'foo' => { 'a' => '1' } } }
99
-
100
- it 'is not successful' do
101
- expect(result).to be_failing ['must be one of: 1, 3, 5']
102
- end
103
- end
104
-
105
- context 'with invalid input' do
106
- let(:input) { { 'foo' => '4' } }
107
-
108
- it 'is not successful' do
109
- expect(result).to be_failing ['must be one of: 1, 3, 5']
110
- end
111
- end
112
- end
113
-
114
- context 'as macro' do
115
- context 'with required' do
116
- context 'with value' do
117
- subject(:schema) do
118
- Dry::Validation.Params do
119
- required(:foo).value(included_in?: %w(1 3 5))
120
- end
121
- end
122
-
123
- context 'with valid input' do
124
- let(:input) { { 'foo' => '3' } }
125
-
126
- it 'is successful' do
127
- expect(result).to be_successful
128
- end
129
- end
130
-
131
- context 'with missing input' do
132
- let(:input) { {} }
133
-
134
- it 'is not successful' do
135
- expect(result).to be_failing ['is missing', 'must be one of: 1, 3, 5']
136
- end
137
- end
138
-
139
- context 'with nil input' do
140
- let(:input) { { 'foo' => nil } }
141
-
142
- it 'is not successful' do
143
- expect(result).to be_failing ['must be one of: 1, 3, 5']
144
- end
145
- end
146
-
147
- context 'with blank input' do
148
- let(:input) { { 'foo' => '' } }
149
-
150
- it 'is not successful' do
151
- expect(result).to be_failing ['must be one of: 1, 3, 5']
152
- end
153
- end
154
-
155
- context 'with invalid type' do
156
- let(:input) { { 'foo' => { 'a' => '1' } } }
157
-
158
- it 'is not successful' do
159
- expect(result).to be_failing ['must be one of: 1, 3, 5']
160
- end
161
- end
162
-
163
- context 'with invalid input' do
164
- let(:input) { { 'foo' => '4' } }
165
-
166
- it 'is not successful' do
167
- expect(result).to be_failing ['must be one of: 1, 3, 5']
168
- end
169
- end
170
- end
171
-
172
- context 'with filled' do
173
- subject(:schema) do
174
- Dry::Validation.Params do
175
- required(:foo).filled(included_in?: %w(1 3 5))
176
- end
177
- end
178
-
179
- context 'with valid input' do
180
- let(:input) { { 'foo' => '3' } }
181
-
182
- it 'is successful' do
183
- expect(result).to be_successful
184
- end
185
- end
186
-
187
- context 'with missing input' do
188
- let(:input) { {} }
189
-
190
- it 'is not successful' do
191
- expect(result).to be_failing ['is missing', 'must be one of: 1, 3, 5']
192
- end
193
- end
194
-
195
- context 'with nil input' do
196
- let(:input) { { 'foo' => nil } }
197
-
198
- it 'is not successful' do
199
- expect(result).to be_failing ['must be filled', 'must be one of: 1, 3, 5']
200
- end
201
- end
202
-
203
- context 'with blank input' do
204
- let(:input) { { 'foo' => '' } }
205
-
206
- it 'is not successful' do
207
- expect(result).to be_failing ['must be filled', 'must be one of: 1, 3, 5']
208
- end
209
- end
210
-
211
- context 'with invalid type' do
212
- let(:input) { { 'foo' => { 'a' => '1' } } }
213
-
214
- it 'is not successful' do
215
- expect(result).to be_failing ['must be one of: 1, 3, 5']
216
- end
217
- end
218
-
219
- context 'with invalid input' do
220
- let(:input) { { 'foo' => '4' } }
221
-
222
- it 'is not successful' do
223
- expect(result).to be_failing ['must be one of: 1, 3, 5']
224
- end
225
- end
226
- end
227
-
228
- context 'with maybe' do
229
- subject(:schema) do
230
- Dry::Validation.Params do
231
- required(:foo).maybe(included_in?: %w(1 3 5))
232
- end
233
- end
234
-
235
- context 'with valid input' do
236
- let(:input) { { 'foo' => '3' } }
237
-
238
- it 'is successful' do
239
- expect(result).to be_successful
240
- end
241
- end
242
-
243
- context 'with missing input' do
244
- let(:input) { {} }
245
-
246
- it 'is not successful' do
247
- expect(result).to be_failing ['is missing', 'must be one of: 1, 3, 5']
248
- end
249
- end
250
-
251
- context 'with nil input' do
252
- let(:input) { { 'foo' => nil } }
253
-
254
- it 'is successful' do
255
- expect(result).to be_successful
256
- end
257
- end
258
-
259
- context 'with blank input' do
260
- let(:input) { { 'foo' => '' } }
261
-
262
- it 'is successful' do
263
- expect(result).to be_successful
264
- end
265
- end
266
-
267
- context 'with invalid type' do
268
- let(:input) { { 'foo' => { 'a' => '1' } } }
269
-
270
- it 'is not successful' do
271
- expect(result).to be_failing ['must be one of: 1, 3, 5']
272
- end
273
- end
274
-
275
- context 'with invalid input' do
276
- let(:input) { { 'foo' => '4' } }
277
-
278
- it 'is not successful' do
279
- expect(result).to be_failing ['must be one of: 1, 3, 5']
280
- end
281
- end
282
- end
283
- end
284
-
285
- context 'with optional' do
286
- context 'with value' do
287
- subject(:schema) do
288
- Dry::Validation.Params do
289
- optional(:foo).value(included_in?: %w(1 3 5))
290
- end
291
- end
292
-
293
- context 'with valid input' do
294
- let(:input) { { 'foo' => '3' } }
295
-
296
- it 'is successful' do
297
- expect(result).to be_successful
298
- end
299
- end
300
-
301
- context 'with missing input' do
302
- let(:input) { {} }
303
-
304
- it 'is successful' do
305
- expect(result).to be_successful
306
- end
307
- end
308
-
309
- context 'with nil input' do
310
- let(:input) { { 'foo' => nil } }
311
-
312
- it 'is not successful' do
313
- expect(result).to be_failing ['must be one of: 1, 3, 5']
314
- end
315
- end
316
-
317
- context 'with blank input' do
318
- let(:input) { { 'foo' => '' } }
319
-
320
- it 'is not successful' do
321
- expect(result).to be_failing ['must be one of: 1, 3, 5']
322
- end
323
- end
324
-
325
- context 'with invalid type' do
326
- let(:input) { { 'foo' => { 'a' => '1' } } }
327
-
328
- it 'is not successful' do
329
- expect(result).to be_failing ['must be one of: 1, 3, 5']
330
- end
331
- end
332
-
333
- context 'with invalid input' do
334
- let(:input) { { 'foo' => '4' } }
335
-
336
- it 'is not successful' do
337
- expect(result).to be_failing ['must be one of: 1, 3, 5']
338
- end
339
- end
340
- end
341
-
342
- context 'with filled' do
343
- subject(:schema) do
344
- Dry::Validation.Params do
345
- optional(:foo).filled(included_in?: %w(1 3 5))
346
- end
347
- end
348
-
349
- context 'with valid input' do
350
- let(:input) { { 'foo' => '3' } }
351
-
352
- it 'is successful' do
353
- expect(result).to be_successful
354
- end
355
- end
356
-
357
- context 'with missing input' do
358
- let(:input) { {} }
359
-
360
- it 'is successful' do
361
- expect(result).to be_successful
362
- end
363
- end
364
-
365
- context 'with nil input' do
366
- let(:input) { { 'foo' => nil } }
367
-
368
- it 'is not successful' do
369
- expect(result).to be_failing ['must be filled', 'must be one of: 1, 3, 5']
370
- end
371
- end
372
-
373
- context 'with blank input' do
374
- let(:input) { { 'foo' => '' } }
375
-
376
- it 'is not successful' do
377
- expect(result).to be_failing ['must be filled', 'must be one of: 1, 3, 5']
378
- end
379
- end
380
-
381
- context 'with invalid type' do
382
- let(:input) { { 'foo' => { 'a' => '1' } } }
383
-
384
- it 'is not successful' do
385
- expect(result).to be_failing ['must be one of: 1, 3, 5']
386
- end
387
- end
388
-
389
- context 'with invalid input' do
390
- let(:input) { { 'foo' => '4' } }
391
-
392
- it 'is not successful' do
393
- expect(result).to be_failing ['must be one of: 1, 3, 5']
394
- end
395
- end
396
- end
397
-
398
- context 'with maybe' do
399
- subject(:schema) do
400
- Dry::Validation.Params do
401
- optional(:foo).maybe(included_in?: %w(1 3 5))
402
- end
403
- end
404
-
405
- context 'with valid input' do
406
- let(:input) { { 'foo' => '3' } }
407
-
408
- it 'is successful' do
409
- expect(result).to be_successful
410
- end
411
- end
412
-
413
- context 'with missing input' do
414
- let(:input) { {} }
415
-
416
- it 'is successful' do
417
- expect(result).to be_successful
418
- end
419
- end
420
-
421
- context 'with nil input' do
422
- let(:input) { { 'foo' => nil } }
423
-
424
- it 'is successful' do
425
- expect(result).to be_successful
426
- end
427
- end
428
-
429
- context 'with blank input' do
430
- let(:input) { { 'foo' => '' } }
431
-
432
- it 'is successful' do
433
- expect(result).to be_successful
434
- end
435
- end
436
-
437
- context 'with invalid type' do
438
- let(:input) { { 'foo' => { 'a' => '1' } } }
439
-
440
- it 'is not successful' do
441
- expect(result).to be_failing ['must be one of: 1, 3, 5']
442
- end
443
- end
444
-
445
- context 'with invalid input' do
446
- let(:input) { { 'foo' => '4' } }
447
-
448
- it 'is not successful' do
449
- expect(result).to be_failing ['must be one of: 1, 3, 5']
450
- end
451
- end
452
- end
453
- end
454
- end
455
- end