/**
  * @return Schema
  */
 public function create()
 {
     $schema = new Schema(null, new Value\ObjectValue(), 'Schemer meta-schema', 'Schema used to validate Schemer schemas.');
     // definitions
     $schemaArraySchema = new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::ARRAY_TYPE())), new ArrayValue\MinimumItemsConstraint(1), new ArrayValue\ItemsConstraint(array(), $schema)));
     $positiveIntegerSchema = new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::INTEGER_TYPE())), new NumberValue\MinimumConstraint(0)));
     $positiveIntegerDefault0Schema = new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::INTEGER_TYPE())), new NumberValue\MinimumConstraint(0)), new Value\IntegerValue(0));
     $simpleTypesSchema = new Schema(array(new Generic\EnumConstraint(new Value\ArrayValue(array(new Value\StringValue('array'), new Value\StringValue('boolean'), new Value\StringValue('date-time'), new Value\StringValue('integer'), new Value\StringValue('null'), new Value\StringValue('number'), new Value\StringValue('object'), new Value\StringValue('string'))))));
     $stringArraySchema = new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::ARRAY_TYPE())), new ArrayValue\ItemsConstraint(array(), new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::STRING_TYPE())))))));
     $booleanOrSchemaDefaultEmptyObjectSchema = new Schema(array(new Generic\AnyOfConstraint(array(new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::BOOLEAN_TYPE())))), $schema))), new Value\ObjectValue());
     $schemaMapDefaultEmptyObjectSchema = new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::OBJECT_TYPE())), new ObjectValue\PropertiesConstraint(array(), array(), $schema)), new Value\ObjectValue());
     $dateOrDateStringSchema = new Schema(array(new Generic\AnyOfConstraint(array(new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::DATE_TIME_TYPE())))), new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::STRING_TYPE())), new StringValue\DateTimeFormatConstraint()))))));
     // constraints
     $typeConstraint = new Generic\TypeConstraint(array(Value\ValueType::OBJECT_TYPE()));
     $propertiesConstraint = new ObjectValue\PropertiesConstraint(array('id' => new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::STRING_TYPE())), new StringValue\UriFormatConstraint())), '$schema' => new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::STRING_TYPE())), new StringValue\UriFormatConstraint())), 'title' => new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::STRING_TYPE())))), 'description' => new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::STRING_TYPE())))), 'default' => new Schema(), 'multipleOf' => new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::NUMBER_TYPE())), new NumberValue\MinimumConstraint(0, true))), 'maximum' => new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::NUMBER_TYPE())))), 'exclusiveMaximum' => new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::BOOLEAN_TYPE()))), new Value\BooleanValue(false)), 'minimum' => new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::NUMBER_TYPE())))), 'exclusiveMinimum' => new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::BOOLEAN_TYPE()))), new Value\BooleanValue(false)), 'maxLength' => $positiveIntegerSchema, 'minLength' => $positiveIntegerDefault0Schema, 'pattern' => new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::STRING_TYPE())))), 'additionalItems' => $booleanOrSchemaDefaultEmptyObjectSchema, 'items' => new Schema(array(new Generic\AnyOfConstraint(array($schema, $schemaArraySchema))), new Value\ObjectValue()), 'maxItems' => $positiveIntegerSchema, 'minItems' => $positiveIntegerDefault0Schema, 'uniqueItems' => new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::BOOLEAN_TYPE()))), new Value\BooleanValue(false)), 'maxProperties' => $positiveIntegerSchema, 'minProperties' => $positiveIntegerDefault0Schema, 'required' => $stringArraySchema, 'additionalProperties' => $booleanOrSchemaDefaultEmptyObjectSchema, 'definitions' => $schemaMapDefaultEmptyObjectSchema, 'properties' => $schemaMapDefaultEmptyObjectSchema, 'patternProperties' => $schemaMapDefaultEmptyObjectSchema, 'dependencies' => new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::OBJECT_TYPE())), new ObjectValue\PropertiesConstraint(array(), array(), new Schema(array(new Generic\AnyOfConstraint(array($schema, $stringArraySchema))))))), 'enum' => new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::ARRAY_TYPE())), new ArrayValue\MinimumItemsConstraint(1), new ArrayValue\UniqueItemsConstraint(true))), 'type' => new Schema(array(new Generic\AnyOfConstraint(array($simpleTypesSchema, new Schema(array(new Generic\TypeConstraint(array(Value\ValueType::ARRAY_TYPE())), new ArrayValue\ItemsConstraint(array(), $simpleTypesSchema), new ArrayValue\MinimumItemsConstraint(1), new ArrayValue\UniqueItemsConstraint(true))))))), 'allOf' => $schemaArraySchema, 'anyOf' => $schemaArraySchema, 'oneOf' => $schemaArraySchema, 'not' => $schema, 'maxDateTime' => $dateOrDateStringSchema, 'minDateTime' => $dateOrDateStringSchema), array(), new Schema());
     $exclusiveMaximumDependencyConstraint = new ObjectValue\DependencyConstraint('exclusiveMaximum', new Schema(array(new ObjectValue\RequiredConstraint('maximum'))));
     $exclusiveMinimumDependencyConstraint = new ObjectValue\DependencyConstraint('exclusiveMinimum', new Schema(array(new ObjectValue\RequiredConstraint('minimum'))));
     // composition
     $schema->setConstraints(array($typeConstraint, $propertiesConstraint, $exclusiveMaximumDependencyConstraint, $exclusiveMinimumDependencyConstraint));
     return $schema;
 }
