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,398 +0,0 @@
1
- RSpec.describe 'Predicates: Size' do
2
- context 'Fixed (integer)' do
3
- context 'with required' do
4
- subject(:schema) do
5
- Dry::Validation.Schema do
6
- required(:foo) { size?(3) }
7
- end
8
- end
9
-
10
- context 'with valid input' do
11
- let(:input) { { foo: [1, 2, 3] } }
12
-
13
- it 'is successful' do
14
- expect(result).to be_successful
15
- end
16
- end
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', 'size must be 3']
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 'is not successful' do
38
- expect(result).to be_failing ['length must be 3']
39
- end
40
- end
41
-
42
- context 'with invalid input' do
43
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
44
-
45
- it 'is not successful' do
46
- expect(result).to be_failing ['size must be 3']
47
- end
48
- end
49
- end
50
-
51
- context 'with optional' do
52
- subject(:schema) do
53
- Dry::Validation.Schema do
54
- optional(:foo) { size?(3) }
55
- end
56
- end
57
-
58
- context 'with valid input' do
59
- let(:input) { { foo: [1, 2, 3] } }
60
-
61
- it 'is successful' do
62
- expect(result).to be_successful
63
- end
64
- end
65
-
66
- context 'with missing input' do
67
- let(:input) { {} }
68
-
69
- it 'is successful' do
70
- expect(result).to be_successful
71
- end
72
- end
73
-
74
- context 'with nil input' do
75
- let(:input) { { foo: nil } }
76
-
77
- it 'raises error' do
78
- expect { result }.to raise_error(NoMethodError)
79
- end
80
- end
81
-
82
- context 'with blank input' do
83
- let(:input) { { foo: '' } }
84
-
85
- #see: https://github.com/dry-rb/dry-validation/issues/121
86
- it 'is not successful' do
87
- expect(result).to be_failing ['length must be 3']
88
- end
89
- end
90
-
91
- context 'with invalid input' do
92
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
93
-
94
- it 'is not successful' do
95
- expect(result).to be_failing ['size must be 3']
96
- end
97
- end
98
- end
99
-
100
- context 'as macro' do
101
- context 'with required' do
102
- context 'with value' do
103
- subject(:schema) do
104
- Dry::Validation.Schema do
105
- required(:foo).value(size?: 3)
106
- end
107
- end
108
-
109
- context 'with valid input' do
110
- let(:input) { { foo: [1, 2, 3] } }
111
-
112
- it 'is successful' do
113
- expect(result).to be_successful
114
- end
115
- end
116
-
117
- context 'with missing input' do
118
- let(:input) { {} }
119
-
120
- it 'is not successful' do
121
- expect(result).to be_failing ['is missing', 'size must be 3']
122
- end
123
- end
124
-
125
- context 'with nil input' do
126
- let(:input) { { foo: nil } }
127
-
128
- it 'raises error' do
129
- expect { result }.to raise_error(NoMethodError)
130
- end
131
- end
132
-
133
- context 'with blank input' do
134
- let(:input) { { foo: '' } }
135
-
136
- #see: https://github.com/dry-rb/dry-validation/issues/121
137
- it 'is not successful' do
138
- expect(result).to be_failing ['length must be 3']
139
- end
140
- end
141
-
142
- context 'with invalid input' do
143
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
144
-
145
- it 'is not successful' do
146
- expect(result).to be_failing ['size must be 3']
147
- end
148
- end
149
- end
150
-
151
- context 'with filled' do
152
- subject(:schema) do
153
- Dry::Validation.Schema do
154
- required(:foo).filled(size?: 3)
155
- end
156
- end
157
-
158
- context 'with valid input' do
159
- let(:input) { { foo: [1, 2, 3] } }
160
-
161
- it 'is successful' do
162
- expect(result).to be_successful
163
- end
164
- end
165
-
166
- context 'with missing input' do
167
- let(:input) { {} }
168
-
169
- it 'is not successful' do
170
- expect(result).to be_failing ['is missing', 'size must be 3']
171
- end
172
- end
173
-
174
- context 'with nil input' do
175
- let(:input) { { foo: nil } }
176
-
177
- it 'is not successful' do
178
- expect(result).to be_failing ['must be filled', 'size must be 3']
179
- end
180
- end
181
-
182
- context 'with blank input' do
183
- let(:input) { { foo: '' } }
184
-
185
- it 'is not successful' do
186
- expect(result).to be_failing ['must be filled', 'length must be 3']
187
- end
188
- end
189
-
190
- context 'with invalid input' do
191
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
192
-
193
- it 'is not successful' do
194
- expect(result).to be_failing ['size must be 3']
195
- end
196
- end
197
- end
198
-
199
- context 'with maybe' do
200
- subject(:schema) do
201
- Dry::Validation.Schema do
202
- required(:foo).maybe(size?: 3)
203
- end
204
- end
205
-
206
- context 'with valid input' do
207
- let(:input) { { foo: [1, 2, 3] } }
208
-
209
- it 'is successful' do
210
- expect(result).to be_successful
211
- end
212
- end
213
-
214
- context 'with missing input' do
215
- let(:input) { {} }
216
-
217
- it 'is not successful' do
218
- expect(result).to be_failing ['is missing', 'size must be 3']
219
- end
220
- end
221
-
222
- context 'with nil input' do
223
- let(:input) { { foo: nil } }
224
-
225
- it 'is successful' do
226
- expect(result).to be_successful
227
- end
228
- end
229
-
230
- context 'with blank input' do
231
- let(:input) { { foo: '' } }
232
-
233
- #see: https://github.com/dry-rb/dry-validation/issues/121
234
- it 'is not successful' do
235
- expect(result).to be_failing ['length must be 3']
236
- end
237
- end
238
-
239
- context 'with invalid input' do
240
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
241
-
242
- it 'is not successful' do
243
- expect(result).to be_failing ['size must be 3']
244
- end
245
- end
246
- end
247
- end
248
-
249
- context 'with optional' do
250
- context 'with value' do
251
- subject(:schema) do
252
- Dry::Validation.Schema do
253
- optional(:foo).value(size?: 3)
254
- end
255
- end
256
-
257
- context 'with valid input' do
258
- let(:input) { { foo: [1, 2, 3] } }
259
-
260
- it 'is successful' do
261
- expect(result).to be_successful
262
- end
263
- end
264
-
265
- context 'with missing input' do
266
- let(:input) { {} }
267
-
268
- it 'is successful' do
269
- expect(result).to be_successful
270
- end
271
- end
272
-
273
- context 'with nil input' do
274
- let(:input) { { foo: nil } }
275
-
276
- it 'raises error' do
277
- expect { result }.to raise_error(NoMethodError)
278
- end
279
- end
280
-
281
- context 'with blank input' do
282
- let(:input) { { foo: '' } }
283
-
284
- #see: https://github.com/dry-rb/dry-validation/issues/121
285
- it 'is not successful' do
286
- expect(result).to be_failing ['length must be 3']
287
- end
288
- end
289
-
290
- context 'with invalid input' do
291
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
292
-
293
- it 'is not successful' do
294
- expect(result).to be_failing ['size must be 3']
295
- end
296
- end
297
- end
298
-
299
- context 'with filled' do
300
- subject(:schema) do
301
- Dry::Validation.Schema do
302
- optional(:foo).filled(size?: 3)
303
- end
304
- end
305
-
306
- context 'with valid input' do
307
- let(:input) { { foo: [1, 2, 3] } }
308
-
309
- it 'is successful' do
310
- expect(result).to be_successful
311
- end
312
- end
313
-
314
- context 'with missing input' do
315
- let(:input) { {} }
316
-
317
- it 'is successful' do
318
- expect(result).to be_successful
319
- end
320
- end
321
-
322
- context 'with nil input' do
323
- let(:input) { { foo: nil } }
324
-
325
- it 'is not successful' do
326
- expect(result).to be_failing ['must be filled', 'size must be 3']
327
- end
328
- end
329
-
330
- context 'with blank input' do
331
- let(:input) { { foo: '' } }
332
-
333
- it 'is not successful' do
334
- expect(result).to be_failing ['must be filled', 'length must be 3']
335
- end
336
- end
337
-
338
- context 'with invalid input' do
339
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
340
-
341
- it 'is not successful' do
342
- expect(result).to be_failing ['size must be 3']
343
- end
344
- end
345
- end
346
-
347
- context 'with maybe' do
348
- subject(:schema) do
349
- Dry::Validation.Schema do
350
- optional(:foo).maybe(size?: 3)
351
- end
352
- end
353
-
354
- context 'with valid input' do
355
- let(:input) { { foo: [1, 2, 3] } }
356
-
357
- it 'is successful' do
358
- expect(result).to be_successful
359
- end
360
- end
361
-
362
- context 'with missing input' do
363
- let(:input) { {} }
364
-
365
- it 'is successful' do
366
- expect(result).to be_successful
367
- end
368
- end
369
-
370
- context 'with nil input' do
371
- let(:input) { { foo: nil } }
372
-
373
- it 'is successful' do
374
- expect(result).to be_successful
375
- end
376
- end
377
-
378
- context 'with blank input' do
379
- let(:input) { { foo: '' } }
380
-
381
- #see: https://github.com/dry-rb/dry-validation/issues/121
382
- it 'is not successful' do
383
- expect(result).to be_failing ['length must be 3']
384
- end
385
- end
386
-
387
- context 'with invalid input' do
388
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
389
-
390
- it 'is not successful' do
391
- expect(result).to be_failing ['size must be 3']
392
- end
393
- end
394
- end
395
- end
396
- end
397
- end
398
- end
@@ -1,395 +0,0 @@
1
- RSpec.describe 'Predicates: Size' do
2
- context 'Range' do
3
- context 'with required' do
4
- subject(:schema) do
5
- Dry::Validation.Schema do
6
- required(:foo) { size?(2..3) }
7
- end
8
- end
9
-
10
- context 'with valid input' do
11
- let(:input) { { foo: [1, 2, 3] } }
12
-
13
- it 'is successful' do
14
- expect(result).to be_successful
15
- end
16
- end
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', 'size must be within 2 - 3']
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 'is not successful' do
38
- expect(result).to be_failing ['length must be within 2 - 3']
39
- end
40
- end
41
-
42
- context 'with invalid input' do
43
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
44
-
45
- it 'is not successful' do
46
- expect(result).to be_failing ['size must be within 2 - 3']
47
- end
48
- end
49
- end
50
-
51
- context 'with optional' do
52
- subject(:schema) do
53
- Dry::Validation.Schema do
54
- optional(:foo) { size?(2..3) }
55
- end
56
- end
57
-
58
- context 'with valid input' do
59
- let(:input) { { foo: [1, 2, 3] } }
60
-
61
- it 'is successful' do
62
- expect(result).to be_successful
63
- end
64
- end
65
-
66
- context 'with missing input' do
67
- let(:input) { {} }
68
-
69
- it 'is successful' do
70
- expect(result).to be_successful
71
- end
72
- end
73
-
74
- context 'with nil input' do
75
- let(:input) { { foo: nil } }
76
-
77
- it 'raises error' do
78
- expect { result }.to raise_error(NoMethodError)
79
- end
80
- end
81
-
82
- context 'with blank input' do
83
- let(:input) { { foo: '' } }
84
-
85
- it 'is not successful' do
86
- expect(result).to be_failing ['length must be within 2 - 3']
87
- end
88
- end
89
-
90
- context 'with invalid input' do
91
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
92
-
93
- it 'is not successful' do
94
- expect(result).to be_failing ['size must be within 2 - 3']
95
- end
96
- end
97
- end
98
-
99
- context 'as macro' do
100
- context 'with required' do
101
- context 'with value' do
102
- subject(:schema) do
103
- Dry::Validation.Schema do
104
- required(:foo).value(size?: 2..3)
105
- end
106
- end
107
-
108
- context 'with valid input' do
109
- let(:input) { { foo: [1, 2, 3] } }
110
-
111
- it 'is successful' do
112
- expect(result).to be_successful
113
- end
114
- end
115
-
116
- context 'with missing input' do
117
- let(:input) { {} }
118
-
119
- it 'is not successful' do
120
- expect(result).to be_failing ['is missing', 'size must be within 2 - 3']
121
- end
122
- end
123
-
124
- context 'with nil input' do
125
- let(:input) { { foo: nil } }
126
-
127
- it 'raises error' do
128
- expect { result }.to raise_error(NoMethodError)
129
- end
130
- end
131
-
132
- context 'with blank input' do
133
- let(:input) { { foo: '' } }
134
-
135
- it 'is not successful' do
136
- expect(result).to be_failing ['length must be within 2 - 3']
137
- end
138
- end
139
-
140
- context 'with invalid input' do
141
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
142
-
143
- it 'is not successful' do
144
- expect(result).to be_failing ['size must be within 2 - 3']
145
- end
146
- end
147
- end
148
-
149
- context 'with filled' do
150
- subject(:schema) do
151
- Dry::Validation.Schema do
152
- required(:foo).filled(size?: 2..3)
153
- end
154
- end
155
-
156
- context 'with valid input' do
157
- let(:input) { { foo: [1, 2, 3] } }
158
-
159
- it 'is successful' do
160
- expect(result).to be_successful
161
- end
162
- end
163
-
164
- context 'with missing input' do
165
- let(:input) { {} }
166
-
167
- it 'is not successful' do
168
- expect(result).to be_failing ['is missing', 'size must be within 2 - 3']
169
- end
170
- end
171
-
172
- context 'with nil input' do
173
- let(:input) { { foo: nil } }
174
-
175
- it 'is not successful' do
176
- expect(result).to be_failing ['must be filled', 'size must be within 2 - 3']
177
- end
178
- end
179
-
180
- context 'with blank input' do
181
- let(:input) { { foo: '' } }
182
-
183
- it 'is not successful' do
184
- expect(result).to be_failing ['must be filled', 'length must be within 2 - 3']
185
- end
186
- end
187
-
188
- context 'with invalid input' do
189
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
190
-
191
- it 'is not successful' do
192
- expect(result).to be_failing ['size must be within 2 - 3']
193
- end
194
- end
195
- end
196
-
197
- context 'with maybe' do
198
- subject(:schema) do
199
- Dry::Validation.Schema do
200
- required(:foo).maybe(size?: 2..3)
201
- end
202
- end
203
-
204
- context 'with valid input' do
205
- let(:input) { { foo: [1, 2, 3] } }
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', 'size must be within 2 - 3']
217
- end
218
- end
219
-
220
- context 'with nil input' do
221
- let(:input) { { foo: nil } }
222
-
223
- it 'is successful' do
224
- expect(result).to be_successful
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 ['length must be within 2 - 3']
233
- end
234
- end
235
-
236
- context 'with invalid input' do
237
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
238
-
239
- it 'is not successful' do
240
- expect(result).to be_failing ['size must be within 2 - 3']
241
- end
242
- end
243
- end
244
- end
245
-
246
- context 'with optional' do
247
- context 'with value' do
248
- subject(:schema) do
249
- Dry::Validation.Schema do
250
- optional(:foo).value(size?: 2..3)
251
- end
252
- end
253
-
254
- context 'with valid input' do
255
- let(:input) { { foo: [1, 2, 3] } }
256
-
257
- it 'is successful' do
258
- expect(result).to be_successful
259
- end
260
- end
261
-
262
- context 'with missing input' do
263
- let(:input) { {} }
264
-
265
- it 'is successful' do
266
- expect(result).to be_successful
267
- end
268
- end
269
-
270
- context 'with nil input' do
271
- let(:input) { { foo: nil } }
272
-
273
- it 'raises error' do
274
- expect { result }.to raise_error(NoMethodError)
275
- end
276
- end
277
-
278
- context 'with blank input' do
279
- let(:input) { { foo: '' } }
280
-
281
- #see: https://github.com/dry-rb/dry-validation/issues/121
282
- it 'is not successful' do
283
- expect(result).to be_failing ['length must be within 2 - 3']
284
- end
285
- end
286
-
287
- context 'with invalid input' do
288
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
289
-
290
- it 'is not successful' do
291
- expect(result).to be_failing ['size must be within 2 - 3']
292
- end
293
- end
294
- end
295
-
296
- context 'with filled' do
297
- subject(:schema) do
298
- Dry::Validation.Schema do
299
- optional(:foo).filled(size?: 2..3)
300
- end
301
- end
302
-
303
- context 'with valid input' do
304
- let(:input) { { foo: [1, 2, 3] } }
305
-
306
- it 'is successful' do
307
- expect(result).to be_successful
308
- end
309
- end
310
-
311
- context 'with missing input' do
312
- let(:input) { {} }
313
-
314
- it 'is successful' do
315
- expect(result).to be_successful
316
- end
317
- end
318
-
319
- context 'with nil input' do
320
- let(:input) { { foo: nil } }
321
-
322
- it 'is not successful' do
323
- expect(result).to be_failing ['must be filled', 'size must be within 2 - 3']
324
- end
325
- end
326
-
327
- context 'with blank input' do
328
- let(:input) { { foo: '' } }
329
-
330
- it 'is not successful' do
331
- expect(result).to be_failing ['must be filled', 'length must be within 2 - 3']
332
- end
333
- end
334
-
335
- context 'with invalid input' do
336
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
337
-
338
- it 'is not successful' do
339
- expect(result).to be_failing ['size must be within 2 - 3']
340
- end
341
- end
342
- end
343
-
344
- context 'with maybe' do
345
- subject(:schema) do
346
- Dry::Validation.Schema do
347
- optional(:foo).maybe(size?: 2..3)
348
- end
349
- end
350
-
351
- context 'with valid input' do
352
- let(:input) { { foo: [1, 2, 3] } }
353
-
354
- it 'is successful' do
355
- expect(result).to be_successful
356
- end
357
- end
358
-
359
- context 'with missing input' do
360
- let(:input) { {} }
361
-
362
- it 'is successful' do
363
- expect(result).to be_successful
364
- end
365
- end
366
-
367
- context 'with nil input' do
368
- let(:input) { { foo: nil } }
369
-
370
- it 'is successful' do
371
- expect(result).to be_successful
372
- end
373
- end
374
-
375
- context 'with blank input' do
376
- let(:input) { { foo: '' } }
377
-
378
- #see: https://github.com/dry-rb/dry-validation/issues/121
379
- it 'is not successful' do
380
- expect(result).to be_failing ['length must be within 2 - 3']
381
- end
382
- end
383
-
384
- context 'with invalid input' do
385
- let(:input) { { foo: { a: 1, b: 2, c: 3, d: 4 } } }
386
-
387
- it 'is not successful' do
388
- expect(result).to be_failing ['size must be within 2 - 3']
389
- end
390
- end
391
- end
392
- end
393
- end
394
- end
395
- end