ruby-livr 2.0.0 → 2.1.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 (92) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/test.yml +23 -0
  3. data/.gitignore +1 -0
  4. data/Readme.md +2 -2
  5. data/lib/livr/aliased_rule.rb +11 -5
  6. data/lib/livr/rule.rb +13 -0
  7. data/lib/livr/rules/common.rb +1 -2
  8. data/lib/livr/rules/meta.rb +43 -12
  9. data/lib/livr/rules/modifiers.rb +10 -10
  10. data/lib/livr/rules/numeric.rb +5 -5
  11. data/lib/livr/rules/special.rb +14 -9
  12. data/lib/livr/validator.rb +7 -2
  13. data/lib/livr.rb +2 -0
  14. data/ruby-livr.gemspec +5 -4
  15. data/spec/01-test_suite_spec.rb +7 -2
  16. data/spec/02-aliases_spec.rb +30 -1
  17. data/spec/04-custom_filters_spec.rb +12 -1
  18. data/spec/06-primitive_values_spec.rb +133 -0
  19. data/spec/test_suite/aliases_negative/02-address/aliases.json +2 -2
  20. data/spec/test_suite/aliases_negative/02-address/input.json +2 -2
  21. data/spec/test_suite/aliases_positive/01-adult_age/input.json +1 -0
  22. data/spec/test_suite/aliases_positive/01-adult_age/output.json +1 -0
  23. data/spec/test_suite/aliases_positive/01-adult_age/rules.json +2 -0
  24. data/spec/test_suite/aliases_positive/02-address/aliases.json +2 -2
  25. data/spec/test_suite/aliases_positive/02-address/input.json +1 -1
  26. data/spec/test_suite/aliases_positive/02-address/output.json +1 -1
  27. data/spec/test_suite/negative/01-required/errors.json +4 -1
  28. data/spec/test_suite/negative/01-required/input.json +1 -0
  29. data/spec/test_suite/negative/01-required/rules.json +5 -1
  30. data/spec/test_suite/negative/03-one_of/errors.json +2 -0
  31. data/spec/test_suite/negative/03-one_of/input.json +2 -0
  32. data/spec/test_suite/negative/03-one_of/rules.json +9 -7
  33. data/spec/test_suite/negative/12-positive_decimal/errors.json +1 -0
  34. data/spec/test_suite/negative/12-positive_decimal/input.json +1 -0
  35. data/spec/test_suite/negative/12-positive_decimal/rules.json +1 -0
  36. data/spec/test_suite/negative/16-email/errors.json +22 -0
  37. data/spec/test_suite/negative/16-email/input.json +23 -0
  38. data/spec/test_suite/negative/16-email/rules.json +23 -0
  39. data/spec/test_suite/negative/17-equal_to_field/errors.json +4 -0
  40. data/spec/test_suite/negative/17-equal_to_field/input.json +5 -0
  41. data/spec/test_suite/negative/17-equal_to_field/rules.json +4 -0
  42. data/spec/test_suite/negative/18-nested_object/input.json +1 -1
  43. data/spec/test_suite/negative/21-list_of_different_objects/errors.json +6 -1
  44. data/spec/test_suite/negative/21-list_of_different_objects/input.json +23 -1
  45. data/spec/test_suite/negative/21-list_of_different_objects/rules.json +36 -1
  46. data/spec/test_suite/negative/23-url/errors.json +2 -0
  47. data/spec/test_suite/negative/23-url/input.json +2 -0
  48. data/spec/test_suite/negative/23-url/rules.json +2 -0
  49. data/spec/test_suite/negative/24-iso_date/errors.json +6 -0
  50. data/spec/test_suite/negative/24-iso_date/input.json +6 -0
  51. data/spec/test_suite/negative/24-iso_date/rules.json +6 -0
  52. data/spec/test_suite/negative/25-eq/rules.json +7 -7
  53. data/spec/test_suite/negative/28-variable_object/errors.json +9 -1
  54. data/spec/test_suite/negative/28-variable_object/input.json +9 -1
  55. data/spec/test_suite/negative/28-variable_object/rules.json +57 -1
  56. data/spec/test_suite/negative/29-or/errors.json +3 -0
  57. data/spec/test_suite/negative/29-or/input.json +1 -0
  58. data/spec/test_suite/negative/29-or/rules.json +3 -0
  59. data/spec/test_suite/positive/01-required/input.json +5 -1
  60. data/spec/test_suite/positive/01-required/output.json +4 -1
  61. data/spec/test_suite/positive/01-required/rules.json +4 -1
  62. data/spec/test_suite/positive/03-one_of/input.json +7 -3
  63. data/spec/test_suite/positive/03-one_of/output.json +7 -3
  64. data/spec/test_suite/positive/03-one_of/rules.json +8 -4
  65. data/spec/test_suite/positive/16-email/input.json +29 -0
  66. data/spec/test_suite/positive/16-email/output.json +28 -0
  67. data/spec/test_suite/positive/16-email/rules.json +28 -0
  68. data/spec/test_suite/positive/17-equal_to_field/input.json +3 -1
  69. data/spec/test_suite/positive/17-equal_to_field/output.json +2 -1
  70. data/spec/test_suite/positive/17-equal_to_field/rules.json +2 -1
  71. data/spec/test_suite/positive/18-nested_object/input.json +9 -1
  72. data/spec/test_suite/positive/18-nested_object/output.json +5 -0
  73. data/spec/test_suite/positive/18-nested_object/rules.json +10 -1
  74. data/spec/test_suite/positive/24-iso_date/input.json +2 -0
  75. data/spec/test_suite/positive/24-iso_date/output.json +2 -0
  76. data/spec/test_suite/positive/24-iso_date/rules.json +2 -0
  77. data/spec/test_suite/positive/25-eq/input.json +3 -3
  78. data/spec/test_suite/positive/25-eq/output.json +3 -3
  79. data/spec/test_suite/positive/25-eq/rules.json +4 -4
  80. data/spec/test_suite/positive/26-string/input.json +2 -2
  81. data/spec/test_suite/positive/26-string/output.json +2 -2
  82. data/spec/test_suite/positive/27-any_object/input.json +3 -2
  83. data/spec/test_suite/positive/27-any_object/output.json +3 -2
  84. data/spec/test_suite/positive/27-any_object/rules.json +2 -1
  85. data/spec/test_suite/positive/29-or/input.json +2 -0
  86. data/spec/test_suite/positive/29-or/output.json +2 -0
  87. data/spec/test_suite/positive/29-or/rules.json +3 -0
  88. data/spec/test_suite/positive/35-default/output.json +2 -1
  89. data/spec/test_suite/positive/35-default/rules.json +2 -1
  90. metadata +17 -14
  91. data/.travis.yml +0 -4
  92. data/Gemfile.lock +0 -45
