ex
Fork of mbed-os-example-mbed5-blinky by
dumi_doc-master/schema/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.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\SchemaStorage; |
| TMBOY | 44:c1d8923072ba | 13 | use JsonSchema\Uri\UriRetriever; |
| TMBOY | 44:c1d8923072ba | 14 | use JsonSchema\UriRetrieverInterface; |
| TMBOY | 44:c1d8923072ba | 15 | use JsonSchema\Entity\JsonPointer; |
| TMBOY | 44:c1d8923072ba | 16 | |
| TMBOY | 44:c1d8923072ba | 17 | /** |
| TMBOY | 44:c1d8923072ba | 18 | * The Base Constraints, all Validators should extend this class |
| TMBOY | 44:c1d8923072ba | 19 | * |
| TMBOY | 44:c1d8923072ba | 20 | * @author Robert Schönthal <seroscho@googlemail.com> |
| TMBOY | 44:c1d8923072ba | 21 | * @author Bruno Prieto Reis <bruno.p.reis@gmail.com> |
| TMBOY | 44:c1d8923072ba | 22 | */ |
| TMBOY | 44:c1d8923072ba | 23 | abstract class Constraint implements ConstraintInterface |
| TMBOY | 44:c1d8923072ba | 24 | { |
| TMBOY | 44:c1d8923072ba | 25 | protected $errors = array(); |
| TMBOY | 44:c1d8923072ba | 26 | protected $inlineSchemaProperty = '$schema'; |
| TMBOY | 44:c1d8923072ba | 27 | |
| TMBOY | 44:c1d8923072ba | 28 | const CHECK_MODE_NORMAL = 0x00000001; |
| TMBOY | 44:c1d8923072ba | 29 | const CHECK_MODE_TYPE_CAST = 0x00000002; |
| TMBOY | 44:c1d8923072ba | 30 | const CHECK_MODE_COERCE = 0x00000004; |
| TMBOY | 44:c1d8923072ba | 31 | |
| TMBOY | 44:c1d8923072ba | 32 | /** |
| TMBOY | 44:c1d8923072ba | 33 | * @var Factory |
| TMBOY | 44:c1d8923072ba | 34 | */ |
| TMBOY | 44:c1d8923072ba | 35 | protected $factory; |
| TMBOY | 44:c1d8923072ba | 36 | |
| TMBOY | 44:c1d8923072ba | 37 | /** |
| TMBOY | 44:c1d8923072ba | 38 | * @param Factory $factory |
| TMBOY | 44:c1d8923072ba | 39 | */ |
| TMBOY | 44:c1d8923072ba | 40 | public function __construct(Factory $factory = null) |
| TMBOY | 44:c1d8923072ba | 41 | { |
| TMBOY | 44:c1d8923072ba | 42 | $this->factory = $factory ? : new Factory(); |
| TMBOY | 44:c1d8923072ba | 43 | } |
| TMBOY | 44:c1d8923072ba | 44 | |
| TMBOY | 44:c1d8923072ba | 45 | /** |
| TMBOY | 44:c1d8923072ba | 46 | * {@inheritDoc} |
| TMBOY | 44:c1d8923072ba | 47 | */ |
| TMBOY | 44:c1d8923072ba | 48 | public function addError(JsonPointer $path = null, $message, $constraint='', array $more=null) |
| TMBOY | 44:c1d8923072ba | 49 | { |
| TMBOY | 44:c1d8923072ba | 50 | $error = array( |
| TMBOY | 44:c1d8923072ba | 51 | 'property' => $this->convertJsonPointerIntoPropertyPath($path ?: new JsonPointer('')), |
| TMBOY | 44:c1d8923072ba | 52 | 'pointer' => ltrim(strval($path ?: new JsonPointer('')), '#'), |
| TMBOY | 44:c1d8923072ba | 53 | 'message' => $message, |
| TMBOY | 44:c1d8923072ba | 54 | 'constraint' => $constraint, |
| TMBOY | 44:c1d8923072ba | 55 | ); |
| TMBOY | 44:c1d8923072ba | 56 | |
| TMBOY | 44:c1d8923072ba | 57 | if (is_array($more) && count($more) > 0) |
| TMBOY | 44:c1d8923072ba | 58 | { |
| TMBOY | 44:c1d8923072ba | 59 | $error += $more; |
| TMBOY | 44:c1d8923072ba | 60 | } |
| TMBOY | 44:c1d8923072ba | 61 | |
| TMBOY | 44:c1d8923072ba | 62 | $this->errors[] = $error; |
| TMBOY | 44:c1d8923072ba | 63 | } |
| TMBOY | 44:c1d8923072ba | 64 | |
| TMBOY | 44:c1d8923072ba | 65 | /** |
| TMBOY | 44:c1d8923072ba | 66 | * {@inheritDoc} |
| TMBOY | 44:c1d8923072ba | 67 | */ |
| TMBOY | 44:c1d8923072ba | 68 | public function addErrors(array $errors) |
| TMBOY | 44:c1d8923072ba | 69 | { |
| TMBOY | 44:c1d8923072ba | 70 | if ($errors) { |
| TMBOY | 44:c1d8923072ba | 71 | $this->errors = array_merge($this->errors, $errors); |
| TMBOY | 44:c1d8923072ba | 72 | } |
| TMBOY | 44:c1d8923072ba | 73 | } |
| TMBOY | 44:c1d8923072ba | 74 | |
| TMBOY | 44:c1d8923072ba | 75 | /** |
| TMBOY | 44:c1d8923072ba | 76 | * {@inheritDoc} |
| TMBOY | 44:c1d8923072ba | 77 | */ |
| TMBOY | 44:c1d8923072ba | 78 | public function getErrors() |
| TMBOY | 44:c1d8923072ba | 79 | { |
| TMBOY | 44:c1d8923072ba | 80 | return $this->errors; |
| TMBOY | 44:c1d8923072ba | 81 | } |
| TMBOY | 44:c1d8923072ba | 82 | |
| TMBOY | 44:c1d8923072ba | 83 | /** |
| TMBOY | 44:c1d8923072ba | 84 | * {@inheritDoc} |
| TMBOY | 44:c1d8923072ba | 85 | */ |
| TMBOY | 44:c1d8923072ba | 86 | public function isValid() |
| TMBOY | 44:c1d8923072ba | 87 | { |
| TMBOY | 44:c1d8923072ba | 88 | return !$this->getErrors(); |
| TMBOY | 44:c1d8923072ba | 89 | } |
| TMBOY | 44:c1d8923072ba | 90 | |
| TMBOY | 44:c1d8923072ba | 91 | /** |
| TMBOY | 44:c1d8923072ba | 92 | * Clears any reported errors. Should be used between |
| TMBOY | 44:c1d8923072ba | 93 | * multiple validation checks. |
| TMBOY | 44:c1d8923072ba | 94 | */ |
| TMBOY | 44:c1d8923072ba | 95 | public function reset() |
| TMBOY | 44:c1d8923072ba | 96 | { |
| TMBOY | 44:c1d8923072ba | 97 | $this->errors = array(); |
| TMBOY | 44:c1d8923072ba | 98 | } |
| TMBOY | 44:c1d8923072ba | 99 | |
| TMBOY | 44:c1d8923072ba | 100 | /** |
| TMBOY | 44:c1d8923072ba | 101 | * Bubble down the path |
| TMBOY | 44:c1d8923072ba | 102 | * |
| TMBOY | 44:c1d8923072ba | 103 | * @param JsonPointer|null $path Current path |
| TMBOY | 44:c1d8923072ba | 104 | * @param mixed $i What to append to the path |
| TMBOY | 44:c1d8923072ba | 105 | * |
| TMBOY | 44:c1d8923072ba | 106 | * @return JsonPointer; |
| TMBOY | 44:c1d8923072ba | 107 | */ |
| TMBOY | 44:c1d8923072ba | 108 | protected function incrementPath(JsonPointer $path = null, $i) |
| TMBOY | 44:c1d8923072ba | 109 | { |
| TMBOY | 44:c1d8923072ba | 110 | $path = $path ?: new JsonPointer(''); |
| TMBOY | 44:c1d8923072ba | 111 | $path = $path->withPropertyPaths( |
| TMBOY | 44:c1d8923072ba | 112 | array_merge( |
| TMBOY | 44:c1d8923072ba | 113 | $path->getPropertyPaths(), |
| TMBOY | 44:c1d8923072ba | 114 | array_filter(array($i), 'strlen') |
| TMBOY | 44:c1d8923072ba | 115 | ) |
| TMBOY | 44:c1d8923072ba | 116 | ); |
| TMBOY | 44:c1d8923072ba | 117 | return $path; |
| TMBOY | 44:c1d8923072ba | 118 | } |
| TMBOY | 44:c1d8923072ba | 119 | |
| TMBOY | 44:c1d8923072ba | 120 | /** |
| TMBOY | 44:c1d8923072ba | 121 | * Validates an array |
| TMBOY | 44:c1d8923072ba | 122 | * |
| TMBOY | 44:c1d8923072ba | 123 | * @param mixed $value |
| TMBOY | 44:c1d8923072ba | 124 | * @param mixed $schema |
| TMBOY | 44:c1d8923072ba | 125 | * @param JsonPointer|null $path |
| TMBOY | 44:c1d8923072ba | 126 | * @param mixed $i |
| TMBOY | 44:c1d8923072ba | 127 | */ |
| TMBOY | 44:c1d8923072ba | 128 | protected function checkArray($value, $schema = null, JsonPointer $path = null, $i = null) |
| TMBOY | 44:c1d8923072ba | 129 | { |
| TMBOY | 44:c1d8923072ba | 130 | $validator = $this->factory->createInstanceFor('collection'); |
| TMBOY | 44:c1d8923072ba | 131 | $validator->check($value, $schema, $path, $i); |
| TMBOY | 44:c1d8923072ba | 132 | |
| TMBOY | 44:c1d8923072ba | 133 | $this->addErrors($validator->getErrors()); |
| TMBOY | 44:c1d8923072ba | 134 | } |
| TMBOY | 44:c1d8923072ba | 135 | |
| TMBOY | 44:c1d8923072ba | 136 | /** |
| TMBOY | 44:c1d8923072ba | 137 | * Validates an object |
| TMBOY | 44:c1d8923072ba | 138 | * |
| TMBOY | 44:c1d8923072ba | 139 | * @param mixed $value |
| TMBOY | 44:c1d8923072ba | 140 | * @param mixed $schema |
| TMBOY | 44:c1d8923072ba | 141 | * @param JsonPointer|null $path |
| TMBOY | 44:c1d8923072ba | 142 | * @param mixed $i |
| TMBOY | 44:c1d8923072ba | 143 | * @param mixed $patternProperties |
| TMBOY | 44:c1d8923072ba | 144 | */ |
| TMBOY | 44:c1d8923072ba | 145 | protected function checkObject($value, $schema = null, JsonPointer $path = null, $i = null, $patternProperties = null) |
| TMBOY | 44:c1d8923072ba | 146 | { |
| TMBOY | 44:c1d8923072ba | 147 | $validator = $this->factory->createInstanceFor('object'); |
| TMBOY | 44:c1d8923072ba | 148 | $validator->check($value, $schema, $path, $i, $patternProperties); |
| TMBOY | 44:c1d8923072ba | 149 | |
| TMBOY | 44:c1d8923072ba | 150 | $this->addErrors($validator->getErrors()); |
| TMBOY | 44:c1d8923072ba | 151 | } |
| TMBOY | 44:c1d8923072ba | 152 | |
| TMBOY | 44:c1d8923072ba | 153 | /** |
| TMBOY | 44:c1d8923072ba | 154 | * Validates the type of a property |
| TMBOY | 44:c1d8923072ba | 155 | * |
| TMBOY | 44:c1d8923072ba | 156 | * @param mixed $value |
| TMBOY | 44:c1d8923072ba | 157 | * @param mixed $schema |
| TMBOY | 44:c1d8923072ba | 158 | * @param JsonPointer|null $path |
| TMBOY | 44:c1d8923072ba | 159 | * @param mixed $i |
| TMBOY | 44:c1d8923072ba | 160 | */ |
| TMBOY | 44:c1d8923072ba | 161 | protected function checkType($value, $schema = null, JsonPointer $path = null, $i = null) |
| TMBOY | 44:c1d8923072ba | 162 | { |
| TMBOY | 44:c1d8923072ba | 163 | $validator = $this->factory->createInstanceFor('type'); |
| TMBOY | 44:c1d8923072ba | 164 | $validator->check($value, $schema, $path, $i); |
| TMBOY | 44:c1d8923072ba | 165 | |
| TMBOY | 44:c1d8923072ba | 166 | $this->addErrors($validator->getErrors()); |
| TMBOY | 44:c1d8923072ba | 167 | } |
| TMBOY | 44:c1d8923072ba | 168 | |
| TMBOY | 44:c1d8923072ba | 169 | /** |
| TMBOY | 44:c1d8923072ba | 170 | * Checks a undefined element |
| TMBOY | 44:c1d8923072ba | 171 | * |
| TMBOY | 44:c1d8923072ba | 172 | * @param mixed $value |
| TMBOY | 44:c1d8923072ba | 173 | * @param mixed $schema |
| TMBOY | 44:c1d8923072ba | 174 | * @param JsonPointer|null $path |
| TMBOY | 44:c1d8923072ba | 175 | * @param mixed $i |
| TMBOY | 44:c1d8923072ba | 176 | */ |
| TMBOY | 44:c1d8923072ba | 177 | protected function checkUndefined($value, $schema = null, JsonPointer $path = null, $i = null) |
| TMBOY | 44:c1d8923072ba | 178 | { |
| TMBOY | 44:c1d8923072ba | 179 | $validator = $this->factory->createInstanceFor('undefined'); |
| TMBOY | 44:c1d8923072ba | 180 | |
| TMBOY | 44:c1d8923072ba | 181 | $validator->check($value, $this->factory->getSchemaStorage()->resolveRefSchema($schema), $path, $i); |
| TMBOY | 44:c1d8923072ba | 182 | |
| TMBOY | 44:c1d8923072ba | 183 | $this->addErrors($validator->getErrors()); |
| TMBOY | 44:c1d8923072ba | 184 | } |
| TMBOY | 44:c1d8923072ba | 185 | |
| TMBOY | 44:c1d8923072ba | 186 | /** |
| TMBOY | 44:c1d8923072ba | 187 | * Checks a string element |
| TMBOY | 44:c1d8923072ba | 188 | * |
| TMBOY | 44:c1d8923072ba | 189 | * @param mixed $value |
| TMBOY | 44:c1d8923072ba | 190 | * @param mixed $schema |
| TMBOY | 44:c1d8923072ba | 191 | * @param JsonPointer|null $path |
| TMBOY | 44:c1d8923072ba | 192 | * @param mixed $i |
| TMBOY | 44:c1d8923072ba | 193 | */ |
| TMBOY | 44:c1d8923072ba | 194 | protected function checkString($value, $schema = null, JsonPointer $path = null, $i = null) |
| TMBOY | 44:c1d8923072ba | 195 | { |
| TMBOY | 44:c1d8923072ba | 196 | $validator = $this->factory->createInstanceFor('string'); |
| TMBOY | 44:c1d8923072ba | 197 | $validator->check($value, $schema, $path, $i); |
| TMBOY | 44:c1d8923072ba | 198 | |
| TMBOY | 44:c1d8923072ba | 199 | $this->addErrors($validator->getErrors()); |
| TMBOY | 44:c1d8923072ba | 200 | } |
| TMBOY | 44:c1d8923072ba | 201 | |
| TMBOY | 44:c1d8923072ba | 202 | /** |
| TMBOY | 44:c1d8923072ba | 203 | * Checks a number element |
| TMBOY | 44:c1d8923072ba | 204 | * |
| TMBOY | 44:c1d8923072ba | 205 | * @param mixed $value |
| TMBOY | 44:c1d8923072ba | 206 | * @param mixed $schema |
| TMBOY | 44:c1d8923072ba | 207 | * @param JsonPointer $path |
| TMBOY | 44:c1d8923072ba | 208 | * @param mixed $i |
| TMBOY | 44:c1d8923072ba | 209 | */ |
| TMBOY | 44:c1d8923072ba | 210 | protected function checkNumber($value, $schema = null, JsonPointer $path = null, $i = null) |
| TMBOY | 44:c1d8923072ba | 211 | { |
| TMBOY | 44:c1d8923072ba | 212 | $validator = $this->factory->createInstanceFor('number'); |
| TMBOY | 44:c1d8923072ba | 213 | $validator->check($value, $schema, $path, $i); |
| TMBOY | 44:c1d8923072ba | 214 | |
| TMBOY | 44:c1d8923072ba | 215 | $this->addErrors($validator->getErrors()); |
| TMBOY | 44:c1d8923072ba | 216 | } |
| TMBOY | 44:c1d8923072ba | 217 | |
| TMBOY | 44:c1d8923072ba | 218 | /** |
| TMBOY | 44:c1d8923072ba | 219 | * Checks a enum element |
| TMBOY | 44:c1d8923072ba | 220 | * |
| TMBOY | 44:c1d8923072ba | 221 | * @param mixed $value |
| TMBOY | 44:c1d8923072ba | 222 | * @param mixed $schema |
| TMBOY | 44:c1d8923072ba | 223 | * @param JsonPointer|null $path |
| TMBOY | 44:c1d8923072ba | 224 | * @param mixed $i |
| TMBOY | 44:c1d8923072ba | 225 | */ |
| TMBOY | 44:c1d8923072ba | 226 | protected function checkEnum($value, $schema = null, JsonPointer $path = null, $i = null) |
| TMBOY | 44:c1d8923072ba | 227 | { |
| TMBOY | 44:c1d8923072ba | 228 | $validator = $this->factory->createInstanceFor('enum'); |
| TMBOY | 44:c1d8923072ba | 229 | $validator->check($value, $schema, $path, $i); |
| TMBOY | 44:c1d8923072ba | 230 | |
| TMBOY | 44:c1d8923072ba | 231 | $this->addErrors($validator->getErrors()); |
| TMBOY | 44:c1d8923072ba | 232 | } |
| TMBOY | 44:c1d8923072ba | 233 | |
| TMBOY | 44:c1d8923072ba | 234 | /** |
| TMBOY | 44:c1d8923072ba | 235 | * Checks format of an element |
| TMBOY | 44:c1d8923072ba | 236 | * |
| TMBOY | 44:c1d8923072ba | 237 | * @param mixed $value |
| TMBOY | 44:c1d8923072ba | 238 | * @param mixed $schema |
| TMBOY | 44:c1d8923072ba | 239 | * @param JsonPointer|null $path |
| TMBOY | 44:c1d8923072ba | 240 | * @param mixed $i |
| TMBOY | 44:c1d8923072ba | 241 | */ |
| TMBOY | 44:c1d8923072ba | 242 | protected function checkFormat($value, $schema = null, JsonPointer $path = null, $i = null) |
| TMBOY | 44:c1d8923072ba | 243 | { |
| TMBOY | 44:c1d8923072ba | 244 | $validator = $this->factory->createInstanceFor('format'); |
| TMBOY | 44:c1d8923072ba | 245 | $validator->check($value, $schema, $path, $i); |
| TMBOY | 44:c1d8923072ba | 246 | |
| TMBOY | 44:c1d8923072ba | 247 | $this->addErrors($validator->getErrors()); |
| TMBOY | 44:c1d8923072ba | 248 | } |
| TMBOY | 44:c1d8923072ba | 249 | |
| TMBOY | 44:c1d8923072ba | 250 | /** |
| TMBOY | 44:c1d8923072ba | 251 | * Get the type check based on the set check mode. |
| TMBOY | 44:c1d8923072ba | 252 | * |
| TMBOY | 44:c1d8923072ba | 253 | * @return TypeCheck\TypeCheckInterface |
| TMBOY | 44:c1d8923072ba | 254 | */ |
| TMBOY | 44:c1d8923072ba | 255 | protected function getTypeCheck() |
| TMBOY | 44:c1d8923072ba | 256 | { |
| TMBOY | 44:c1d8923072ba | 257 | return $this->factory->getTypeCheck(); |
| TMBOY | 44:c1d8923072ba | 258 | } |
| TMBOY | 44:c1d8923072ba | 259 | |
| TMBOY | 44:c1d8923072ba | 260 | /** |
| TMBOY | 44:c1d8923072ba | 261 | * @param JsonPointer $pointer |
| TMBOY | 44:c1d8923072ba | 262 | * @return string property path |
| TMBOY | 44:c1d8923072ba | 263 | */ |
| TMBOY | 44:c1d8923072ba | 264 | protected function convertJsonPointerIntoPropertyPath(JsonPointer $pointer) |
| TMBOY | 44:c1d8923072ba | 265 | { |
| TMBOY | 44:c1d8923072ba | 266 | $result = array_map( |
| TMBOY | 44:c1d8923072ba | 267 | function($path) { |
| TMBOY | 44:c1d8923072ba | 268 | return sprintf(is_numeric($path) ? '[%d]' : '.%s', $path); |
| TMBOY | 44:c1d8923072ba | 269 | }, |
| TMBOY | 44:c1d8923072ba | 270 | $pointer->getPropertyPaths() |
| TMBOY | 44:c1d8923072ba | 271 | ); |
| TMBOY | 44:c1d8923072ba | 272 | return trim(implode('', $result), '.'); |
| TMBOY | 44:c1d8923072ba | 273 | } |
| TMBOY | 44:c1d8923072ba | 274 | } |
