dry-validation 0.13.3 → 1.7.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +506 -95
- data/LICENSE +1 -1
- data/README.md +16 -12
- data/config/errors.yml +3 -88
- data/dry-validation.gemspec +37 -24
- data/lib/dry/validation/config.rb +24 -0
- data/lib/dry/validation/constants.rb +43 -0
- data/lib/dry/validation/contract/class_interface.rb +230 -0
- data/lib/dry/validation/contract.rb +171 -0
- data/lib/dry/validation/evaluator.rb +224 -0
- data/lib/dry/validation/extensions/hints.rb +67 -0
- data/lib/dry/validation/extensions/monads.rb +24 -8
- data/lib/dry/validation/extensions/predicates_as_macros.rb +75 -0
- data/lib/dry/validation/failures.rb +70 -0
- data/lib/dry/validation/function.rb +44 -0
- data/lib/dry/validation/macro.rb +38 -0
- data/lib/dry/validation/macros.rb +104 -0
- data/lib/dry/validation/message.rb +80 -80
- data/lib/dry/validation/message_set.rb +80 -105
- data/lib/dry/validation/messages/resolver.rb +131 -0
- data/lib/dry/validation/result.rb +183 -41
- data/lib/dry/validation/rule.rb +135 -0
- data/lib/dry/validation/schema_ext.rb +19 -0
- data/lib/dry/validation/values.rb +104 -0
- data/lib/dry/validation/version.rb +3 -1
- data/lib/dry/validation.rb +45 -28
- data/lib/dry-validation.rb +3 -1
- metadata +46 -344
- data/.codeclimate.yml +0 -17
- data/.gitignore +0 -9
- data/.rspec +0 -3
- data/.travis.yml +0 -29
- data/CONTRIBUTING.md +0 -31
- data/Gemfile +0 -25
- data/Rakefile +0 -22
- data/benchmarks/benchmark_form_invalid.rb +0 -64
- data/benchmarks/benchmark_form_valid.rb +0 -64
- data/benchmarks/benchmark_schema_invalid_huge.rb +0 -52
- data/benchmarks/profile_schema_call_invalid.rb +0 -20
- data/benchmarks/profile_schema_call_valid.rb +0 -20
- data/benchmarks/profile_schema_definition.rb +0 -14
- data/benchmarks/profile_schema_huge_invalid.rb +0 -30
- data/benchmarks/profile_schema_messages_invalid.rb +0 -20
- data/benchmarks/suite.rb +0 -5
- data/examples/basic.rb +0 -15
- data/examples/each.rb +0 -14
- data/examples/json.rb +0 -12
- data/examples/multiple.rb +0 -27
- data/examples/nested.rb +0 -22
- data/examples/params.rb +0 -11
- data/lib/dry/validation/compat/form.rb +0 -67
- data/lib/dry/validation/deprecations.rb +0 -24
- data/lib/dry/validation/executor.rb +0 -91
- data/lib/dry/validation/extensions/struct.rb +0 -32
- data/lib/dry/validation/extensions.rb +0 -7
- data/lib/dry/validation/input_processor_compiler/json.rb +0 -45
- data/lib/dry/validation/input_processor_compiler/params.rb +0 -49
- data/lib/dry/validation/input_processor_compiler/sanitizer.rb +0 -47
- data/lib/dry/validation/input_processor_compiler.rb +0 -137
- data/lib/dry/validation/message_compiler/visitor_opts.rb +0 -37
- data/lib/dry/validation/message_compiler.rb +0 -188
- data/lib/dry/validation/messages/abstract.rb +0 -119
- data/lib/dry/validation/messages/i18n.rb +0 -47
- data/lib/dry/validation/messages/namespaced.rb +0 -39
- data/lib/dry/validation/messages/yaml.rb +0 -61
- data/lib/dry/validation/messages.rb +0 -14
- data/lib/dry/validation/predicate_registry.rb +0 -115
- data/lib/dry/validation/predicates.rb +0 -19
- data/lib/dry/validation/schema/check.rb +0 -37
- data/lib/dry/validation/schema/class_interface.rb +0 -190
- data/lib/dry/validation/schema/deprecated.rb +0 -30
- data/lib/dry/validation/schema/dsl.rb +0 -118
- data/lib/dry/validation/schema/form.rb +0 -9
- data/lib/dry/validation/schema/json.rb +0 -21
- data/lib/dry/validation/schema/key.rb +0 -71
- data/lib/dry/validation/schema/params.rb +0 -22
- data/lib/dry/validation/schema/rule.rb +0 -202
- data/lib/dry/validation/schema/value.rb +0 -211
- data/lib/dry/validation/schema.rb +0 -126
- data/lib/dry/validation/schema_compiler.rb +0 -81
- data/lib/dry/validation/template.rb +0 -66
- data/lib/dry/validation/type_specs.rb +0 -70
- data/log/.gitkeep +0 -0
- data/spec/extensions/monads/result_spec.rb +0 -40
- data/spec/extensions/struct/schema_spec.rb +0 -32
- data/spec/fixtures/locales/en.yml +0 -8
- data/spec/fixtures/locales/pl.yml +0 -22
- data/spec/integration/custom_error_messages_spec.rb +0 -54
- data/spec/integration/custom_predicates_spec.rb +0 -228
- data/spec/integration/hints_spec.rb +0 -170
- data/spec/integration/injecting_rules_spec.rb +0 -30
- data/spec/integration/json/defining_base_schema_spec.rb +0 -41
- data/spec/integration/localized_error_messages_spec.rb +0 -72
- data/spec/integration/message_compiler_spec.rb +0 -405
- data/spec/integration/messages/i18n_spec.rb +0 -104
- data/spec/integration/optional_keys_spec.rb +0 -28
- data/spec/integration/params/predicates/array_spec.rb +0 -287
- data/spec/integration/params/predicates/empty_spec.rb +0 -263
- data/spec/integration/params/predicates/eql_spec.rb +0 -327
- data/spec/integration/params/predicates/even_spec.rb +0 -455
- data/spec/integration/params/predicates/excluded_from_spec.rb +0 -455
- data/spec/integration/params/predicates/excludes_spec.rb +0 -391
- data/spec/integration/params/predicates/false_spec.rb +0 -455
- data/spec/integration/params/predicates/filled_spec.rb +0 -467
- data/spec/integration/params/predicates/format_spec.rb +0 -454
- data/spec/integration/params/predicates/gt_spec.rb +0 -519
- data/spec/integration/params/predicates/gteq_spec.rb +0 -519
- data/spec/integration/params/predicates/included_in_spec.rb +0 -455
- data/spec/integration/params/predicates/includes_spec.rb +0 -391
- data/spec/integration/params/predicates/key_spec.rb +0 -67
- data/spec/integration/params/predicates/lt_spec.rb +0 -519
- data/spec/integration/params/predicates/lteq_spec.rb +0 -519
- data/spec/integration/params/predicates/max_size_spec.rb +0 -391
- data/spec/integration/params/predicates/min_size_spec.rb +0 -391
- data/spec/integration/params/predicates/none_spec.rb +0 -265
- data/spec/integration/params/predicates/not_eql_spec.rb +0 -327
- data/spec/integration/params/predicates/odd_spec.rb +0 -455
- data/spec/integration/params/predicates/size/fixed_spec.rb +0 -393
- data/spec/integration/params/predicates/size/range_spec.rb +0 -396
- data/spec/integration/params/predicates/true_spec.rb +0 -455
- data/spec/integration/params/predicates/type_spec.rb +0 -391
- data/spec/integration/result_spec.rb +0 -81
- data/spec/integration/schema/array_schema_spec.rb +0 -59
- data/spec/integration/schema/check_rules_spec.rb +0 -119
- data/spec/integration/schema/check_with_nested_el_spec.rb +0 -37
- data/spec/integration/schema/check_with_nth_el_spec.rb +0 -25
- data/spec/integration/schema/default_settings_spec.rb +0 -11
- data/spec/integration/schema/defining_base_schema_spec.rb +0 -41
- data/spec/integration/schema/dynamic_predicate_args_spec.rb +0 -43
- data/spec/integration/schema/each_with_set_spec.rb +0 -70
- data/spec/integration/schema/extending_dsl_spec.rb +0 -27
- data/spec/integration/schema/form_spec.rb +0 -236
- data/spec/integration/schema/hash_schema_spec.rb +0 -47
- data/spec/integration/schema/inheriting_schema_spec.rb +0 -31
- data/spec/integration/schema/input_processor_spec.rb +0 -46
- data/spec/integration/schema/json/explicit_types_spec.rb +0 -157
- data/spec/integration/schema/json_spec.rb +0 -163
- data/spec/integration/schema/macros/confirmation_spec.rb +0 -35
- data/spec/integration/schema/macros/each_spec.rb +0 -268
- data/spec/integration/schema/macros/filled_spec.rb +0 -87
- data/spec/integration/schema/macros/input_spec.rb +0 -139
- data/spec/integration/schema/macros/maybe_spec.rb +0 -99
- data/spec/integration/schema/macros/rule_spec.rb +0 -75
- data/spec/integration/schema/macros/value_spec.rb +0 -119
- data/spec/integration/schema/macros/when_spec.rb +0 -62
- data/spec/integration/schema/nested_schemas_spec.rb +0 -236
- data/spec/integration/schema/nested_values_spec.rb +0 -46
- data/spec/integration/schema/not_spec.rb +0 -34
- data/spec/integration/schema/numbers_spec.rb +0 -19
- data/spec/integration/schema/option_with_default_spec.rb +0 -64
- data/spec/integration/schema/or_spec.rb +0 -87
- data/spec/integration/schema/params/defining_base_schema_spec.rb +0 -41
- data/spec/integration/schema/params/explicit_types_spec.rb +0 -195
- data/spec/integration/schema/params_spec.rb +0 -234
- data/spec/integration/schema/predicate_verification_spec.rb +0 -9
- data/spec/integration/schema/predicates/array_spec.rb +0 -295
- data/spec/integration/schema/predicates/custom_spec.rb +0 -103
- data/spec/integration/schema/predicates/empty_spec.rb +0 -263
- data/spec/integration/schema/predicates/eql_spec.rb +0 -327
- data/spec/integration/schema/predicates/even_spec.rb +0 -455
- data/spec/integration/schema/predicates/excluded_from/array_spec.rb +0 -459
- data/spec/integration/schema/predicates/excluded_from/range_spec.rb +0 -459
- data/spec/integration/schema/predicates/excludes_spec.rb +0 -391
- data/spec/integration/schema/predicates/filled_spec.rb +0 -467
- data/spec/integration/schema/predicates/format_spec.rb +0 -455
- data/spec/integration/schema/predicates/gt_spec.rb +0 -519
- data/spec/integration/schema/predicates/gteq_spec.rb +0 -519
- data/spec/integration/schema/predicates/hash_spec.rb +0 -69
- data/spec/integration/schema/predicates/included_in/array_spec.rb +0 -459
- data/spec/integration/schema/predicates/included_in/range_spec.rb +0 -459
- data/spec/integration/schema/predicates/includes_spec.rb +0 -391
- data/spec/integration/schema/predicates/key_spec.rb +0 -88
- data/spec/integration/schema/predicates/lt_spec.rb +0 -520
- data/spec/integration/schema/predicates/lteq_spec.rb +0 -519
- data/spec/integration/schema/predicates/max_size_spec.rb +0 -391
- data/spec/integration/schema/predicates/min_size_spec.rb +0 -391
- data/spec/integration/schema/predicates/none_spec.rb +0 -265
- data/spec/integration/schema/predicates/not_eql_spec.rb +0 -391
- data/spec/integration/schema/predicates/odd_spec.rb +0 -455
- data/spec/integration/schema/predicates/size/fixed_spec.rb +0 -398
- data/spec/integration/schema/predicates/size/range_spec.rb +0 -395
- data/spec/integration/schema/predicates/type_spec.rb +0 -413
- data/spec/integration/schema/reusing_schema_spec.rb +0 -33
- data/spec/integration/schema/using_types_spec.rb +0 -135
- data/spec/integration/schema/validate_spec.rb +0 -120
- data/spec/integration/schema/xor_spec.rb +0 -35
- data/spec/integration/schema_builders_spec.rb +0 -17
- data/spec/integration/schema_spec.rb +0 -173
- data/spec/shared/message_compiler.rb +0 -11
- data/spec/shared/predicate_helper.rb +0 -15
- data/spec/shared/rule_compiler.rb +0 -8
- data/spec/spec_helper.rb +0 -62
- data/spec/support/define_struct.rb +0 -25
- data/spec/support/matchers.rb +0 -38
- data/spec/support/mutant.rb +0 -9
- data/spec/support/predicates_integration.rb +0 -7
- data/spec/unit/input_processor_compiler/json_spec.rb +0 -283
- data/spec/unit/input_processor_compiler/params_spec.rb +0 -328
- data/spec/unit/message_compiler/visit_failure_spec.rb +0 -38
- data/spec/unit/message_compiler/visit_spec.rb +0 -16
- data/spec/unit/message_compiler_spec.rb +0 -7
- data/spec/unit/predicate_registry_spec.rb +0 -34
- data/spec/unit/schema/key_spec.rb +0 -38
- data/spec/unit/schema/rule_spec.rb +0 -42
- data/spec/unit/schema/value_spec.rb +0 -131
- data/spec/unit/schema_spec.rb +0 -35
@@ -1,295 +0,0 @@
|
|
1
|
-
RSpec.describe 'Predicates: Array' do
|
2
|
-
context 'with required' do
|
3
|
-
subject(:schema) do
|
4
|
-
Dry::Validation.Schema do
|
5
|
-
required(:foo) { array? { each { int? } } }
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
context 'with valid input' do
|
10
|
-
let(:input) { { foo: [3] } }
|
11
|
-
|
12
|
-
it 'is successful' do
|
13
|
-
expect(result).to be_successful
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'with missing input' do
|
18
|
-
let(:input) { {} }
|
19
|
-
|
20
|
-
it 'is not successful' do
|
21
|
-
expect(result).to be_failing ['is missing']
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context 'with nil input' do
|
26
|
-
let(:input) { { foo: nil } }
|
27
|
-
|
28
|
-
it 'is not successful' do
|
29
|
-
expect(result).to be_failing ['must be an array']
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'with blank input' do
|
34
|
-
let(:input) { { foo: '' } }
|
35
|
-
|
36
|
-
it 'is not successful' do
|
37
|
-
expect(result).to be_failing ['must be an array']
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context 'with invalid type' do
|
42
|
-
let(:input) { { foo: { a: 1 } } }
|
43
|
-
|
44
|
-
it 'is not successful' do
|
45
|
-
expect(result).to be_failing ['must be an array']
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context 'with invalid input (integer)' do
|
50
|
-
let(:input) { { foo: 4 } }
|
51
|
-
|
52
|
-
it 'is not successful' do
|
53
|
-
expect(result).to be_failing ['must be an array']
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
context 'with invalid input (array with non-integers)' do
|
58
|
-
let(:input) { { foo: [:foo, :bar] } }
|
59
|
-
|
60
|
-
it 'is not successful' do
|
61
|
-
expect(result).to be_failing 0 => ['must be an integer'], 1 => ['must be an integer']
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context 'with invalid input (miexed array)' do
|
66
|
-
let(:input) { { foo: [1, '2', :bar] } }
|
67
|
-
|
68
|
-
it 'is not successful' do
|
69
|
-
expect(result).to be_failing 1 => ['must be an integer'], 2 => ['must be an integer']
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
context 'with optional' do
|
75
|
-
subject(:schema) do
|
76
|
-
Dry::Validation.Schema do
|
77
|
-
optional(:foo) { array? { each { int? } } }
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
context 'with valid input' do
|
82
|
-
let(:input) { { foo: [3] } }
|
83
|
-
|
84
|
-
it 'is successful' do
|
85
|
-
expect(result).to be_successful
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
context 'with missing input' do
|
90
|
-
let(:input) { {} }
|
91
|
-
|
92
|
-
it 'is successful' do
|
93
|
-
expect(result).to be_successful
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
context 'with nil input' do
|
98
|
-
let(:input) { { foo: nil } }
|
99
|
-
|
100
|
-
it 'is not successful' do
|
101
|
-
expect(result).to be_failing ['must be an array']
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
context 'with blank input' do
|
106
|
-
let(:input) { { foo: '' } }
|
107
|
-
|
108
|
-
it 'is not successful' do
|
109
|
-
expect(result).to be_failing ['must be an array']
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
context 'with invalid type' do
|
114
|
-
let(:input) { { foo: { a: 1 } } }
|
115
|
-
|
116
|
-
it 'is not successful' do
|
117
|
-
expect(result).to be_failing ['must be an array']
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
context 'with invalid input (integer)' do
|
122
|
-
let(:input) { { foo: 4 } }
|
123
|
-
|
124
|
-
it 'is not successful' do
|
125
|
-
expect(result).to be_failing ['must be an array']
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
context 'with invalid input (array with non-integers)' do
|
130
|
-
let(:input) { { foo: [:foo, :bar] } }
|
131
|
-
|
132
|
-
it 'is not successful' do
|
133
|
-
expect(result).to be_failing 0 => ['must be an integer'], 1 => ['must be an integer']
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
context 'with invalid input (miexed array)' do
|
138
|
-
let(:input) { { foo: [1, '2', :bar] } }
|
139
|
-
|
140
|
-
it 'is not successful' do
|
141
|
-
expect(result).to be_failing 1 => ['must be an integer'], 2 => ['must be an integer']
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
context 'as macro' do
|
147
|
-
context 'with required' do
|
148
|
-
subject(:schema) do
|
149
|
-
Dry::Validation.Schema do
|
150
|
-
required(:foo).each(:int?)
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
context 'with missing input' do
|
155
|
-
let(:input) { {} }
|
156
|
-
|
157
|
-
it 'is not successful' do
|
158
|
-
expect(result).to be_failing ['is missing']
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
context 'with nil input' do
|
163
|
-
let(:input) { { foo: nil } }
|
164
|
-
|
165
|
-
it 'is not successful' do
|
166
|
-
expect(result).to be_failing ['must be an array']
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
context 'with blank input' do
|
171
|
-
let(:input) { { foo: '' } }
|
172
|
-
|
173
|
-
it 'is not successful' do
|
174
|
-
expect(result).to be_failing ['must be an array']
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
context 'with valid input' do
|
179
|
-
let(:input) { { foo: [3] } }
|
180
|
-
|
181
|
-
it 'is successful' do
|
182
|
-
expect(result).to be_successful
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
context 'with invalid input' do
|
187
|
-
let(:input) { { foo: [:bar] } }
|
188
|
-
|
189
|
-
it 'is not successful' do
|
190
|
-
expect(result).to be_failing 0 => ['must be an integer']
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
context "when using an input_processor" do
|
195
|
-
subject(:schema) do
|
196
|
-
Dry::Validation.Schema do
|
197
|
-
configure do
|
198
|
-
config.input_processor = :sanitizer
|
199
|
-
end
|
200
|
-
|
201
|
-
required(:foo).each(:int?)
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
context 'with missing input' do
|
206
|
-
let(:input) { {} }
|
207
|
-
|
208
|
-
it 'is not successful' do
|
209
|
-
expect(result).to be_failing ['is missing']
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
context 'with nil input' do
|
214
|
-
let(:input) { { foo: nil } }
|
215
|
-
|
216
|
-
it 'is not successful' do
|
217
|
-
expect(result).to be_failing ['must be an array']
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
context 'with blank input' do
|
222
|
-
let(:input) { { foo: '' } }
|
223
|
-
|
224
|
-
it 'is not successful' do
|
225
|
-
expect(result).to be_failing ['must be an array']
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
context 'with valid input' do
|
230
|
-
let(:input) { { foo: [3] } }
|
231
|
-
|
232
|
-
it 'is successful' do
|
233
|
-
expect(result).to be_successful
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
|
-
context 'with invalid input' do
|
238
|
-
let(:input) { { foo: [:bar] } }
|
239
|
-
|
240
|
-
it 'is not successful' do
|
241
|
-
expect(result).to be_failing 0 => ['must be an integer']
|
242
|
-
end
|
243
|
-
end
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
context 'with optional' do
|
248
|
-
subject(:schema) do
|
249
|
-
Dry::Validation.Schema do
|
250
|
-
optional(:foo).each(:int?)
|
251
|
-
end
|
252
|
-
end
|
253
|
-
|
254
|
-
context 'with missing input' do
|
255
|
-
let(:input) { {} }
|
256
|
-
|
257
|
-
it 'is successful' do
|
258
|
-
expect(result).to be_successful
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
context 'with nil input' do
|
263
|
-
let(:input) { { foo: nil } }
|
264
|
-
|
265
|
-
it 'is not successful' do
|
266
|
-
expect(result).to be_failing ['must be an array']
|
267
|
-
end
|
268
|
-
end
|
269
|
-
|
270
|
-
context 'with blank input' do
|
271
|
-
let(:input) { { foo: '' } }
|
272
|
-
|
273
|
-
it 'is not successful' do
|
274
|
-
expect(result).to be_failing ['must be an array']
|
275
|
-
end
|
276
|
-
end
|
277
|
-
|
278
|
-
context 'with valid input' do
|
279
|
-
let(:input) { { foo: [3] } }
|
280
|
-
|
281
|
-
it 'is successful' do
|
282
|
-
expect(result).to be_successful
|
283
|
-
end
|
284
|
-
end
|
285
|
-
|
286
|
-
context 'with invalid input' do
|
287
|
-
let(:input) { { foo: [:bar] } }
|
288
|
-
|
289
|
-
it 'is not successful' do
|
290
|
-
expect(result).to be_failing 0 => ['must be an integer']
|
291
|
-
end
|
292
|
-
end
|
293
|
-
end
|
294
|
-
end
|
295
|
-
end
|
@@ -1,103 +0,0 @@
|
|
1
|
-
RSpec.describe 'Predicates: custom' do
|
2
|
-
context 'with custom predicate' do
|
3
|
-
subject(:schema) do
|
4
|
-
Dry::Validation.Schema do
|
5
|
-
configure do
|
6
|
-
config.messages_file = 'spec/fixtures/locales/en.yml'
|
7
|
-
|
8
|
-
def email?(current)
|
9
|
-
!current.match(/\@/).nil?
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
required(:foo) { email? }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'with valid input' do
|
18
|
-
let(:input) { { foo: 'test@dry-rb.org' } }
|
19
|
-
|
20
|
-
it 'is successful' do
|
21
|
-
expect(result).to be_successful
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context 'with invalid input' do
|
26
|
-
let(:input) { { foo: 'test' } }
|
27
|
-
|
28
|
-
it 'is not successful' do
|
29
|
-
expect(result).to be_failing ['must be an email']
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
context 'with custom predicates as module' do
|
35
|
-
subject(:schema) do
|
36
|
-
Dry::Validation.Schema do
|
37
|
-
configure do
|
38
|
-
config.messages_file = 'spec/fixtures/locales/en.yml'
|
39
|
-
predicates (Module.new do
|
40
|
-
include Dry::Logic::Predicates
|
41
|
-
|
42
|
-
def self.email?(current)
|
43
|
-
!current.match(/\@/).nil?
|
44
|
-
end
|
45
|
-
end)
|
46
|
-
end
|
47
|
-
|
48
|
-
required(:foo) { email? }
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
context 'with valid input' do
|
53
|
-
let(:input) { { foo: 'test@hanamirb.org' } }
|
54
|
-
|
55
|
-
it 'is successful' do
|
56
|
-
expect(result).to be_successful
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
context 'with invalid input' do
|
61
|
-
let(:input) { { foo: 'test' } }
|
62
|
-
|
63
|
-
it 'is successful' do
|
64
|
-
expect(result).to be_failing ['must be an email']
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
context 'without custom predicate' do
|
70
|
-
it 'raises error if try to use an unknown predicate' do
|
71
|
-
expect do
|
72
|
-
Dry::Validation.Schema do
|
73
|
-
required(:foo) { email? }
|
74
|
-
end
|
75
|
-
end.to raise_error(ArgumentError, '+email?+ is not a valid predicate name')
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
context 'with nested validations' do
|
80
|
-
subject(:schema) do
|
81
|
-
Dry::Validation.Schema do
|
82
|
-
required(:details).schema do
|
83
|
-
configure do
|
84
|
-
config.messages_file = 'spec/fixtures/locales/en.yml'
|
85
|
-
|
86
|
-
def odd?(current)
|
87
|
-
current.odd?
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
required(:foo) { odd? }
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
let(:input) { { details: { foo: 2 } } }
|
97
|
-
|
98
|
-
it 'allows groups to define their own custom predicates' do
|
99
|
-
expect(result).to_not be_success
|
100
|
-
expect(result.messages[:details]).to eq(foo: ['must be odd'])
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
@@ -1,263 +0,0 @@
|
|
1
|
-
RSpec.describe 'Predicates: Empty' do
|
2
|
-
context 'with required' do
|
3
|
-
subject(:schema) do
|
4
|
-
Dry::Validation.Schema do
|
5
|
-
required(:foo) { empty? }
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
context 'with valid input (array)' do
|
10
|
-
let(:input) { { foo: [] } }
|
11
|
-
|
12
|
-
it 'is successful' do
|
13
|
-
expect(result).to be_successful
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'with valid input (hash)' do
|
18
|
-
let(:input) { { foo: {} } }
|
19
|
-
|
20
|
-
it 'is successful' do
|
21
|
-
expect(result).to be_successful
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context 'with missing input' do
|
26
|
-
let(:input) { {} }
|
27
|
-
|
28
|
-
it 'is not successful' do
|
29
|
-
expect(result).to be_failing ['is missing', 'must be empty']
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'with nil input' do
|
34
|
-
let(:input) { { foo: nil } }
|
35
|
-
|
36
|
-
it 'is successful' do
|
37
|
-
expect(result).to be_successful
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context 'with blank input' do
|
42
|
-
let(:input) { { foo: '' } }
|
43
|
-
|
44
|
-
it 'is successful' do
|
45
|
-
expect(result).to be_successful
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context 'with invalid input' do
|
50
|
-
let(:input) { { foo: [23] } }
|
51
|
-
|
52
|
-
it 'is not successful' do
|
53
|
-
expect(result).to be_failing ['must be empty']
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
context 'with optional' do
|
59
|
-
subject(:schema) do
|
60
|
-
Dry::Validation.Schema do
|
61
|
-
optional(:foo) { empty? }
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context 'with valid input (array)' do
|
66
|
-
let(:input) { { foo: [] } }
|
67
|
-
|
68
|
-
it 'is successful' do
|
69
|
-
expect(result).to be_successful
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
context 'with valid input (hash)' do
|
74
|
-
let(:input) { { foo: {} } }
|
75
|
-
|
76
|
-
it 'is successful' do
|
77
|
-
expect(result).to be_successful
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
context 'with missing input' do
|
82
|
-
let(:input) { {} }
|
83
|
-
|
84
|
-
it 'is successful' do
|
85
|
-
expect(result).to be_successful
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
context 'with nil input' do
|
90
|
-
let(:input) { { foo: nil } }
|
91
|
-
|
92
|
-
it 'is successful' do
|
93
|
-
expect(result).to be_successful
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
context 'with blank input' do
|
98
|
-
let(:input) { { foo: '' } }
|
99
|
-
|
100
|
-
it 'is successful' do
|
101
|
-
expect(result).to be_successful
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
context 'with invalid input' do
|
106
|
-
let(:input) { { foo: [23] } }
|
107
|
-
|
108
|
-
it 'is not successful' do
|
109
|
-
expect(result).to be_failing ['must be empty']
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
context 'as macro' do
|
115
|
-
context 'with required' do
|
116
|
-
context 'with value' do
|
117
|
-
subject(:schema) do
|
118
|
-
Dry::Validation.Schema do
|
119
|
-
required(:foo).value(:empty?)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
context 'with valid input (array)' do
|
124
|
-
let(:input) { { foo: [] } }
|
125
|
-
|
126
|
-
it 'is successful' do
|
127
|
-
expect(result).to be_successful
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
context 'with valid input (hash)' do
|
132
|
-
let(:input) { { foo: {} } }
|
133
|
-
|
134
|
-
it 'is successful' do
|
135
|
-
expect(result).to be_successful
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
context 'with missing input' do
|
140
|
-
let(:input) { {} }
|
141
|
-
|
142
|
-
it 'is not successful' do
|
143
|
-
expect(result).to be_failing ['is missing', 'must be empty']
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
context 'with nil input' do
|
148
|
-
let(:input) { { foo: nil } }
|
149
|
-
|
150
|
-
it 'is successful' do
|
151
|
-
expect(result).to be_successful
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
context 'with blank input' do
|
156
|
-
let(:input) { { foo: '' } }
|
157
|
-
|
158
|
-
it 'is successful' do
|
159
|
-
expect(result).to be_successful
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
context 'with invalid input' do
|
164
|
-
let(:input) { { foo: [23] } }
|
165
|
-
|
166
|
-
it 'is not successful' do
|
167
|
-
expect(result).to be_failing ['must be empty']
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
context 'with filled' do
|
173
|
-
it "raises error" do
|
174
|
-
expect { Dry::Validation.Schema do
|
175
|
-
required(:foo).filled(:empty?)
|
176
|
-
end }.to raise_error InvalidSchemaError
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
context 'with maybe' do
|
181
|
-
it "raises error" do
|
182
|
-
expect { Dry::Validation.Schema do
|
183
|
-
required(:foo).maybe(:empty?)
|
184
|
-
end }.to raise_error InvalidSchemaError
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
context 'with optional' do
|
190
|
-
context 'with value' do
|
191
|
-
subject(:schema) do
|
192
|
-
Dry::Validation.Schema do
|
193
|
-
optional(:foo).value(:empty?)
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
context 'with valid input (array)' do
|
198
|
-
let(:input) { { foo: [] } }
|
199
|
-
|
200
|
-
it 'is successful' do
|
201
|
-
expect(result).to be_successful
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
context 'with valid input (hash)' do
|
206
|
-
let(:input) { { foo: {} } }
|
207
|
-
|
208
|
-
it 'is successful' do
|
209
|
-
expect(result).to be_successful
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
context 'with missing input' do
|
214
|
-
let(:input) { {} }
|
215
|
-
|
216
|
-
it 'is successful' do
|
217
|
-
expect(result).to be_successful
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
context 'with nil input' do
|
222
|
-
let(:input) { { foo: nil } }
|
223
|
-
|
224
|
-
it 'is successful' do
|
225
|
-
expect(result).to be_successful
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
context 'with blank input' do
|
230
|
-
let(:input) { { foo: '' } }
|
231
|
-
|
232
|
-
it 'is successful' do
|
233
|
-
expect(result).to be_successful
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
|
-
context 'with invalid input' do
|
238
|
-
let(:input) { { foo: [23] } }
|
239
|
-
|
240
|
-
it 'is not successful' do
|
241
|
-
expect(result).to be_failing ['must be empty']
|
242
|
-
end
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
context 'with filled' do
|
247
|
-
it "raises error" do
|
248
|
-
expect { Dry::Validation.Schema do
|
249
|
-
optional(:foo).filled(:empty?)
|
250
|
-
end }.to raise_error InvalidSchemaError
|
251
|
-
end
|
252
|
-
end
|
253
|
-
|
254
|
-
context 'with maybe' do
|
255
|
-
it "raises error" do
|
256
|
-
expect { Dry::Validation.Schema do
|
257
|
-
optional(:foo).maybe(:empty?)
|
258
|
-
end }.to raise_error InvalidSchemaError
|
259
|
-
end
|
260
|
-
end
|
261
|
-
end
|
262
|
-
end
|
263
|
-
end
|