@@ -1,13 +1,13 @@
1
1
  {
2
- "city1": { "eq": "Moscow" },
3
- "city2": [{ "eq": "Moscow" }],
4
- "city3": { "eq": "Kiev" },
2
+ "city1": { "eq": "Lviv" },
3
+ "city2": [{ "eq": "Lviv" }],
4
+ "city3": { "eq": "Kyiv" },
5
5
  "number1": { "eq": 1 },
6
6
  "number2": { "eq": 1 },
7
7
  "number3": { "eq": 1.2 },
8
8
  "empty_string": {"eq": 1 },
9
- "value_is_hash": { "eq": "Moscow" },
10
- "value_is_empty_hash": { "eq": "Moscow" },
11
- "value_is_array": { "eq": "Moscow" },
12
- "value_is_empty_array": { "eq": "Moscow" }
9
+ "value_is_hash": { "eq": "Lviv" },
10
+ "value_is_empty_hash": { "eq": "Lviv" },
11
+ "value_is_array": { "eq": "Lviv" },
12
+ "value_is_empty_array": { "eq": "Lviv" }
13
13
  }
@@ -11,5 +11,13 @@
11
11
  "name": "TOO_LONG"
12
12
  },
13
13
  "product4": "FORMAT_ERROR",
14
- "product5": "FORMAT_ERROR"
14
+ "product5": "FORMAT_ERROR",
15
+ "product_without_selector": "FORMAT_ERROR",
16
+ "product_is_array": "FORMAT_ERROR",
17
+ "selector_is_array": "FORMAT_ERROR",
18
+ "selector_is_object": "FORMAT_ERROR",
19
+ "selector_is_constructor": "FORMAT_ERROR",
20
+ "selector_is_to_string": "FORMAT_ERROR",
21
+ "selector_is_has_own_property": "FORMAT_ERROR",
22
+ "selector_is_proto": "FORMAT_ERROR"
15
23
  }
