ex
Fork of mbed-os-example-mbed5-blinky by
dumi_doc-master/schema/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php@44:c1d8923072ba, 2017-07-18 (annotated)
- Committer:
- TMBOY
- Date:
- Tue Jul 18 16:27:22 2017 +0800
- Revision:
- 44:c1d8923072ba
?
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| TMBOY | 44:c1d8923072ba | 1 | <?php |
| TMBOY | 44:c1d8923072ba | 2 | |
| TMBOY | 44:c1d8923072ba | 3 | /* |
| TMBOY | 44:c1d8923072ba | 4 | * This file is part of the JsonSchema package. |
| TMBOY | 44:c1d8923072ba | 5 | * |
| TMBOY | 44:c1d8923072ba | 6 | * For the full copyright and license information, please view the LICENSE |
| TMBOY | 44:c1d8923072ba | 7 | * file that was distributed with this source code. |
| TMBOY | 44:c1d8923072ba | 8 | */ |
| TMBOY | 44:c1d8923072ba | 9 | |
| TMBOY | 44:c1d8923072ba | 10 | namespace JsonSchema\Constraints; |
| TMBOY | 44:c1d8923072ba | 11 | |
| TMBOY | 44:c1d8923072ba | 12 | use JsonSchema\Entity\JsonPointer; |
| TMBOY | 44:c1d8923072ba | 13 | |
| TMBOY | 44:c1d8923072ba | 14 | /** |
| TMBOY | 44:c1d8923072ba | 15 | * The NumberConstraint Constraints, validates an number against a given schema |
| TMBOY | 44:c1d8923072ba | 16 | * |
| TMBOY | 44:c1d8923072ba | 17 | * @author Robert Schönthal <seroscho@googlemail.com> |
| TMBOY | 44:c1d8923072ba | 18 | * @author Bruno Prieto Reis <bruno.p.reis@gmail.com> |
| TMBOY | 44:c1d8923072ba | 19 | */ |
| TMBOY | 44:c1d8923072ba | 20 | class NumberConstraint extends Constraint |
| TMBOY | 44:c1d8923072ba | 21 | { |
| TMBOY | 44:c1d8923072ba | 22 | /** |
| TMBOY | 44:c1d8923072ba | 23 | * {@inheritDoc} |
| TMBOY | 44:c1d8923072ba | 24 | */ |
| TMBOY | 44:c1d8923072ba | 25 | public function check($element, $schema = null, JsonPointer $path = null, $i = null) |
| TMBOY | 44:c1d8923072ba | 26 | { |
| TMBOY | 44:c1d8923072ba | 27 | // Verify minimum |
| TMBOY | 44:c1d8923072ba | 28 | if (isset($schema->exclusiveMinimum)) { |
| TMBOY | 44:c1d8923072ba | 29 | if (isset($schema->minimum)) { |
| TMBOY | 44:c1d8923072ba | 30 | if ($schema->exclusiveMinimum && $element <= $schema->minimum) { |
| TMBOY | 44:c1d8923072ba | 31 | $this->addError($path, "Must have a minimum value of " . $schema->minimum, 'exclusiveMinimum', array('minimum' => $schema->minimum,)); |
| TMBOY | 44:c1d8923072ba | 32 | } elseif ($element < $schema->minimum) { |
| TMBOY | 44:c1d8923072ba | 33 | $this->addError($path, "Must have a minimum value of " . $schema->minimum, 'minimum', array('minimum' => $schema->minimum,)); |
| TMBOY | 44:c1d8923072ba | 34 | } |
| TMBOY | 44:c1d8923072ba | 35 | } else { |
| TMBOY | 44:c1d8923072ba | 36 | $this->addError($path, "Use of exclusiveMinimum requires presence of minimum", 'missingMinimum'); |
| TMBOY | 44:c1d8923072ba | 37 | } |
| TMBOY | 44:c1d8923072ba | 38 | } elseif (isset($schema->minimum) && $element < $schema->minimum) { |
| TMBOY | 44:c1d8923072ba | 39 | $this->addError($path, "Must have a minimum value of " . $schema->minimum, 'minimum', array('minimum' => $schema->minimum,)); |
| TMBOY | 44:c1d8923072ba | 40 | } |
| TMBOY | 44:c1d8923072ba | 41 | |
| TMBOY | 44:c1d8923072ba | 42 | // Verify maximum |
| TMBOY | 44:c1d8923072ba | 43 | if (isset($schema->exclusiveMaximum)) { |
| TMBOY | 44:c1d8923072ba | 44 | if (isset($schema->maximum)) { |
| TMBOY | 44:c1d8923072ba | 45 | if ($schema->exclusiveMaximum && $element >= $schema->maximum) { |
| TMBOY | 44:c1d8923072ba | 46 | $this->addError($path, "Must have a maximum value of " . $schema->maximum, 'exclusiveMaximum', array('maximum' => $schema->maximum,)); |
| TMBOY | 44:c1d8923072ba | 47 | } elseif ($element > $schema->maximum) { |
| TMBOY | 44:c1d8923072ba | 48 | $this->addError($path, "Must have a maximum value of " . $schema->maximum, 'maximum', array('maximum' => $schema->maximum,)); |
| TMBOY | 44:c1d8923072ba | 49 | } |
| TMBOY | 44:c1d8923072ba | 50 | } else { |
| TMBOY | 44:c1d8923072ba | 51 | $this->addError($path, "Use of exclusiveMaximum requires presence of maximum", 'missingMaximum'); |
| TMBOY | 44:c1d8923072ba | 52 | } |
| TMBOY | 44:c1d8923072ba | 53 | } elseif (isset($schema->maximum) && $element > $schema->maximum) { |
| TMBOY | 44:c1d8923072ba | 54 | $this->addError($path, "Must have a maximum value of " . $schema->maximum, 'maximum', array('maximum' => $schema->maximum,)); |
| TMBOY | 44:c1d8923072ba | 55 | } |
| TMBOY | 44:c1d8923072ba | 56 | |
| TMBOY | 44:c1d8923072ba | 57 | // Verify divisibleBy - Draft v3 |
| TMBOY | 44:c1d8923072ba | 58 | if (isset($schema->divisibleBy) && $this->fmod($element, $schema->divisibleBy) != 0) { |
| TMBOY | 44:c1d8923072ba | 59 | $this->addError($path, "Is not divisible by " . $schema->divisibleBy, 'divisibleBy', array('divisibleBy' => $schema->divisibleBy,)); |
| TMBOY | 44:c1d8923072ba | 60 | } |
| TMBOY | 44:c1d8923072ba | 61 | |
| TMBOY | 44:c1d8923072ba | 62 | // Verify multipleOf - Draft v4 |
| TMBOY | 44:c1d8923072ba | 63 | if (isset($schema->multipleOf) && $this->fmod($element, $schema->multipleOf) != 0) { |
| TMBOY | 44:c1d8923072ba | 64 | $this->addError($path, "Must be a multiple of " . $schema->multipleOf, 'multipleOf', array('multipleOf' => $schema->multipleOf,)); |
| TMBOY | 44:c1d8923072ba | 65 | } |
| TMBOY | 44:c1d8923072ba | 66 | |
| TMBOY | 44:c1d8923072ba | 67 | $this->checkFormat($element, $schema, $path, $i); |
| TMBOY | 44:c1d8923072ba | 68 | } |
| TMBOY | 44:c1d8923072ba | 69 | |
| TMBOY | 44:c1d8923072ba | 70 | private function fmod($number1, $number2) |
| TMBOY | 44:c1d8923072ba | 71 | { |
| TMBOY | 44:c1d8923072ba | 72 | $number1 = abs($number1); |
| TMBOY | 44:c1d8923072ba | 73 | $modulus = fmod($number1, $number2); |
| TMBOY | 44:c1d8923072ba | 74 | $precision = abs(0.0000000001); |
| TMBOY | 44:c1d8923072ba | 75 | $diff = (float)($modulus - $number2); |
| TMBOY | 44:c1d8923072ba | 76 | |
| TMBOY | 44:c1d8923072ba | 77 | if (-$precision < $diff && $diff < $precision) { |
| TMBOY | 44:c1d8923072ba | 78 | return 0.0; |
| TMBOY | 44:c1d8923072ba | 79 | } |
| TMBOY | 44:c1d8923072ba | 80 | |
| TMBOY | 44:c1d8923072ba | 81 | $decimals1 = mb_strpos($number1, ".") ? mb_strlen($number1) - mb_strpos($number1, ".") - 1 : 0; |
| TMBOY | 44:c1d8923072ba | 82 | $decimals2 = mb_strpos($number2, ".") ? mb_strlen($number2) - mb_strpos($number2, ".") - 1 : 0; |
| TMBOY | 44:c1d8923072ba | 83 | |
| TMBOY | 44:c1d8923072ba | 84 | return (float)round($modulus, max($decimals1, $decimals2)); |
| TMBOY | 44:c1d8923072ba | 85 | } |
| TMBOY | 44:c1d8923072ba | 86 | } |
