Skip to content

Commit e74fdd7

Browse files
committed
feat: Add support for Draft 6 in NumberConstraint
1 parent fbbe7e5 commit e74fdd7

File tree

2 files changed

+43
-9
lines changed

2 files changed

+43
-9
lines changed

src/JsonSchema/Constraints/NumberConstraint.php

+14-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ class NumberConstraint extends Constraint
2525
public function check(&$element, $schema = null, JsonPointer $path = null, $i = null)
2626
{
2727
// Verify minimum
28-
if (isset($schema->exclusiveMinimum)) {
28+
if (isset($schema->exclusiveMinimum) && filter_var($schema->exclusiveMinimum, FILTER_VALIDATE_BOOLEAN)) {
29+
// Draft 4 schema
2930
if (isset($schema->minimum)) {
3031
if ($schema->exclusiveMinimum && $element <= $schema->minimum) {
3132
$this->addError($path, 'Must have a minimum value of ' . $schema->minimum, 'exclusiveMinimum', array('minimum' => $schema->minimum));
@@ -35,12 +36,18 @@ public function check(&$element, $schema = null, JsonPointer $path = null, $i =
3536
} else {
3637
$this->addError($path, 'Use of exclusiveMinimum requires presence of minimum', 'missingMinimum');
3738
}
39+
} elseif (isset($schema->exclusiveMinimum) && filter_var($schema->exclusiveMinimum, FILTER_VALIDATE_INT)) {
40+
// Draft 6 schema
41+
if ($element <= $schema->exclusiveMinimum) {
42+
$this->addError($path, 'Must have an exclusiveMinimum value of ' . $schema->exclusiveMinimum, 'exclusiveMinimum', array('exclusiveMinimum' => $schema->exclusiveMinimum));
43+
}
3844
} elseif (isset($schema->minimum) && $element < $schema->minimum) {
3945
$this->addError($path, 'Must have a minimum value of ' . $schema->minimum, 'minimum', array('minimum' => $schema->minimum));
4046
}
4147

4248
// Verify maximum
43-
if (isset($schema->exclusiveMaximum)) {
49+
if (isset($schema->exclusiveMaximum) && filter_var($schema->exclusiveMaximum, FILTER_VALIDATE_BOOLEAN)) {
50+
// Draft 4 schema
4451
if (isset($schema->maximum)) {
4552
if ($schema->exclusiveMaximum && $element >= $schema->maximum) {
4653
$this->addError($path, 'Must have a maximum value of ' . $schema->maximum, 'exclusiveMaximum', array('maximum' => $schema->maximum));
@@ -50,6 +57,11 @@ public function check(&$element, $schema = null, JsonPointer $path = null, $i =
5057
} else {
5158
$this->addError($path, 'Use of exclusiveMaximum requires presence of maximum', 'missingMaximum');
5259
}
60+
} elseif (isset($schema->exclusiveMaximum) && filter_var($schema->exclusiveMaximum, FILTER_VALIDATE_INT)) {
61+
// Draft 6 schema
62+
if ($element >= $schema->exclusiveMaximum) {
63+
$this->addError($path, 'Must have an exclusiveMaximum value of ' . $schema->exclusiveMaximum, 'exclusiveMaximum', array('exclusiveMaximum' => $schema->exclusiveMaximum));
64+
}
5365
} elseif (isset($schema->maximum) && $element > $schema->maximum) {
5466
$this->addError($path, 'Must have a maximum value of ' . $schema->maximum, 'maximum', array('maximum' => $schema->maximum));
5567
}

tests/Constraints/MinimumMaximumTest.php

+29-7
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,25 @@ public function getInvalidTests()
2828
}'
2929
),
3030
array(
31-
'{"value": 3}',
3231
'{
33-
"type": "object",
34-
"properties": {
35-
"value": {"type": "integer", "minimum": 3, "exclusiveMinimum": true}
36-
}
32+
"value":16
33+
}',
34+
'{
35+
"type":"object",
36+
"properties":{
37+
"value":{"type":"integer","maximum":8}
38+
}
39+
}'
40+
),
41+
array(
42+
'{
43+
"value":2
44+
}',
45+
'{
46+
"type":"object",
47+
"properties":{
48+
"value":{"type":"integer","exclusiveMinimum":2}
49+
}
3750
}'
3851
),
3952
array(
@@ -43,10 +56,19 @@ public function getInvalidTests()
4356
'{
4457
"type":"object",
4558
"properties":{
46-
"value":{"type":"integer","maximum":8}
59+
"value":{"type":"integer","exclusiveMaximum":16}
4760
}
4861
}'
4962
),
63+
array(
64+
'{"value": 3}',
65+
'{
66+
"type": "object",
67+
"properties": {
68+
"value": {"type": "integer", "minimum": 3, "exclusiveMinimum": true}
69+
}
70+
}'
71+
),
5072
array(
5173
'{"value": 8}',
5274
'{
@@ -106,7 +128,7 @@ public function getInvalidTests()
106128
"value": {"type": "number", "maximum": 0, "exclusiveMaximum": true}
107129
}
108130
}'
109-
)
131+
),
110132
);
111133
}
112134

0 commit comments

Comments
 (0)