dry-validation 0.13.3 → 1.3.1

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