dry-validation 0.13.3 → 1.0.0.alpha1

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