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