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