ex
Fork of mbed-os-example-mbed5-blinky by
Diff: dumi_doc-master/schema/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php
- Revision:
- 44:c1d8923072ba
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dumi_doc-master/schema/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php Tue Jul 18 16:27:22 2017 +0800
@@ -0,0 +1,150 @@
+<?php
+
+/*
+ * This file is part of the JsonSchema package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace JsonSchema\Constraints;
+
+use JsonSchema\Exception\InvalidArgumentException;
+use JsonSchema\SchemaStorage;
+use JsonSchema\Uri\UriRetriever;
+use JsonSchema\UriRetrieverInterface;
+
+/**
+ * Factory for centralize constraint initialization.
+ */
+class Factory
+{
+ /**
+ * @var SchemaStorage
+ */
+ protected $schemaStorage;
+
+ /**
+ * @var UriRetriever $uriRetriever
+ */
+ protected $uriRetriever;
+
+ /**
+ * @var int
+ */
+ private $checkMode;
+
+ /**
+ * @var TypeCheck\TypeCheckInterface[]
+ */
+ private $typeCheck = array();
+
+ /**
+ * @var array $constraintMap
+ */
+ protected $constraintMap = array(
+ 'array' => 'JsonSchema\Constraints\CollectionConstraint',
+ 'collection' => 'JsonSchema\Constraints\CollectionConstraint',
+ 'object' => 'JsonSchema\Constraints\ObjectConstraint',
+ 'type' => 'JsonSchema\Constraints\TypeConstraint',
+ 'undefined' => 'JsonSchema\Constraints\UndefinedConstraint',
+ 'string' => 'JsonSchema\Constraints\StringConstraint',
+ 'number' => 'JsonSchema\Constraints\NumberConstraint',
+ 'enum' => 'JsonSchema\Constraints\EnumConstraint',
+ 'format' => 'JsonSchema\Constraints\FormatConstraint',
+ 'schema' => 'JsonSchema\Constraints\SchemaConstraint',
+ 'validator' => 'JsonSchema\Validator',
+ 'coercer' => 'JsonSchema\Coerce'
+ );
+
+ /**
+ * @var array<ConstraintInterface>
+ */
+ private $instanceCache = array();
+
+ /**
+ * @param SchemaStorage $schemaStorage
+ * @param UriRetrieverInterface $uriRetriever
+ * @param int $checkMode
+ */
+ public function __construct(
+ SchemaStorage $schemaStorage = null,
+ UriRetrieverInterface $uriRetriever = null,
+ $checkMode = Constraint::CHECK_MODE_NORMAL
+ ) {
+ $this->uriRetriever = $uriRetriever ?: new UriRetriever;
+ $this->schemaStorage = $schemaStorage ?: new SchemaStorage($this->uriRetriever);
+ $this->checkMode = $checkMode;
+ }
+
+ /**
+ * @return UriRetrieverInterface
+ */
+ public function getUriRetriever()
+ {
+ return $this->uriRetriever;
+ }
+
+ public function getSchemaStorage()
+ {
+ return $this->schemaStorage;
+ }
+
+ public function getTypeCheck()
+ {
+ if (!isset($this->typeCheck[$this->checkMode])) {
+ $this->typeCheck[$this->checkMode] = ($this->checkMode & Constraint::CHECK_MODE_TYPE_CAST)
+ ? new TypeCheck\LooseTypeCheck
+ : new TypeCheck\StrictTypeCheck;
+ }
+
+ return $this->typeCheck[$this->checkMode];
+ }
+
+ /**
+ * @param string $name
+ * @param string $class
+ * @return Factory
+ */
+ public function setConstraintClass($name, $class)
+ {
+ // Ensure class exists
+ if (!class_exists($class)) {
+ throw new InvalidArgumentException('Unknown constraint ' . $name);
+ }
+ // Ensure class is appropriate
+ if (!in_array('JsonSchema\Constraints\ConstraintInterface', class_implements($class))) {
+ throw new InvalidArgumentException('Invalid class ' . $name);
+ }
+ $this->constraintMap[$name] = $class;
+ return $this;
+ }
+
+ /**
+ * Create a constraint instance for the given constraint name.
+ *
+ * @param string $constraintName
+ * @return ConstraintInterface|ObjectConstraint
+ * @throws InvalidArgumentException if is not possible create the constraint instance.
+ */
+ public function createInstanceFor($constraintName)
+ {
+ if (!isset($this->constraintMap[$constraintName])) {
+ throw new InvalidArgumentException('Unknown constraint ' . $constraintName);
+ }
+
+ if (!isset($this->instanceCache[$constraintName])) {
+ $this->instanceCache[$constraintName] = new $this->constraintMap[$constraintName]($this);
+ }
+
+ return clone $this->instanceCache[$constraintName];
+ }
+
+ /**
+ * @return int
+ */
+ public function getCheckMode()
+ {
+ return $this->checkMode;
+ }
+}