@@ -20,5 +20,13 @@
20
20
  "name": "Wrongtype"
21
21
  },
22
22
  "product5": "Some Wrong Data",
23
- "users": "not an array"
23
+ "users": "not an array",
24
+ "product_without_selector": {"name": "No product type"},
25
+ "product_is_array": [{"product_type": "service", "name": "Service"}],
26
+ "selector_is_array": {"product_type": ["material"], "material_id": 1},
27
+ "selector_is_object": {"product_type": {"material": 1}, "material_id": 1},
28
+ "selector_is_constructor": {"product_type": "constructor"},
29
+ "selector_is_to_string": {"product_type": "toString"},
30
+ "selector_is_has_own_property": {"product_type": "hasOwnProperty"},
31
+ "selector_is_proto": {"product_type": "__proto__"}
24
32
  }
@@ -73,5 +73,61 @@
73
73
  "name": ["required", {"max_length": 10} ]
74
74
  }
75
75
  }
76
- ]}]
76
+ ]}],
77
+
78
+ "product_without_selector": { "variable_object": [
79
+ "product_type", {
80
+ "material": { "product_type": "required", "material_id": "positive_integer" },
81
+ "service": { "product_type": "required", "name": "required" }
82
+ }
83
+ ]},
84
+
85
+ "product_is_array": { "variable_object": [
86
+ "product_type", {
87
+ "material": { "product_type": "required", "material_id": "positive_integer" },
88
+ "service": { "product_type": "required", "name": "required" }
89
+ }
90
+ ]},
91
+
92
+ "selector_is_array": { "variable_object": [
93
+ "product_type", {
94
+ "material": { "product_type": "required", "material_id": "positive_integer" },
95
+ "service": { "product_type": "required", "name": "required" }
96
+ }
97
+ ]},
98
+
99
+ "selector_is_object": { "variable_object": [
100
+ "product_type", {
101
+ "material": { "product_type": "required", "material_id": "positive_integer" },
102
+ "service": { "product_type": "required", "name": "required" }
103
+ }
104
+ ]},
105
+
106
+ "selector_is_constructor": { "variable_object": [
107
+ "product_type", {
108
+ "material": { "product_type": "required", "material_id": "positive_integer" },
109
+ "service": { "product_type": "required", "name": "required" }
110
+ }
111
+ ]},
112
+
113
+ "selector_is_to_string": { "variable_object": [
114
+ "product_type", {
115
+ "material": { "product_type": "required", "material_id": "positive_integer" },
116
+ "service": { "product_type": "required", "name": "required" }
117
+ }
118
+ ]},
119
+
120
+ "selector_is_has_own_property": { "variable_object": [
121
+ "product_type", {
122
+ "material": { "product_type": "required", "material_id": "positive_integer" },
123
+ "service": { "product_type": "required", "name": "required" }
124
+ }
125
+ ]},
126
+
127
+ "selector_is_proto": { "variable_object": [
128
+ "product_type", {
129
+ "material": { "product_type": "required", "material_id": "positive_integer" },
130
+ "service": { "product_type": "required", "name": "required" }
131
+ }
132
+ ]}
77
133
  }
@@ -2,6 +2,9 @@
2
2
  "id1-1": "NOT_POSITIVE_INTEGER",
3
3
  "id2-1": "NOT_POSITIVE_INTEGER",
4
4
  "id3-1": "WRONG_EMAIL",
