/** * @override */ public static function build($context) { $childConstraints = []; $name = static::getName(); $doc = $context->{$name}; if (!is_array($doc)) { throw new ConstraintParseException('This keyword\'s value MUST be an array'); } if (sizeof($doc) < 1) { throw new ConstraintParseException('This keyword\'s value MUST be an array. This array MUST have at least one element.'); } foreach ($doc as $of) { $childConstraints[] = EmptyConstraint::build($of); } return new static($childConstraints); }
/** * @override */ public static function build($context) { $doc = $context->dependencies; $dependencies = []; if (!is_object($doc)) { throw new ConstraintParseException('The value of "dependencies" MUST be an object.'); } foreach ($doc as $key => $value) { if (is_object($value)) { $dependencies[$key] = EmptyConstraint::build($value); } elseif (is_array($value)) { $dependencies[$key] = $value; } else { throw new ConstraintParseException('The "dependencies" object must contain only object or array values.'); } } return new static($dependencies); }
/** * @dataProvider invalidConstraintDataProvider * @expectedException JsonSchema\Constraint\Exception\ConstraintParseException */ public function testInvalidConstraint($schemaDoc) { $schemaDoc = json_decode($schemaDoc); $constraint = EmptyConstraint::build($schemaDoc); }
/** * */ public static function buildAdditionalPropertyConstraints($additionalProperties) { $constraint = true; if (is_bool($additionalProperties)) { $constraint = $additionalProperties; } elseif (is_object($additionalProperties)) { $constraint = EmptyConstraint::build($additionalProperties); } else { throw new ConstraintParseException('The value MUST be either a boolean or object.'); } return $constraint; }
/** * @override */ public static function build($context) { $constraints = null; $doc = $context->items; if (!(is_array($doc) || is_object($doc))) { throw new ConstraintParseException("The value of 'items' MUST be either an object or an array."); } if (isset($context->additionalItems) && !(is_bool($context->additionalItems) || is_object($context->additionalItems))) { throw new ConstraintParseException("The value of 'additionalItems' MUST be either a boolean or an object."); } if (is_array($doc)) { $constraints = []; foreach ($doc as $value) { $constraints[] = EmptyConstraint::build($value); } } else { $constraints = EmptyConstraint::build($context->items); } $additionalItems = isset($context->additionalItems) ? $context->additionalItems : true; if (is_object($additionalItems)) { $additionalItems = EmptyConstraint::build($additionalItems); } return new static($constraints, $additionalItems); }
/** * Construct a validator from a JSON document data structure. * Note the $doc structure underlying the JsonDocs is mutated to aid in stuff. */ public function __construct(\StdClass $doc) { $this->doc = $doc; $this->rootSymbol = EmptyConstraint::build($doc); }
private static function parseConditional($doc) { if (!is_object($doc)) { throw new ConstraintParseException('The items in a "switch" array MUST be objects.'); } if (isset($doc->continue) && !is_bool($doc->continue)) { throw new ConstraintParseException('The value of "continue" MUST be a boolean.'); } if (!isset($doc->then)) { throw new ConstraintParseException('"then" must be specified.'); } if (!(is_bool($doc->then) || is_object($doc->then))) { throw new ConstraintParseException('"then" must be an object or boolean.'); } if (is_object($doc->then)) { $doc->then = EmptyConstraint::build($doc->then); } if (isset($doc->if)) { if (!is_object($doc->if)) { throw new ConstraintParseException('The value of "if" MUST be an object.'); } $doc->if = EmptyConstraint::build($doc->if); } return $doc; }