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,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