5
+ "id4-1": "CANNOT_BE_EMPTY",
6
+ "id4-2": "REQUIRED",
7
+
5
8
  "products": [
6
9
  {
7
10
  "name": "REQUIRED",
@@ -2,6 +2,7 @@
2
2
  "id1-1": "Usermail.com",
3
3
  "id2-1": "Usermail.com",
4
4
  "id3-1": "Usermail.com",
5
+ "id4-1": "",
5
6
 
6
7
  "products": [
7
8
  {
@@ -2,6 +2,9 @@
2
2
  "id1-1": { "or": ["email", "positive_integer" ] },
3
3
  "id2-1": [{ "or": ["email", "positive_integer" ] }, "to_lc"],
4
4
  "id3-1": { "or": [{"min_length": 15}, ["email", "to_lc"] ] },
5
+ "id4-1": { "or": [["required", "positive_integer"], ["not_empty", "email"] ] },
6
+ "id4-2": { "or": [["required", "positive_integer"], ["required", "email"] ] },
7
+
5
8
 
6
9
  "products": {"list_of": { "or": [
7
10
  {"nested_object": {
@@ -3,5 +3,9 @@
3
3
  "last_name": "Pupkin",
4
4
  "middle_name": "Some",
5
5
  "age": "25",
6
- "salary": 0
6
+ "__proto__": { "polluted": "yes" },
7
+ "salary": 0,
8
+ "constructor": "Constructor value",
9
+ "toString": "ToString value",
10
+ "hasOwnProperty": "HasOwnProperty value"
7
11
  }
@@ -2,5 +2,8 @@
2
2
  "first_name": "Vasya",
3
3
  "last_name": "Pupkin",
4
4
  "middle_name": "Some",
5
- "salary": 0
5
+ "salary": 0,
6
+ "constructor": "Constructor value",
7
+ "toString": "ToString value",
8
+ "hasOwnProperty": "HasOwnProperty value"
6
9
  }
@@ -2,5 +2,8 @@
2
2
  "first_name": "required",
3
3
  "last_name": ["required"],
4
4
  "middle_name": [ { "required": [] } ],
5
- "salary": { "required": [] }
5
+ "salary": { "required": [] },
6
+ "constructor": "required",
7
+ "toString": "required",
8
+ "hasOwnProperty": "required"
6
9
  }
@@ -1,10 +1,14 @@
1
1
  {
2
- "city1": "Moscow",
3
- "city2": "Kiev",
4
- "city3": "Kiev",
2
+ "city1": "Lviv",
3
+ "city2": "Kyiv",
4
+ "city3": "Kyiv",
5
+ "city4": "Kharkiv",
5
6
  "number1": 2,
6
7
  "number2": 2,
7
8
  "number3": 1.2,
9
+ "number4": 1,
10
+ "number5": "1",
11
+ "number6": "39",
8
12
  "boolean": true,
9
13
  "empty_city": "",
10
14
  "extra_city": "New York"
@@ -1,10 +1,14 @@
1
1
  {
2
- "city1": "Moscow",
3
- "city2": "Kiev",
4
- "city3": "Kiev",
2
+ "city1": "Lviv",
3
+ "city2": "Kyiv",
4
+ "city3": "Kyiv",
5
+ "city4": "Kharkiv",
5
6
  "number1": 2,
6
7
  "number2": "2",
7
8
  "number3": 1.2,
9
+ "number4": "1",
10
+ "number5": 1,
11
+ "number6": 39,
8
12
  "boolean": true,
9
13
  "empty_city": ""
10
14
  }
@@ -1,10 +1,14 @@
1
1
  {
2
- "city1": { "one_of": [["Moscow", "Kiev" ]] },
3
- "city2": [{ "one_of": [["Moscow", "Kiev" ]] }],
4
- "city3": { "one_of": ["Moscow", "Kiev"] },
2
+ "city1": { "one_of": [["Lviv", "Kyiv" ]] },
3
+ "city2": [{ "one_of": [["Lviv", "Kyiv" ]] }],
4
+ "city3": { "one_of": ["Lviv", "Kyiv"] },
5
+ "city4": { "one_of": ["Kyiv", "Lviv", "Odesa", "Kharkiv"] },
5
6
  "number1": { "one_of": [1, 2] },
6
7
  "number2": { "one_of": ["1", "2"] },
7
8
  "number3": { "one_of": 1.2 },
9
+ "number4": { "one_of": ["1", 1, "b"] },
10
+ "number5": { "one_of": [1, "1"] },
11
+ "number6": { "one_of": [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]] },
8
12
  "boolean": { "one_of": [true, false] },
9
- "empty_city": { "one_of": [["Moscow", "Kiev" ]] }
13
+ "empty_city": { "one_of": [["Lviv", "Kyiv" ]] }
10
14
  }
@@ -2,6 +2,35 @@
2
2
  "email1": "test@mail.com",
3
3
  "email2": "test.test@mail.com.ua",
4
4
  "email3": "test+test.t_e_s_t@mail.in.ua",
5
+ "email4": "user@hotline.finance",
6
+ "email5": "enny@enny.devoffice.com",
7
+ "email6": "enny.tester@gmail.com",
8
+ "email7": "enny#tester@mail.ru",
9
+ "email8": "enny!enny@templatemonster.me",
10
+ "email9": "enny@enny.devoffice.com",
11
+ "email10": "enny$@enny.devoffice.com",
12
+ "email11": "enny%tester@enny.devoffice.com",
13
+ "email12": "enny&te@enny.devoffice.com",
14
+ "email13": "enn*y@mail.ru",
15
+ "email14": "en+ny@yahoo.com",
16
+ "email15": "ennyqwerty@gmail.com",
17
+ "email16": "ennyqwerty@yandex.com",
18
+ "email17": "ennyqwerty@hotmail.com",
19
+ "email18": "enny@templatemonster.me",
20
+ "email19": "enny-newcheckout@templatemonster.me",
21
+ "email20": "enny/tester@enny.devoffice.com",
22
+ "email21": "en=ny@enny.devoffice.com",
23
+ "email22": "tes?ter@enny.devoffice.com",
24
+ "email23": "enny^enny@enny.devoffice.com",
25
+ "email24": "enny_sk@enny.devoffice.com",
26
+ "email25": "enn`y@enny.devoffice.com",
27
+ "email26": "enny|sk@enny.devoffice.com",
28
+ "email27": "er@enny.devoffice.com",
29
+ "email28": "dd@hj.ff",
30
+ "email29": "t@devoffice.com",
31
+ "email30": "ennytesttesttesttesttesttesttesttesttesttesttesttesttesttesttest@te1.com",
32
+ "email31": "er@enny.devoffice.com",
33
+
5
34
  "empty_field": "",
6
35
  "extra_field": "aaaa"
7
36
  }
@@ -2,5 +2,33 @@
2
2
  "email1": "test@mail.com",
3
3
  "email2": "test.test@mail.com.ua",
4
4
  "email3": "test+test.t_e_s_t@mail.in.ua",
5
+ "email4": "user@hotline.finance",
6
+ "email5": "enny@enny.devoffice.com",
7
+ "email6": "enny.tester@gmail.com",
8
+ "email7": "enny#tester@mail.ru",
9
+ "email8": "enny!enny@templatemonster.me",
10
+ "email9": "enny@enny.devoffice.com",
11
+ "email10": "enny$@enny.devoffice.com",
12
+ "email11": "enny%tester@enny.devoffice.com",
13
+ "email12": "enny&te@enny.devoffice.com",
14
+ "email13": "enn*y@mail.ru",
15
+ "email14": "en+ny@yahoo.com",
16
+ "email15": "ennyqwerty@gmail.com",
17
+ "email16": "ennyqwerty@yandex.com",
18
+ "email17": "ennyqwerty@hotmail.com",
19
+ "email18": "enny@templatemonster.me",
20
+ "email19": "enny-newcheckout@templatemonster.me",
21
+ "email20": "enny/tester@enny.devoffice.com",
22
+ "email21": "en=ny@enny.devoffice.com",
23
+ "email22": "tes?ter@enny.devoffice.com",
24
+ "email23": "enny^enny@enny.devoffice.com",
25
+ "email24": "enny_sk@enny.devoffice.com",
26
+ "email25": "enn`y@enny.devoffice.com",
27
+ "email26": "enny|sk@enny.devoffice.com",
28
+ "email27": "er@enny.devoffice.com",
29
+ "email28": "dd@hj.ff",
30
+ "email29": "t@devoffice.com",
31
+ "email30": "ennytesttesttesttesttesttesttesttesttesttesttesttesttesttesttest@te1.com",
32
+ "email31": "er@enny.devoffice.com",
5
33
  "empty_field": ""
6
34
  }
@@ -2,5 +2,33 @@
2
2
  "email1": "email",
3
3
  "email2": { "email": [] },
4
4
  "email3": [ { "email": [] } ],
5
+ "email4": "email",
6
+ "email5": "email",
7
+ "email6": "email",
8
+ "email7": "email",
9
+ "email8": "email",
10
+ "email9": "email",
11
+ "email10": "email",
12
+ "email11": "email",
13
+ "email12": "email",
14
+ "email13": "email",
15
+ "email14": "email",
16
+ "email15": "email",
17
+ "email16": "email",
18
+ "email17": "email",
19
+ "email18": "email",
20
+ "email19": "email",
21
+ "email20": "email",
22
+ "email21": "email",
23
+ "email22": "email",
24
+ "email23": "email",
25
+ "email24": "email",
26
+ "email25": "email",
27
+ "email26": "email",
28
+ "email27": "email",
29
+ "email28": "email",
30
+ "email29": "email",
31
+ "email30": "email",
32
+ "email31": "email",
5
33
  "empty_field": "email"
6
34
  }
@@ -3,5 +3,7 @@
3
3
  "field2": "some value",
4
4
  "field3": "some value",
5
5
  "empty_field": "",
6
- "extra_field": "some value"
6
+ "extra_field": "some value",
7
+ "number_as_string": "10",
8
+ "number_as_number": 10
7
9
  }
@@ -2,5 +2,6 @@
2
2
  "field1": "some value",
3
3
  "field2": "some value",
4
4
  "field3": "some value",
5
- "empty_field": ""
5
+ "empty_field": "",
6
+ "number_as_string": "10"
6
7
  }
@@ -2,5 +2,6 @@
2
2
  "field1": { "equal_to_field": "field2" },
3
3
  "field2": { "equal_to_field": ["field1"] },
4
4
  "field3": { "equal_to_field": ["field1"] },
5
- "empty_field": { "equal_to_field": "field2" }
5
+ "empty_field": { "equal_to_field": "field2" },
6
+ "number_as_string": { "equal_to_field": "number_as_number" }
6
7
  }
