dry-validation 0.9.5 → 0.10.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/.travis.yml +1 -8
- data/CHANGELOG.md +34 -1
- data/Gemfile +2 -0
- data/Rakefile +12 -3
- data/config/errors.yml +1 -0
- data/dry-validation.gemspec +3 -2
- data/lib/dry/validation/executor.rb +3 -27
- data/lib/dry/validation/extensions/monads.rb +17 -0
- data/lib/dry/validation/extensions/struct.rb +32 -0
- data/lib/dry/validation/extensions.rb +7 -0
- data/lib/dry/validation/input_processor_compiler.rb +19 -3
- data/lib/dry/validation/message.rb +43 -30
- data/lib/dry/validation/message_compiler/visitor_opts.rb +39 -0
- data/lib/dry/validation/message_compiler.rb +98 -52
- data/lib/dry/validation/message_set.rb +59 -30
- data/lib/dry/validation/predicate_registry.rb +17 -6
- data/lib/dry/validation/result.rb +39 -17
- data/lib/dry/validation/schema/check.rb +5 -4
- data/lib/dry/validation/schema/class_interface.rb +6 -13
- data/lib/dry/validation/schema/dsl.rb +9 -3
- data/lib/dry/validation/schema/form.rb +12 -3
- data/lib/dry/validation/schema/json.rb +12 -3
- data/lib/dry/validation/schema/key.rb +6 -6
- data/lib/dry/validation/schema/rule.rb +14 -8
- data/lib/dry/validation/schema/value.rb +23 -21
- data/lib/dry/validation/schema.rb +9 -12
- data/lib/dry/validation/schema_compiler.rb +16 -2
- data/lib/dry/validation/version.rb +1 -1
- data/lib/dry/validation.rb +11 -23
- data/spec/extensions/monads/result_spec.rb +38 -0
- data/spec/extensions/struct/schema_spec.rb +32 -0
- data/spec/integration/custom_predicates_spec.rb +7 -6
- data/spec/integration/form/predicates/size/fixed_spec.rb +0 -2
- data/spec/integration/form/predicates/size/range_spec.rb +0 -2
- data/spec/integration/hints_spec.rb +2 -6
- data/spec/integration/json/defining_base_schema_spec.rb +41 -0
- data/spec/integration/{error_compiler_spec.rb → message_compiler_spec.rb} +79 -131
- data/spec/integration/result_spec.rb +26 -4
- data/spec/integration/schema/check_with_nested_el_spec.rb +1 -1
- data/spec/integration/schema/check_with_nth_el_spec.rb +1 -1
- data/spec/integration/schema/defining_base_schema_spec.rb +3 -0
- data/spec/integration/schema/dynamic_predicate_args_spec.rb +34 -9
- data/spec/integration/schema/form/defining_base_schema_spec.rb +41 -0
- data/spec/integration/schema/json_spec.rb +1 -0
- data/spec/integration/schema/macros/input_spec.rb +26 -0
- data/spec/integration/schema/macros/rule_spec.rb +2 -1
- data/spec/integration/schema/macros/value_spec.rb +1 -1
- data/spec/integration/schema/macros/when_spec.rb +1 -24
- data/spec/integration/schema/or_spec.rb +87 -0
- data/spec/integration/schema/predicates/custom_spec.rb +4 -4
- data/spec/integration/schema/predicates/even_spec.rb +10 -10
- data/spec/integration/schema/predicates/odd_spec.rb +10 -10
- data/spec/integration/schema/predicates/size/fixed_spec.rb +0 -3
- data/spec/integration/schema/predicates/size/range_spec.rb +0 -2
- data/spec/integration/schema/predicates/type_spec.rb +22 -0
- data/spec/integration/schema/using_types_spec.rb +14 -41
- data/spec/integration/schema/validate_spec.rb +83 -0
- data/spec/integration/schema/xor_spec.rb +5 -5
- data/spec/integration/schema_builders_spec.rb +4 -2
- data/spec/integration/schema_spec.rb +8 -0
- data/spec/shared/message_compiler.rb +11 -0
- data/spec/shared/predicate_helper.rb +5 -3
- data/spec/spec_helper.rb +15 -0
- data/spec/unit/input_processor_compiler/form_spec.rb +3 -3
- data/spec/unit/message_compiler/visit_failure_spec.rb +38 -0
- data/spec/unit/message_compiler/visit_spec.rb +16 -0
- data/spec/unit/message_compiler_spec.rb +7 -0
- data/spec/unit/predicate_registry_spec.rb +2 -2
- data/spec/unit/schema/key_spec.rb +19 -12
- data/spec/unit/schema/rule_spec.rb +14 -6
- data/spec/unit/schema/value_spec.rb +49 -52
- metadata +50 -20
- data/lib/dry/validation/constants.rb +0 -6
- data/lib/dry/validation/error.rb +0 -26
- data/lib/dry/validation/error_compiler.rb +0 -81
- data/lib/dry/validation/hint_compiler.rb +0 -104
- data/spec/unit/error_compiler_spec.rb +0 -7
- data/spec/unit/hint_compiler_spec.rb +0 -51
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
RSpec.describe Dry::Validation do
|
2
3
|
shared_context 'uses custom predicates' do
|
3
4
|
it 'uses provided custom predicates' do
|
@@ -29,7 +30,7 @@ RSpec.describe Dry::Validation do
|
|
29
30
|
module Predicates
|
30
31
|
include Dry::Logic::Predicates
|
31
32
|
|
32
|
-
|
33
|
+
def self.email?(input)
|
33
34
|
input.include?('@') # for the lols
|
34
35
|
end
|
35
36
|
end
|
@@ -37,16 +38,16 @@ RSpec.describe Dry::Validation do
|
|
37
38
|
end
|
38
39
|
|
39
40
|
context 'when configured globally' do
|
40
|
-
|
41
|
-
Dry::Validation::Schema.predicates(Test::Predicates)
|
42
|
-
end
|
43
|
-
|
44
|
-
subject!(:schema) do
|
41
|
+
subject(:schema) do
|
45
42
|
Dry::Validation.Schema(base_class) do
|
46
43
|
required(:email) { filled? & email? }
|
47
44
|
end
|
48
45
|
end
|
49
46
|
|
47
|
+
before do
|
48
|
+
Dry::Validation::Schema.predicates(Test::Predicates)
|
49
|
+
end
|
50
|
+
|
50
51
|
after do
|
51
52
|
# HACK: reset global predicates configuration
|
52
53
|
Dry::Validation::Schema.configure do |config|
|
@@ -181,7 +181,6 @@ RSpec.describe 'Predicates: Size' do
|
|
181
181
|
let(:input) { { 'foo' => '' } }
|
182
182
|
|
183
183
|
it 'is not successful' do
|
184
|
-
pending
|
185
184
|
expect(result).to be_failing ['must be filled', 'length must be 3']
|
186
185
|
end
|
187
186
|
end
|
@@ -328,7 +327,6 @@ RSpec.describe 'Predicates: Size' do
|
|
328
327
|
let(:input) { { 'foo' => '' } }
|
329
328
|
|
330
329
|
it 'is not successful' do
|
331
|
-
pending
|
332
330
|
expect(result).to be_failing ['must be filled', 'length must be 3']
|
333
331
|
end
|
334
332
|
end
|
@@ -183,7 +183,6 @@ RSpec.describe 'Predicates: Size' do
|
|
183
183
|
let(:input) { { 'foo' => '' } }
|
184
184
|
|
185
185
|
it 'is not successful' do
|
186
|
-
pending
|
187
186
|
expect(result).to be_failing ['must be filled', 'length must be within 2 - 3']
|
188
187
|
end
|
189
188
|
end
|
@@ -331,7 +330,6 @@ RSpec.describe 'Predicates: Size' do
|
|
331
330
|
let(:input) { { 'foo' => '' } }
|
332
331
|
|
333
332
|
it 'is not successful' do
|
334
|
-
pending
|
335
333
|
expect(result).to be_failing ['must be filled', 'length must be within 2 - 3']
|
336
334
|
end
|
337
335
|
end
|
@@ -18,9 +18,7 @@ RSpec.describe 'Validation hints' do
|
|
18
18
|
context 'with yaml messages' do
|
19
19
|
subject(:schema) do
|
20
20
|
Dry::Validation.Schema do
|
21
|
-
required(:age)
|
22
|
-
age.none? | (age.int? & age.gt?(18))
|
23
|
-
end
|
21
|
+
required(:age).maybe(:int?, gt?: 18)
|
24
22
|
end
|
25
23
|
end
|
26
24
|
|
@@ -32,9 +30,7 @@ RSpec.describe 'Validation hints' do
|
|
32
30
|
Dry::Validation.Schema do
|
33
31
|
configure { configure { |c| c.messages = :i18n } }
|
34
32
|
|
35
|
-
required(:age)
|
36
|
-
age.none? | (age.int? & age.gt?(18))
|
37
|
-
end
|
33
|
+
required(:age).maybe(:int?, gt?: 18)
|
38
34
|
end
|
39
35
|
end
|
40
36
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'dry/validation/messages/i18n'
|
2
|
+
require 'i18n'
|
3
|
+
|
4
|
+
RSpec.describe 'Defining base schema class' do
|
5
|
+
subject(:schema) do
|
6
|
+
Dry::Validation.JSON(BaseSchema) do
|
7
|
+
required(:email).filled(:email?)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
before do
|
12
|
+
class BaseSchema < Dry::Validation::Schema
|
13
|
+
configure do |config|
|
14
|
+
config.messages_file = SPEC_ROOT.join('fixtures/locales/en.yml')
|
15
|
+
config.messages = :i18n
|
16
|
+
end
|
17
|
+
|
18
|
+
def email?(value)
|
19
|
+
true
|
20
|
+
end
|
21
|
+
|
22
|
+
define! do
|
23
|
+
required(:name).filled
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
after do
|
29
|
+
Object.send(:remove_const, :BaseSchema)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'inherits predicates' do
|
33
|
+
expect(schema).to respond_to(:email?)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'inherits rules' do
|
37
|
+
expect(schema.('name' => '').messages).to eql(
|
38
|
+
name: ['must be filled'], email: ['is missing', 'must be an email']
|
39
|
+
)
|
40
|
+
end
|
41
|
+
end
|
@@ -1,8 +1,7 @@
|
|
1
|
-
require 'dry/validation/
|
2
|
-
require 'dry/validation/error_compiler'
|
1
|
+
require 'dry/validation/message_compiler'
|
3
2
|
|
4
|
-
RSpec.describe Dry::Validation::
|
5
|
-
subject(:
|
3
|
+
RSpec.describe Dry::Validation::MessageCompiler do
|
4
|
+
subject(:message_compiler) { MessageCompiler.new(messages) }
|
6
5
|
|
7
6
|
include_context 'predicate helper'
|
8
7
|
|
@@ -39,16 +38,16 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
39
38
|
describe '#call with flat inputs' do
|
40
39
|
let(:ast) do
|
41
40
|
[
|
42
|
-
[:
|
43
|
-
[:
|
44
|
-
[:
|
45
|
-
[:
|
46
|
-
[:
|
41
|
+
[:failure, [:name, p(:key?, :name)]],
|
42
|
+
[:failure, [:gender, p(:key?, :gender)]],
|
43
|
+
[:key, [:age, [:failure, [:age, p(:gt?, 18)]]]],
|
44
|
+
[:key, [:email, [:failure, [:email, p(:filled?, '')]]]],
|
45
|
+
[:key, [:address, [:failure, [:address, p(:filled?, '')]]]]
|
47
46
|
]
|
48
47
|
end
|
49
48
|
|
50
49
|
it 'converts error ast into another format' do
|
51
|
-
expect(
|
50
|
+
expect(message_compiler.(ast).to_h).to eql(
|
52
51
|
name: ["+name+ key is missing in the hash"],
|
53
52
|
gender: ["Please provide your gender"],
|
54
53
|
age: ["must be greater than 18"],
|
@@ -58,62 +57,11 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
58
57
|
end
|
59
58
|
end
|
60
59
|
|
61
|
-
describe '#call with check errors' do
|
62
|
-
let(:ast) do
|
63
|
-
[[:error, [:newsletter, [
|
64
|
-
:input, [[:settings, :newsletter], [
|
65
|
-
:result, [
|
66
|
-
[true, true],
|
67
|
-
[
|
68
|
-
:check, [
|
69
|
-
:newsletter,
|
70
|
-
[:implication, [
|
71
|
-
[:key, [[:settings, :offers], p(:true?)]],
|
72
|
-
[:key, [[:settings, :newsletter], p(:false?)]]]
|
73
|
-
]
|
74
|
-
]
|
75
|
-
]
|
76
|
-
]
|
77
|
-
]
|
78
|
-
]]]
|
79
|
-
]]
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'converts error ast into another format' do
|
83
|
-
expect(error_compiler.(ast).to_h).to eql(
|
84
|
-
settings: { newsletter: ['must be false'] }
|
85
|
-
)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
describe '#call with arr inputs' do
|
90
|
-
let(:ast) do
|
91
|
-
[[:error, [:payments,
|
92
|
-
[:input, [
|
93
|
-
:payments, [:result, [
|
94
|
-
[{ method: "cc", amount: 1.23 }, { amount: 4.56 }], [:each, [
|
95
|
-
[:el, [
|
96
|
-
1, [
|
97
|
-
:result, [{ amount: 4.56 }, [:val, p(:key?, :method)]]
|
98
|
-
]
|
99
|
-
]]
|
100
|
-
]]]
|
101
|
-
]]]
|
102
|
-
]]]
|
103
|
-
end
|
104
|
-
|
105
|
-
it 'converts error ast into another format' do
|
106
|
-
expect(error_compiler.(ast).to_h).to eql(
|
107
|
-
payments: { 1 => { method: ['+method+ key is missing in the hash'] } }
|
108
|
-
)
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
60
|
describe '#visit with an :input node' do
|
113
61
|
context 'full message' do
|
114
62
|
it 'returns full message including rule name' do
|
115
|
-
msg =
|
116
|
-
[:
|
63
|
+
msg = message_compiler.with(full: true).visit(
|
64
|
+
[:failure, [:num, [:key, [:num, p(:int?, '2')]]]]
|
117
65
|
)
|
118
66
|
|
119
67
|
expect(msg).to eql('num must be an integer')
|
@@ -122,8 +70,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
122
70
|
|
123
71
|
context 'rule name translations' do
|
124
72
|
it 'translates rule name and its message' do
|
125
|
-
msg =
|
126
|
-
[:
|
73
|
+
msg = message_compiler.with(locale: :pl, full: true).visit(
|
74
|
+
[:failure, [:email, [:key, [:email, p(:email?, 'oops')]]]]
|
127
75
|
)
|
128
76
|
|
129
77
|
expect(msg).to eql('adres email nie jest poprawny')
|
@@ -132,8 +80,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
132
80
|
|
133
81
|
describe ':empty?' do
|
134
82
|
it 'returns valid message' do
|
135
|
-
msg =
|
136
|
-
[:
|
83
|
+
msg = message_compiler.visit(
|
84
|
+
[:failure, [:tags, [:key, [:tags, p(:empty?, nil)]]]]
|
137
85
|
)
|
138
86
|
|
139
87
|
expect(msg).to eql('must be empty')
|
@@ -142,8 +90,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
142
90
|
|
143
91
|
describe ':excluded_from?' do
|
144
92
|
it 'returns valid message' do
|
145
|
-
msg =
|
146
|
-
[:
|
93
|
+
msg = message_compiler.visit(
|
94
|
+
[:failure, [:num, [:key, [:num, p(:excluded_from?, [1, 2, 3], 2)]]]]
|
147
95
|
)
|
148
96
|
|
149
97
|
expect(msg).to eql('must not be one of: 1, 2, 3')
|
@@ -152,8 +100,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
152
100
|
|
153
101
|
describe ':excludes?' do
|
154
102
|
it 'returns valid message' do
|
155
|
-
msg =
|
156
|
-
[:
|
103
|
+
msg = message_compiler.visit(
|
104
|
+
[:failure, [:array, [:key, [:array, p(:excludes?, 2, [1, 2])]]]]
|
157
105
|
)
|
158
106
|
|
159
107
|
expect(msg).to eql('must not include 2')
|
@@ -162,8 +110,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
162
110
|
|
163
111
|
describe ':included_in?' do
|
164
112
|
it 'returns valid message' do
|
165
|
-
msg =
|
166
|
-
[:
|
113
|
+
msg = message_compiler.visit(
|
114
|
+
[:failure, [:num, [:key, [:num, p(:included_in?, [1, 2, 3], :num)]]]]
|
167
115
|
)
|
168
116
|
|
169
117
|
expect(msg).to eql('must be one of: 1, 2, 3')
|
@@ -172,8 +120,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
172
120
|
|
173
121
|
describe ':includes?' do
|
174
122
|
it 'returns valid message' do
|
175
|
-
msg =
|
176
|
-
[:
|
123
|
+
msg = message_compiler.visit(
|
124
|
+
[:failure, [:num, [:key, [:num, p(:includes?, 2, [1])]]]]
|
177
125
|
)
|
178
126
|
|
179
127
|
expect(msg).to eql('must include 2')
|
@@ -182,8 +130,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
182
130
|
|
183
131
|
describe ':gt?' do
|
184
132
|
it 'returns valid message' do
|
185
|
-
msg =
|
186
|
-
[:
|
133
|
+
msg = message_compiler.visit(
|
134
|
+
[:failure, [:num, [:key, [:num, p(:gt?, 3, 2)]]]]
|
187
135
|
)
|
188
136
|
|
189
137
|
expect(msg).to eql('must be greater than 3')
|
@@ -192,8 +140,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
192
140
|
|
193
141
|
describe ':gteq?' do
|
194
142
|
it 'returns valid message' do
|
195
|
-
msg =
|
196
|
-
[:
|
143
|
+
msg = message_compiler.visit(
|
144
|
+
[:failure, [:num, [:key, [:num, p(:gteq?, 3, 2)]]]]
|
197
145
|
)
|
198
146
|
|
199
147
|
expect(msg).to eql('must be greater than or equal to 3')
|
@@ -202,8 +150,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
202
150
|
|
203
151
|
describe ':lt?' do
|
204
152
|
it 'returns valid message' do
|
205
|
-
msg =
|
206
|
-
[:
|
153
|
+
msg = message_compiler.visit(
|
154
|
+
[:failure, [:num, [:key, [:num, p(:lt?, 3, 2)]]]]
|
207
155
|
)
|
208
156
|
|
209
157
|
expect(msg).to eql('must be less than 3')
|
@@ -212,8 +160,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
212
160
|
|
213
161
|
describe ':lteq?' do
|
214
162
|
it 'returns valid message' do
|
215
|
-
msg =
|
216
|
-
[:
|
163
|
+
msg = message_compiler.visit(
|
164
|
+
[:failure, [:num, [:key, [:num, p(:lteq?, 3, 2)]]]]
|
217
165
|
)
|
218
166
|
|
219
167
|
expect(msg).to eql('must be less than or equal to 3')
|
@@ -222,8 +170,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
222
170
|
|
223
171
|
describe ':hash?' do
|
224
172
|
it 'returns valid message' do
|
225
|
-
msg =
|
226
|
-
[:
|
173
|
+
msg = message_compiler.visit(
|
174
|
+
[:failure, [:address, [:key, [:address, p(:hash?, '')]]]]
|
227
175
|
)
|
228
176
|
|
229
177
|
expect(msg).to eql('must be a hash')
|
@@ -232,8 +180,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
232
180
|
|
233
181
|
describe ':array?' do
|
234
182
|
it 'returns valid message' do
|
235
|
-
msg =
|
236
|
-
[:
|
183
|
+
msg = message_compiler.visit(
|
184
|
+
[:failure, [:phone_numbers, [:key, [:phone, p(:array?,'')]]]]
|
237
185
|
)
|
238
186
|
|
239
187
|
expect(msg).to eql('must be an array')
|
@@ -242,8 +190,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
242
190
|
|
243
191
|
describe ':int?' do
|
244
192
|
it 'returns valid message' do
|
245
|
-
msg =
|
246
|
-
[:
|
193
|
+
msg = message_compiler.visit(
|
194
|
+
[:failure, [:num, [:key, [:num, p(:int?, '2')]]]]
|
247
195
|
)
|
248
196
|
|
249
197
|
expect(msg).to eql('must be an integer')
|
@@ -252,8 +200,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
252
200
|
|
253
201
|
describe ':float?' do
|
254
202
|
it 'returns valid message' do
|
255
|
-
msg =
|
256
|
-
[:
|
203
|
+
msg = message_compiler.visit(
|
204
|
+
[:failure, [:num, [:key, [:num, p(:float?, '2')]]]]
|
257
205
|
)
|
258
206
|
|
259
207
|
expect(msg).to eql('must be a float')
|
@@ -262,8 +210,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
262
210
|
|
263
211
|
describe ':decimal?' do
|
264
212
|
it 'returns valid message' do
|
265
|
-
msg =
|
266
|
-
[:
|
213
|
+
msg = message_compiler.visit(
|
214
|
+
[:failure, [:num, [:key, [:num, p(:decimal?, '2')]]]]
|
267
215
|
)
|
268
216
|
|
269
217
|
expect(msg).to eql('must be a decimal')
|
@@ -272,8 +220,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
272
220
|
|
273
221
|
describe ':date?' do
|
274
222
|
it 'returns valid message' do
|
275
|
-
msg =
|
276
|
-
[:
|
223
|
+
msg = message_compiler.visit(
|
224
|
+
[:failure, [:num, [:key, [:num, p(:date?, '2')]]]]
|
277
225
|
)
|
278
226
|
|
279
227
|
expect(msg).to eql('must be a date')
|
@@ -282,8 +230,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
282
230
|
|
283
231
|
describe ':date_time?' do
|
284
232
|
it 'returns valid message' do
|
285
|
-
msg =
|
286
|
-
[:
|
233
|
+
msg = message_compiler.visit(
|
234
|
+
[:failure, [:num, [:key, [:num, p(:date_time?, '2')]]]]
|
287
235
|
)
|
288
236
|
|
289
237
|
expect(msg).to eql('must be a date time')
|
@@ -292,8 +240,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
292
240
|
|
293
241
|
describe ':time?' do
|
294
242
|
it 'returns valid message' do
|
295
|
-
msg =
|
296
|
-
[:
|
243
|
+
msg = message_compiler.visit(
|
244
|
+
[:failure, [:num, [:key, [:num, p(:time?, '2')]]]]
|
297
245
|
)
|
298
246
|
|
299
247
|
expect(msg).to eql('must be a time')
|
@@ -302,8 +250,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
302
250
|
|
303
251
|
describe ':max_size?' do
|
304
252
|
it 'returns valid message' do
|
305
|
-
msg =
|
306
|
-
[:
|
253
|
+
msg = message_compiler.visit(
|
254
|
+
[:failure, [:num, [:key, [:num, p(:max_size?, 3, 'abcd')]]]]
|
307
255
|
)
|
308
256
|
|
309
257
|
expect(msg).to eql('size cannot be greater than 3')
|
@@ -312,8 +260,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
312
260
|
|
313
261
|
describe ':min_size?' do
|
314
262
|
it 'returns valid message' do
|
315
|
-
msg =
|
316
|
-
[:
|
263
|
+
msg = message_compiler.visit(
|
264
|
+
[:failure, [:num, [:key, [:num, p(:min_size?, 3, 'ab')]]]]
|
317
265
|
)
|
318
266
|
|
319
267
|
expect(msg).to eql('size cannot be less than 3')
|
@@ -322,8 +270,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
322
270
|
|
323
271
|
describe ':none?' do
|
324
272
|
it 'returns valid message' do
|
325
|
-
msg =
|
326
|
-
[:
|
273
|
+
msg = message_compiler.visit(
|
274
|
+
[:failure, [:num, [:key, [:num, p(:none?, nil)]]]]
|
327
275
|
)
|
328
276
|
|
329
277
|
expect(msg).to eql('cannot be defined')
|
@@ -332,32 +280,32 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
332
280
|
|
333
281
|
describe ':size?' do
|
334
282
|
it 'returns valid message when val is array and arg is int' do
|
335
|
-
msg =
|
336
|
-
[:
|
283
|
+
msg = message_compiler.visit(
|
284
|
+
[:failure, [:numbers, [:key, [:numbers, p(:size?, 3, [1])]]]]
|
337
285
|
)
|
338
286
|
|
339
287
|
expect(msg).to eql('size must be 3')
|
340
288
|
end
|
341
289
|
|
342
290
|
it 'returns valid message when val is array and arg is range' do
|
343
|
-
msg =
|
344
|
-
[:
|
291
|
+
msg = message_compiler.visit(
|
292
|
+
[:failure, [:numbers, [:key, [:numbers, p(:size?, 3..4, [1])]]]]
|
345
293
|
)
|
346
294
|
|
347
295
|
expect(msg).to eql('size must be within 3 - 4')
|
348
296
|
end
|
349
297
|
|
350
298
|
it 'returns valid message when arg is int' do
|
351
|
-
msg =
|
352
|
-
[:
|
299
|
+
msg = message_compiler.visit(
|
300
|
+
[:failure, [:num, [:key, [:num, p(:size?, 3, 'ab')]]]]
|
353
301
|
)
|
354
302
|
|
355
303
|
expect(msg).to eql('length must be 3')
|
356
304
|
end
|
357
305
|
|
358
306
|
it 'returns valid message when arg is range' do
|
359
|
-
msg =
|
360
|
-
[:
|
307
|
+
msg = message_compiler.visit(
|
308
|
+
[:failure, [:num, [:key, [:num, p(:size?, 3..4, 'ab')]]]]
|
361
309
|
)
|
362
310
|
|
363
311
|
expect(msg).to eql('length must be within 3 - 4')
|
@@ -366,8 +314,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
366
314
|
|
367
315
|
describe ':str?' do
|
368
316
|
it 'returns valid message' do
|
369
|
-
msg =
|
370
|
-
[:
|
317
|
+
msg = message_compiler.visit(
|
318
|
+
[:failure, [:num, [:key, [:num, p(:str?, 3)]]]]
|
371
319
|
)
|
372
320
|
|
373
321
|
expect(msg).to eql('must be a string')
|
@@ -376,8 +324,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
376
324
|
|
377
325
|
describe ':bool?' do
|
378
326
|
it 'returns valid message' do
|
379
|
-
msg =
|
380
|
-
[:
|
327
|
+
msg = message_compiler.visit(
|
328
|
+
[:failure, [:num, [:key, [:num, p(:bool?, 3)]]]]
|
381
329
|
)
|
382
330
|
|
383
331
|
expect(msg).to eql('must be boolean')
|
@@ -386,8 +334,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
386
334
|
|
387
335
|
describe ':format?' do
|
388
336
|
it 'returns valid message' do
|
389
|
-
msg =
|
390
|
-
[:
|
337
|
+
msg = message_compiler.visit(
|
338
|
+
[:failure, [:str, [:key, [:str, p(:format?, /^F/, 'Bar')]]]]
|
391
339
|
)
|
392
340
|
|
393
341
|
expect(msg).to eql('is in invalid format')
|
@@ -396,8 +344,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
396
344
|
|
397
345
|
describe ':number?' do
|
398
346
|
it 'returns valid message' do
|
399
|
-
msg =
|
400
|
-
[:
|
347
|
+
msg = message_compiler.visit(
|
348
|
+
[:failure, [:str, [:key, [:str, p(:number?, 'not a number')]]]]
|
401
349
|
)
|
402
350
|
|
403
351
|
expect(msg).to eql('must be a number')
|
@@ -406,8 +354,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
406
354
|
|
407
355
|
describe ':odd?' do
|
408
356
|
it 'returns valid message' do
|
409
|
-
msg =
|
410
|
-
[:
|
357
|
+
msg = message_compiler.visit(
|
358
|
+
[:failure, [:str, [:key, [:str, p(:odd?, 1)]]]]
|
411
359
|
)
|
412
360
|
|
413
361
|
expect(msg).to eql('must be odd')
|
@@ -416,8 +364,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
416
364
|
|
417
365
|
describe ':even?' do
|
418
366
|
it 'returns valid message' do
|
419
|
-
msg =
|
420
|
-
[:
|
367
|
+
msg = message_compiler.visit(
|
368
|
+
[:failure, [:str, [:key, [:str, p(:even?, 2)]]]]
|
421
369
|
)
|
422
370
|
|
423
371
|
expect(msg).to eql('must be even')
|
@@ -426,8 +374,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
426
374
|
|
427
375
|
describe ':eql?' do
|
428
376
|
it 'returns valid message' do
|
429
|
-
msg =
|
430
|
-
[:
|
377
|
+
msg = message_compiler.visit(
|
378
|
+
[:failure, [:str, [:key, [:str, p(:eql?, 'Bar', 'Foo')]]]]
|
431
379
|
)
|
432
380
|
|
433
381
|
expect(msg).to eql('must be equal to Bar')
|
@@ -436,8 +384,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
436
384
|
|
437
385
|
describe ':not_eql?' do
|
438
386
|
it 'returns valid message' do
|
439
|
-
msg =
|
440
|
-
[:
|
387
|
+
msg = message_compiler.visit(
|
388
|
+
[:failure, [:str, [:key, [:str, p(:not_eql?, 'Foo', 'Foo')]]]]
|
441
389
|
)
|
442
390
|
|
443
391
|
expect(msg).to eql('must not be equal to Foo')
|
@@ -446,8 +394,8 @@ RSpec.describe Dry::Validation::ErrorCompiler do
|
|
446
394
|
|
447
395
|
describe ':type?' do
|
448
396
|
it 'returns valid message' do
|
449
|
-
msg =
|
450
|
-
[:
|
397
|
+
msg = message_compiler.visit(
|
398
|
+
[:failure, [:age, [:key, [:age, p(:type?, Integer, '1')]]]]
|
451
399
|
)
|
452
400
|
|
453
401
|
expect(msg).to eql('must be Integer')
|