Exemple #2
0
 /**
  * @return ValueType
  */
 public function valueType()
 {
     return ValueType::ARRAY_TYPE();
 }
Exemple #3
0
 /**
  * @return ValueType
  */
 public function valueType()
 {
     return ValueType::OBJECT_TYPE();
 }
Exemple #4
0
 /**
  * @param Value\ConcreteValueInterface $value
  *
  * @return Generic\TypeConstraint
  */
 protected function createTypeConstraint(Value\ConcreteValueInterface $value)
 {
     if ($value instanceof Value\ArrayValue) {
         $valueTypes = array();
         foreach ($value as $typeValue) {
             $valueTypes[] = Value\ValueType::instanceByValue($typeValue->value());
         }
         return new Generic\TypeConstraint($valueTypes);
     }
     return new Generic\TypeConstraint(array(Value\ValueType::instanceByValue($value->value())));
 }
 /**
  * @param Generic\TypeConstraint $constraint
  *
  * @return Result\ValidationResult
  */
 public function visitTypeConstraint(Generic\TypeConstraint $constraint)
 {
     $value = $this->currentValue();
     $isValid = false;
     foreach ($constraint->valueTypes() as $valueType) {
         if ($valueType === Value\ValueType::ARRAY_TYPE()) {
             $isValid = $value instanceof Value\ArrayValue;
         } elseif ($valueType === Value\ValueType::BOOLEAN_TYPE()) {
             $isValid = $value instanceof Value\BooleanValue;
         } elseif ($valueType === Value\ValueType::DATE_TIME_TYPE()) {
             $isValid = $value instanceof Value\DateTimeValue;
         } elseif ($valueType === Value\ValueType::INTEGER_TYPE()) {
             $isValid = $value instanceof Value\IntegerValue;
         } elseif ($valueType === Value\ValueType::NULL_TYPE()) {
             $isValid = $value instanceof Value\NullValue;
         } elseif ($valueType === Value\ValueType::NUMBER_TYPE()) {
             $isValid = $value instanceof Value\NumberValueInterface;
         } elseif ($valueType === Value\ValueType::OBJECT_TYPE()) {
             $isValid = $value instanceof Value\ObjectValue;
         } elseif ($valueType === Value\ValueType::STRING_TYPE()) {
             $isValid = $value instanceof Value\StringValue;
         }
         if ($isValid) {
             return $this->createResult();
         }
     }
     return $this->createSingleIssueResult($constraint);
 }
Exemple #6
0
 /**
  * @return ValueType
  */
 public function valueType()
 {
     return ValueType::DATE_TIME_TYPE();
 }