livr 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +6 -0
- data/Gemfile +2 -0
- data/README.md +240 -0
- data/Rakefile +9 -0
- data/lib/LIVR.rb +221 -0
- data/lib/LIVR/Rules/Common.rb +21 -0
- data/lib/LIVR/Rules/Filters.rb +43 -0
- data/lib/LIVR/Rules/Helpers.rb +126 -0
- data/lib/LIVR/Rules/Numerics.rb +63 -0
- data/lib/LIVR/Rules/Special.rb +55 -0
- data/lib/LIVR/Rules/Strings.rb +71 -0
- data/lib/LIVR/Util.rb +6 -0
- data/livr.gemspec +29 -0
- data/test/01-test_suite.rb +77 -0
- data/test/02-test_auto_trim.rb +55 -0
- data/test/03-test_rules_registration.rb +63 -0
- data/test/04-test_custom_filters.rb +44 -0
- data/test/test_helper.rb +6 -0
- data/test/test_suite/aliases_negative/01-adult_age/aliases.json +12 -0
- data/test/test_suite/aliases_negative/01-adult_age/errors.json +6 -0
- data/test/test_suite/aliases_negative/01-adult_age/input.json +11 -0
- data/test/test_suite/aliases_negative/01-adult_age/rules.json +10 -0
- data/test/test_suite/aliases_negative/02-address/aliases.json +20 -0
- data/test/test_suite/aliases_negative/02-address/errors.json +8 -0
- data/test/test_suite/aliases_negative/02-address/input.json +13 -0
- data/test/test_suite/aliases_negative/02-address/rules.json +4 -0
- data/test/test_suite/aliases_negative/03-adult_age_in_user/aliases.json +31 -0
- data/test/test_suite/aliases_negative/03-adult_age_in_user/errors.json +8 -0
- data/test/test_suite/aliases_negative/03-adult_age_in_user/input.json +14 -0
- data/test/test_suite/aliases_negative/03-adult_age_in_user/rules.json +4 -0
- data/test/test_suite/aliases_positive/01-adult_age/aliases.json +12 -0
- data/test/test_suite/aliases_positive/01-adult_age/input.json +11 -0
- data/test/test_suite/aliases_positive/01-adult_age/output.json +10 -0
- data/test/test_suite/aliases_positive/01-adult_age/rules.json +10 -0
- data/test/test_suite/aliases_positive/02-address/aliases.json +20 -0
- data/test/test_suite/aliases_positive/02-address/input.json +13 -0
- data/test/test_suite/aliases_positive/02-address/output.json +12 -0
- data/test/test_suite/aliases_positive/02-address/rules.json +4 -0
- data/test/test_suite/aliases_positive/03-adult_age_in_user/aliases.json +31 -0
- data/test/test_suite/aliases_positive/03-adult_age_in_user/input.json +14 -0
- data/test/test_suite/aliases_positive/03-adult_age_in_user/output.json +12 -0
- data/test/test_suite/aliases_positive/03-adult_age_in_user/rules.json +4 -0
- data/test/test_suite/negative/01-required/errors.json +5 -0
- data/test/test_suite/negative/01-required/input.json +10 -0
- data/test/test_suite/negative/01-required/rules.json +10 -0
- data/test/test_suite/negative/02-not_empty/errors.json +3 -0
- data/test/test_suite/negative/02-not_empty/input.json +10 -0
- data/test/test_suite/negative/02-not_empty/rules.json +10 -0
- data/test/test_suite/negative/03-one_of/errors.json +10 -0
- data/test/test_suite/negative/03-one_of/input.json +11 -0
- data/test/test_suite/negative/03-one_of/rules.json +10 -0
- data/test/test_suite/negative/04-min_length/errors.json +10 -0
- data/test/test_suite/negative/04-min_length/input.json +12 -0
- data/test/test_suite/negative/04-min_length/rules.json +11 -0
- data/test/test_suite/negative/05-max_length/errors.json +10 -0
- data/test/test_suite/negative/05-max_length/input.json +12 -0
- data/test/test_suite/negative/05-max_length/rules.json +11 -0
- data/test/test_suite/negative/06-length_equal/errors.json +10 -0
- data/test/test_suite/negative/06-length_equal/input.json +12 -0
- data/test/test_suite/negative/06-length_equal/rules.json +11 -0
- data/test/test_suite/negative/07-length_between/errors.json +10 -0
- data/test/test_suite/negative/07-length_between/input.json +12 -0
- data/test/test_suite/negative/07-length_between/rules.json +11 -0
- data/test/test_suite/negative/08-like/errors.json +11 -0
- data/test/test_suite/negative/08-like/input.json +14 -0
- data/test/test_suite/negative/08-like/rules.json +12 -0
- data/test/test_suite/negative/09-integer/errors.json +10 -0
- data/test/test_suite/negative/09-integer/input.json +12 -0
- data/test/test_suite/negative/09-integer/rules.json +11 -0
- data/test/test_suite/negative/10-positive_integer/errors.json +10 -0
- data/test/test_suite/negative/10-positive_integer/input.json +12 -0
- data/test/test_suite/negative/10-positive_integer/rules.json +11 -0
- data/test/test_suite/negative/11-decimal/errors.json +10 -0
- data/test/test_suite/negative/11-decimal/input.json +12 -0
- data/test/test_suite/negative/11-decimal/rules.json +11 -0
- data/test/test_suite/negative/12-positive_decimal/errors.json +10 -0
- data/test/test_suite/negative/12-positive_decimal/input.json +12 -0
- data/test/test_suite/negative/12-positive_decimal/rules.json +11 -0
- data/test/test_suite/negative/13-max_number/errors.json +9 -0
- data/test/test_suite/negative/13-max_number/input.json +11 -0
- data/test/test_suite/negative/13-max_number/rules.json +10 -0
- data/test/test_suite/negative/14-min_number/errors.json +9 -0
- data/test/test_suite/negative/14-min_number/input.json +11 -0
- data/test/test_suite/negative/14-min_number/rules.json +10 -0
- data/test/test_suite/negative/15-number_beetween/errors.json +9 -0
- data/test/test_suite/negative/15-number_beetween/input.json +11 -0
- data/test/test_suite/negative/15-number_beetween/rules.json +10 -0
- data/test/test_suite/negative/16-email/errors.json +12 -0
- data/test/test_suite/negative/16-email/input.json +14 -0
- data/test/test_suite/negative/16-email/rules.json +13 -0
- data/test/test_suite/negative/17-equal_to_field/errors.json +10 -0
- data/test/test_suite/negative/17-equal_to_field/input.json +12 -0
- data/test/test_suite/negative/17-equal_to_field/rules.json +11 -0
- data/test/test_suite/negative/18-nested_object/errors.json +9 -0
- data/test/test_suite/negative/18-nested_object/input.json +9 -0
- data/test/test_suite/negative/18-nested_object/rules.json +9 -0
- data/test/test_suite/negative/19-list_of/errors.json +6 -0
- data/test/test_suite/negative/19-list_of/input.json +6 -0
- data/test/test_suite/negative/19-list_of/rules.json +14 -0
- data/test/test_suite/negative/20-list_of_objects/errors.json +14 -0
- data/test/test_suite/negative/20-list_of_objects/input.json +18 -0
- data/test/test_suite/negative/20-list_of_objects/rules.json +7 -0
- data/test/test_suite/negative/21-list_of_different_objects/errors.json +17 -0
- data/test/test_suite/negative/21-list_of_different_objects/input.json +26 -0
- data/test/test_suite/negative/21-list_of_different_objects/rules.json +17 -0
- data/test/test_suite/negative/22-not_empty_list/errors.json +7 -0
- data/test/test_suite/negative/22-not_empty_list/input.json +6 -0
- data/test/test_suite/negative/22-not_empty_list/rules.json +7 -0
- data/test/test_suite/negative/23-url/errors.json +10 -0
- data/test/test_suite/negative/23-url/input.json +12 -0
- data/test/test_suite/negative/23-url/rules.json +11 -0
- data/test/test_suite/negative/24-iso_date/errors.json +10 -0
- data/test/test_suite/negative/24-iso_date/input.json +12 -0
- data/test/test_suite/negative/24-iso_date/rules.json +11 -0
- data/test/test_suite/positive/01-required/input.json +7 -0
- data/test/test_suite/positive/01-required/output.json +6 -0
- data/test/test_suite/positive/01-required/rules.json +6 -0
- data/test/test_suite/positive/02-not_empty/input.json +6 -0
- data/test/test_suite/positive/02-not_empty/output.json +5 -0
- data/test/test_suite/positive/02-not_empty/rules.json +6 -0
- data/test/test_suite/positive/03-one_of/input.json +7 -0
- data/test/test_suite/positive/03-one_of/output.json +6 -0
- data/test/test_suite/positive/03-one_of/rules.json +6 -0
- data/test/test_suite/positive/04-min_length/input.json +7 -0
- data/test/test_suite/positive/04-min_length/output.json +6 -0
- data/test/test_suite/positive/04-min_length/rules.json +6 -0
- data/test/test_suite/positive/05-max_length/input.json +7 -0
- data/test/test_suite/positive/05-max_length/output.json +6 -0
- data/test/test_suite/positive/05-max_length/rules.json +6 -0
- data/test/test_suite/positive/06-length_equal/input.json +7 -0
- data/test/test_suite/positive/06-length_equal/output.json +6 -0
- data/test/test_suite/positive/06-length_equal/rules.json +6 -0
- data/test/test_suite/positive/07-length_between/input.json +7 -0
- data/test/test_suite/positive/07-length_between/output.json +6 -0
- data/test/test_suite/positive/07-length_between/rules.json +6 -0
- data/test/test_suite/positive/08-like/input.json +8 -0
- data/test/test_suite/positive/08-like/output.json +7 -0
- data/test/test_suite/positive/08-like/rules.json +7 -0
- data/test/test_suite/positive/09-integer/input.json +7 -0
- data/test/test_suite/positive/09-integer/output.json +6 -0
- data/test/test_suite/positive/09-integer/rules.json +6 -0
- data/test/test_suite/positive/10-positive_integer/input.json +7 -0
- data/test/test_suite/positive/10-positive_integer/output.json +6 -0
- data/test/test_suite/positive/10-positive_integer/rules.json +6 -0
- data/test/test_suite/positive/11-decimal/input.json +7 -0
- data/test/test_suite/positive/11-decimal/output.json +6 -0
- data/test/test_suite/positive/11-decimal/rules.json +6 -0
- data/test/test_suite/positive/12-positive_decimal/input.json +8 -0
- data/test/test_suite/positive/12-positive_decimal/output.json +7 -0
- data/test/test_suite/positive/12-positive_decimal/rules.json +7 -0
- data/test/test_suite/positive/13-max_number/input.json +7 -0
- data/test/test_suite/positive/13-max_number/output.json +6 -0
- data/test/test_suite/positive/13-max_number/rules.json +6 -0
- data/test/test_suite/positive/14-min_number/input.json +7 -0
- data/test/test_suite/positive/14-min_number/output.json +6 -0
- data/test/test_suite/positive/14-min_number/rules.json +6 -0
- data/test/test_suite/positive/15-number_between/input.json +7 -0
- data/test/test_suite/positive/15-number_between/output.json +6 -0
- data/test/test_suite/positive/15-number_between/rules.json +6 -0
- data/test/test_suite/positive/16-email/input.json +7 -0
- data/test/test_suite/positive/16-email/output.json +6 -0
- data/test/test_suite/positive/16-email/rules.json +6 -0
- data/test/test_suite/positive/17-equal_to_field/input.json +7 -0
- data/test/test_suite/positive/17-equal_to_field/output.json +6 -0
- data/test/test_suite/positive/17-equal_to_field/rules.json +6 -0
- data/test/test_suite/positive/18-nested_object/input.json +10 -0
- data/test/test_suite/positive/18-nested_object/output.json +8 -0
- data/test/test_suite/positive/18-nested_object/rules.json +8 -0
- data/test/test_suite/positive/19-list_of/input.json +6 -0
- data/test/test_suite/positive/19-list_of/output.json +6 -0
- data/test/test_suite/positive/19-list_of/rules.json +15 -0
- data/test/test_suite/positive/20-list_of_objects/input.json +16 -0
- data/test/test_suite/positive/20-list_of_objects/output.json +16 -0
- data/test/test_suite/positive/20-list_of_objects/rules.json +6 -0
- data/test/test_suite/positive/21-list_of_different_objects/input.json +21 -0
- data/test/test_suite/positive/21-list_of_different_objects/output.json +20 -0
- data/test/test_suite/positive/21-list_of_different_objects/rules.json +17 -0
- data/test/test_suite/positive/22-not_empty_list/input.json +6 -0
- data/test/test_suite/positive/22-not_empty_list/output.json +5 -0
- data/test/test_suite/positive/22-not_empty_list/rules.json +5 -0
- data/test/test_suite/positive/23-url/input.json +7 -0
- data/test/test_suite/positive/23-url/output.json +6 -0
- data/test/test_suite/positive/23-url/rules.json +6 -0
- data/test/test_suite/positive/24-iso_date/input.json +8 -0
- data/test/test_suite/positive/24-iso_date/output.json +7 -0
- data/test/test_suite/positive/24-iso_date/rules.json +7 -0
- data/test/test_suite/positive/30-trim/input.json +5 -0
- data/test/test_suite/positive/30-trim/output.json +5 -0
- data/test/test_suite/positive/30-trim/rules.json +5 -0
- data/test/test_suite/positive/31-to_lc/input.json +6 -0
- data/test/test_suite/positive/31-to_lc/output.json +6 -0
- data/test/test_suite/positive/31-to_lc/rules.json +6 -0
- data/test/test_suite/positive/32-to_uc/input.json +5 -0
- data/test/test_suite/positive/32-to_uc/output.json +5 -0
- data/test/test_suite/positive/32-to_uc/rules.json +5 -0
- data/test/test_suite/positive/33-remove/input.json +5 -0
- data/test/test_suite/positive/33-remove/output.json +5 -0
- data/test/test_suite/positive/33-remove/rules.json +7 -0
- data/test/test_suite/positive/34-leave_only/input.json +5 -0
- data/test/test_suite/positive/34-leave_only/output.json +5 -0
- data/test/test_suite/positive/34-leave_only/rules.json +7 -0
- metadata +476 -0
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class AutoTrimTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
@validator = LIVR.new({
|
6
|
+
'code' => 'required',
|
7
|
+
'password' => ['required', { 'min_length' => 3 }],
|
8
|
+
'address' => { 'nested_object' => {
|
9
|
+
'street' => { 'min_length' => 5 },
|
10
|
+
}}
|
11
|
+
}, 'is_auto_trim')
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_auto_trim_negative
|
15
|
+
output = @validator.validate({
|
16
|
+
'code' => ' ',
|
17
|
+
'password' => ' 12 ',
|
18
|
+
'address' => {
|
19
|
+
'street' => ' happ '
|
20
|
+
}
|
21
|
+
})
|
22
|
+
|
23
|
+
assert(!output, 'should return false due to validation errors fot trimmed values')
|
24
|
+
assert_equal(@validator.get_errors,
|
25
|
+
{
|
26
|
+
'code' =>'REQUIRED',
|
27
|
+
'password' => 'TOO_SHORT',
|
28
|
+
'address' => {
|
29
|
+
'street' => 'TOO_SHORT',
|
30
|
+
}
|
31
|
+
}, 'Should contain error codes'
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_auto_trim_positive
|
36
|
+
output = @validator.validate({
|
37
|
+
'code' => ' A ',
|
38
|
+
'password' => ' 123 ',
|
39
|
+
'address' => {
|
40
|
+
'street' => ' hello '
|
41
|
+
}
|
42
|
+
})
|
43
|
+
|
44
|
+
assert(!@validator.get_errors, 'Validator should contain no errors')
|
45
|
+
assert_equal(output,
|
46
|
+
{
|
47
|
+
'code' =>'A',
|
48
|
+
'password' => '123',
|
49
|
+
'address' => {
|
50
|
+
'street' => 'hello',
|
51
|
+
}
|
52
|
+
}, 'Should contain trimmed data'
|
53
|
+
)
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class RulesRegistrationTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
LIVR.register_default_rules({
|
6
|
+
'strong_password' => lambda do |args|
|
7
|
+
lambda do |value, unuse, unuse_|
|
8
|
+
return if value.nil? or value.eql?('')
|
9
|
+
return 'WEAK_PASSWORD' if value.to_s.length < 6
|
10
|
+
end
|
11
|
+
end
|
12
|
+
})
|
13
|
+
|
14
|
+
@validator = LIVR.new({
|
15
|
+
'code' => 'alphanumeric',
|
16
|
+
'password' => 'strong_password',
|
17
|
+
'address' => { 'nested_object' => {
|
18
|
+
'street' => 'alphanumeric',
|
19
|
+
'password' => 'strong_password'
|
20
|
+
}}
|
21
|
+
})
|
22
|
+
|
23
|
+
@validator.register_rules({
|
24
|
+
'alphanumeric' => lambda do |args|
|
25
|
+
lambda do |value, unuse, unuse_|
|
26
|
+
return if value.nil? or value.eql?('')
|
27
|
+
return 'NOT_ALPHANUMERIC' unless $value =~ /^[a-z0-9]+$/
|
28
|
+
end
|
29
|
+
end
|
30
|
+
})
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_rules_registration
|
34
|
+
default_rules = LIVR.get_default_rules
|
35
|
+
assert(default_rules['strong_password'].respond_to?(:call), 'Default rules should contain "strong_password" rule')
|
36
|
+
assert(!default_rules['alphanumeric'].respond_to?(:call), 'Default rules should not contain "alphanumeric" rule')
|
37
|
+
|
38
|
+
rules = @validator.get_rules
|
39
|
+
assert(rules['strong_password'].respond_to?(:call), 'Validator rules should contain "strong_password" rule')
|
40
|
+
assert(rules['alphanumeric'].respond_to?(:call), 'Validator rules should contain "alphanumeric" rule')
|
41
|
+
|
42
|
+
output = @validator.validate({
|
43
|
+
'code' => '!qwe',
|
44
|
+
'password' => 123,
|
45
|
+
'address' => {
|
46
|
+
'street' => 'Some Street!',
|
47
|
+
'password' => 'qwer'
|
48
|
+
}
|
49
|
+
})
|
50
|
+
|
51
|
+
assert(!output, 'should return false due to validation errors')
|
52
|
+
assert_equal(@validator.get_errors,
|
53
|
+
{
|
54
|
+
'code' =>'NOT_ALPHANUMERIC',
|
55
|
+
'password' => 'WEAK_PASSWORD',
|
56
|
+
'address' => {
|
57
|
+
'street' => 'NOT_ALPHANUMERIC',
|
58
|
+
'password' => 'WEAK_PASSWORD'
|
59
|
+
}
|
60
|
+
}, 'Should contain error codes'
|
61
|
+
)
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CustomFiltersTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
LIVR.register_default_rules({
|
6
|
+
'my_ucfirst' => lambda do |args|
|
7
|
+
lambda do |value, unuse, output|
|
8
|
+
return if value.nil? or value.eql?('')
|
9
|
+
output.push(value.capitalize!)
|
10
|
+
return nil
|
11
|
+
end
|
12
|
+
end,
|
13
|
+
'my_lc' => lambda do |args|
|
14
|
+
lambda do |value, unuse, output|
|
15
|
+
return if value.nil? or value.eql?('')
|
16
|
+
output.push(value.downcase)
|
17
|
+
return nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
})
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_custom_filters
|
24
|
+
validator = LIVR.new({
|
25
|
+
'word1' => ['my_lc', 'my_ucfirst'],
|
26
|
+
'word2' => ['my_lc'],
|
27
|
+
'word3' => ['my_ucfirst'],
|
28
|
+
})
|
29
|
+
|
30
|
+
output = validator.validate({
|
31
|
+
'word1' => 'wordOne',
|
32
|
+
'word2' => 'wordTwo',
|
33
|
+
'word3' => 'wordThree',
|
34
|
+
})
|
35
|
+
|
36
|
+
assert_equal(output,
|
37
|
+
{
|
38
|
+
'word1' => 'Wordone',
|
39
|
+
'word2' => 'wordtwo',
|
40
|
+
'word3' => 'Wordthree',
|
41
|
+
}, 'Should apply changes to values'
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
{
|
2
|
+
"age1": "adult_age",
|
3
|
+
"age2": ["adult_age"],
|
4
|
+
"age3": [ { "adult_age": [] } ],
|
5
|
+
"age4": { "adult_age": [] },
|
6
|
+
"age1_custom_error": "adult_age_with_custom_error",
|
7
|
+
"age2_custom_error": ["adult_age_with_custom_error"],
|
8
|
+
"age3_custom_error": [ { "adult_age_with_custom_error": [] } ],
|
9
|
+
"age4_custom_error": { "adult_age_with_custom_error": [] }
|
10
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"name": "address",
|
4
|
+
"rules": { "nested_object":{
|
5
|
+
"street": "required",
|
6
|
+
"zip": ["required", "positive_integer"],
|
7
|
+
"city": {"one_of": ["Kiev", "Kharkiv"] }
|
8
|
+
}}
|
9
|
+
},
|
10
|
+
|
11
|
+
{
|
12
|
+
"name": "address_with_custom_error",
|
13
|
+
"rules": { "nested_object":{
|
14
|
+
"street": "required",
|
15
|
+
"zip": ["required", "positive_integer"],
|
16
|
+
"city": {"one_of": ["Kiev", "Kharkiv"] }
|
17
|
+
}},
|
18
|
+
"error": "WRONG_ADDRESS"
|
19
|
+
}
|
20
|
+
]
|
@@ -0,0 +1,31 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"name": "adult_age",
|
4
|
+
"rules": ["positive_integer", {"min_number": 18}]
|
5
|
+
},
|
6
|
+
|
7
|
+
{
|
8
|
+
"name": "adult_age_with_custom_error",
|
9
|
+
"rules": ["positive_integer", {"min_number": 18}],
|
10
|
+
"error": "WRONG_AGE"
|
11
|
+
},
|
12
|
+
|
13
|
+
{
|
14
|
+
"name": "user",
|
15
|
+
"rules": { "nested_object":{
|
16
|
+
"name": "required",
|
17
|
+
"age1": "adult_age",
|
18
|
+
"age2": "adult_age_with_custom_error"
|
19
|
+
}}
|
20
|
+
},
|
21
|
+
|
22
|
+
{
|
23
|
+
"name": "user_with_custom_error",
|
24
|
+
"rules": { "nested_object":{
|
25
|
+
"name": "required",
|
26
|
+
"age1": "adult_age",
|
27
|
+
"age2": "adult_age_with_custom_error"
|
28
|
+
}},
|
29
|
+
"error": "WRONG_USER"
|
30
|
+
}
|
31
|
+
]
|
@@ -0,0 +1,10 @@
|
|
1
|
+
{
|
2
|
+
"age1": "adult_age",
|
3
|
+
"age2": ["adult_age"],
|
4
|
+
"age3": [ { "adult_age": [] } ],
|
5
|
+
"age4": { "adult_age": [] },
|
6
|
+
"age1_custom_error": "adult_age_with_custom_error",
|
7
|
+
"age2_custom_error": ["adult_age_with_custom_error"],
|
8
|
+
"age3_custom_error": [ { "adult_age_with_custom_error": [] } ],
|
9
|
+
"age4_custom_error": { "adult_age_with_custom_error": [] }
|
10
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"name": "address",
|
4
|
+
"rules": { "nested_object":{
|
5
|
+
"street": "required",
|
6
|
+
"zip": ["required", "positive_integer"],
|
7
|
+
"city": {"one_of": ["Kiev", "Kharkiv"] }
|
8
|
+
}}
|
9
|
+
},
|
10
|
+
|
11
|
+
{
|
12
|
+
"name": "address_with_custom_error",
|
13
|
+
"rules": { "nested_object":{
|
14
|
+
"street": "required",
|
15
|
+
"zip": ["required", "positive_integer"],
|
16
|
+
"city": {"one_of": ["Kiev", "Kharkiv"] }
|
17
|
+
}},
|
18
|
+
"error": "WRONG_ADDRESS"
|
19
|
+
}
|
20
|
+
]
|
@@ -0,0 +1,31 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"name": "adult_age",
|
4
|
+
"rules": ["positive_integer", {"min_number": 18}]
|
5
|
+
},
|
6
|
+
|
7
|
+
{
|
8
|
+
"name": "adult_age_with_custom_error",
|
9
|
+
"rules": ["positive_integer", {"min_number": 18}],
|
10
|
+
"error": "WRONG_AGE"
|
11
|
+
},
|
12
|
+
|
13
|
+
{
|
14
|
+
"name": "user",
|
15
|
+
"rules": { "nested_object":{
|
16
|
+
"name": "required",
|
17
|
+
"age1": "adult_age",
|
18
|
+
"age2": "adult_age_with_custom_error"
|
19
|
+
}}
|
20
|
+
},
|
21
|
+
|
22
|
+
{
|
23
|
+
"name": "user_with_custom_error",
|
24
|
+
"rules": { "nested_object":{
|
25
|
+
"name": "required",
|
26
|
+
"age1": "adult_age",
|
27
|
+
"age2": "adult_age_with_custom_error"
|
28
|
+
}},
|
29
|
+
"error": "WRONG_USER"
|
30
|
+
}
|
31
|
+
]
|