@@ -7,9 +7,17 @@
7
7
  "extra_field": "will be removed"
8
8
  },
9
9
 
10
+ "should_not_be_errored": "",
11
+
10
12
  "should_be_empty": {
11
13
  "extra_field": "will be removed"
12
14
  },
13
15
 
14
- "extra_field": "will be removed"
16
+ "extra_field": "will be removed",
17
+
18
+ "builtin_names": {
19
+ "constructor": "Constructor value",
20
+ "toString": "ToString value",
21
+ "hasOwnProperty": "will be removed"
22
+ }
15
23
  }
@@ -6,7 +6,12 @@
6
6
  "building": 10
7
7
  },
8
8
 
9
+ "should_not_be_errored": "",
9
10
  "should_be_empty": {
10
11
 
12
+ },
13
+ "builtin_names": {
14
+ "constructor": "Constructor value",
15
+ "toString": "ToString value"
11
16
  }
12
17
  }
@@ -6,8 +6,17 @@
6
6
  "building": ["required", "positive_integer" ]
7
7
  } } ],
8
8
 
9
+ "should_not_be_errored": { "nested_object": {
10
+ "zip": "positive_integer"
11
+ }},
12
+
9
13
  "should_be_empty": [ "required", { "nested_object": {
10
14
  "country": [{ "one_of": [["Ukraine", "USA"]] } ],
11
15
  "zip": "positive_integer"
12
- } } ]
16
+ } } ],
17
+
18
+ "builtin_names": { "nested_object": {
19
+ "constructor": "required",
20
+ "toString": "required"
21
+ }}
13
22
  }
@@ -4,6 +4,8 @@
4
4
  "iso_date3": "1930-01-01",
5
5
  "iso_date4": "1970-01-01",
6
6
  "iso_date5": "2015-10-10",
7
+ "iso_date6": "2024-02-29",
8
+ "iso_date7": "2000-02-29",
7
9
  "empty_field": "",
8
10
  "extra_field": "aaaa"
9
11
  }
@@ -4,5 +4,7 @@
4
4
  "iso_date3": "1930-01-01",
5
5
  "iso_date4": "1970-01-01",
6
6
  "iso_date5": "2015-10-10",
7
+ "iso_date6": "2024-02-29",
8
+ "iso_date7": "2000-02-29",
7
9
  "empty_field": ""
8
10
  }
@@ -4,5 +4,7 @@
4
4
  "iso_date3": [ { "iso_date": [] } ],
5
5
  "iso_date4": [ { "iso_date": [] } ],
6
6
  "iso_date5": "iso_date",
7
+ "iso_date6": "iso_date",
8
+ "iso_date7": "iso_date",
7
9
  "empty_field": "iso_date"
8
10
  }
@@ -1,7 +1,7 @@
1
1
  {
2
- "city1": "Moscow",
3
- "city2": "Kiev",
4
- "city3": "Kiev",
2
+ "city1": "Lviv",
3
+ "city2": "Kyiv",
4
+ "city3": "Kyiv",
5
5
  "city4": "Dnipro",
6
6
  "number1": "2",
7
7
  "number2": 2,
@@ -1,7 +1,7 @@
1
1
  {
2
- "city1": "Moscow",
3
- "city2": "Kiev",
4
- "city3": "Kiev",
2
+ "city1": "Lviv",
3
+ "city2": "Kyiv",
4
+ "city3": "Kyiv",
5
5
  "city4": "Dnipro",
6
6
  "number1": 2,
7
7
  "number2": "2",
@@ -1,9 +1,9 @@
1
1
  {
2
- "city1": { "eq": "Moscow" },
3
- "city2": [{ "eq": "Kiev" }],
4
- "city3": { "eq": "Kiev" },
2
+ "city1": { "eq": "Lviv" },
3
+ "city2": [{ "eq": "Kyiv" }],
4
+ "city3": { "eq": "Kyiv" },
5
5
  "city4": [{ "eq": ["Dnipro"] }],
6
6
  "number1": { "eq": 2 },
7
7
  "number2": { "eq": "2" },
8
- "empty_city": { "eq": "Kiev" }
8
+ "empty_city": { "eq": "Kyiv" }
9
9
  }
@@ -1,6 +1,6 @@
1
1
  {
2
- "city1": "Moscow",
3
- "city2": "Kiev",
2
+ "city1": "Lviv",
3
+ "city2": "Kyiv",
4
4
  "number1": "2",
5
5
  "number2": 2,
6
6
  "empty_city": "",
@@ -1,6 +1,6 @@
1
1
  {
2
- "city1": "Moscow",
3
- "city2": "Kiev",
2
+ "city1": "Lviv",
3
+ "city2": "Kyiv",
4
4
  "number1": "2",
5
5
  "number2": "2",
6
6
  "empty_city": ""
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "object1": {"email": "user@mail.com"},
3
- "object2": {"id": 123, "address": {"city" : "Kiev"}},
3
+ "object2": {"id": 123, "address": {"city" : "Kyiv"}},
4
4
  "object3": {},
5
- "empty_field": ""
5
+ "empty_field": "",
6
+ "object4": {"constructor": "Constructor value"}
6
7
  }
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "object1": {"email": "user@mail.com"},
3
- "object2": {"id": 123, "address": {"city" : "Kiev"}},
3
+ "object2": {"id": 123, "address": {"city" : "Kyiv"}},
4
4
  "object3": {},
5
- "empty_field": ""
5
+ "empty_field": "",
6
+ "object4": {"constructor": "Constructor value"}
6
7
  }
@@ -3,5 +3,6 @@
3
3
  "object2": [{ "any_object": [] }],
4
4
  "object3": "any_object",
5
5
  "empty_field": "any_object",
6
- "missed_field": "any_object"
6
+ "missed_field": "any_object",
7
+ "object4": "any_object"
7
8
  }
@@ -8,6 +8,8 @@
8
8
  "id3-1": "User@mail.com",
9
9
  "id3-2": "UserUserUser@mail.com",
10
10
 
11
+ "id4-1": "",
12
+
11
13
  "products": [
12
14
  {
13
15
  "product_type": "material",
@@ -8,6 +8,8 @@
8
8
  "id3-1": "user@mail.com",
9
9
  "id3-2": "UserUserUser@mail.com",
10
10
 
11
+ "id4-1": "",
12
+
11
13
  "products": [
12
14
  {
13
15
  "product_type": "material",
@@ -8,6 +8,9 @@
8
8
  "id3-1": { "or": [{"min_length": 15}, ["email", "to_lc"] ] },
9
9
  "id3-2": { "or": [{"min_length": 15}, ["email", "to_lc"] ] },
10
10
 
11
+ "id4-1": { "or": ["email", "positive_integer" ] },
12
+ "id4-2": { "or": ["email", "positive_integer" ] },
13
+
11
14
  "products": {"list_of": { "or": [
12
15
  {"nested_object": {
13
16
  "product_type": ["required", {"eq": "material"}],
@@ -8,5 +8,6 @@
8
8
 
9
9
  "string_value": "Value",
10
10
  "object": {"name": "Value"},
11
- "list_of_string_values": ["value1", {"key": "123"}, "value2"]
11
+ "list_of_string_values": ["value1", {"key": "123"}, "value2"],
12
+ "constructor": "16"
12
13
  }
@@ -8,5 +8,6 @@
8
8
 
9
9
  "string_value": {"default": 10},
10
10
  "object": {"default": 10},
11
- "list_of_string_values": {"default": 10}
11
+ "list_of_string_values": {"default": 10},
12
+ "constructor": {"default": "16"}
12
13
  }