protected function generateType(PropertyInterface $type, $data) { if ($type instanceof Property\ComplexType) { $fields = array(); $properties = $type->getProperties(); foreach ($properties as $name => $property) { if (isset($data[$name])) { $fields[$name] = $this->generateType($property, $data[$name]); } elseif ($property->isRequired()) { throw new RuntimeException('Missing sample data of required property ' . $name); } } return new Record($type->getName(), $fields); } elseif ($type instanceof Property\ArrayType) { if (is_array($data)) { $values = array(); foreach ($data as $value) { $values[] = $this->generateType($type->getPrototype(), $value); } return $values; } elseif ($type->isRequired()) { throw new RuntimeException('Missing sample data of required property ' . $type->getName()); } } elseif ($type instanceof Property\BooleanType) { return (bool) $data; } elseif ($type instanceof Property\IntegerType) { return (int) $data; } elseif ($type instanceof Property\FloatType) { return (double) $data; } else { return (string) $data; } }
protected function setParameterType(PropertyInterface $parameter, &$raml, $indent) { $indent = str_repeat(' ', $indent); switch (true) { case $parameter instanceof Property\IntegerType: $raml .= $indent . 'type: integer' . "\n"; break; case $parameter instanceof Property\FloatType: $raml .= $indent . 'type: number' . "\n"; break; case $parameter instanceof Property\BooleanType: $raml .= $indent . 'type: boolean' . "\n"; break; case $parameter instanceof Property\DateType: case $parameter instanceof Property\DateTimeType: $raml .= $indent . 'type: date' . "\n"; break; default: $raml .= $indent . 'type: string' . "\n"; break; } $description = $parameter->getDescription(); if (!empty($description)) { $raml .= $indent . 'description: ' . Inline::dump($parameter->getDescription()) . "\n"; } $raml .= $indent . 'required: ' . ($parameter->isRequired() ? 'true' : 'false') . "\n"; if ($parameter instanceof Property\DecimalType) { $min = $parameter->getMin(); $max = $parameter->getMax(); if ($min !== null) { $raml .= $indent . 'minimum: ' . $min . "\n"; } if ($max !== null) { $raml .= $indent . 'maximum: ' . $max . "\n"; } } elseif ($parameter instanceof Property\StringType) { $minLength = $parameter->getMinLength(); $maxLength = $parameter->getMaxLength(); $enumeration = $parameter->getEnumeration(); $pattern = $parameter->getPattern(); if ($minLength !== null) { $raml .= $indent . 'minLength: ' . $minLength . "\n"; } if ($maxLength !== null) { $raml .= $indent . 'maxLength: ' . $maxLength . "\n"; } if (!empty($enumeration)) { $raml .= $indent . 'enum: ' . Inline::dump($enumeration) . "\n"; } if (!empty($pattern)) { $raml .= $indent . 'pattern: ' . Inline::dump($pattern) . "\n"; } } }
protected function setParameterType(PropertyInterface $parameter, Parameter $param) { switch (true) { case $parameter instanceof Property\IntegerType: $param->setType('integer'); break; case $parameter instanceof Property\FloatType: $param->setType('number'); break; case $parameter instanceof Property\BooleanType: $param->setType('boolean'); break; case $parameter instanceof Property\DateType: $param->setType('string'); $param->setFormat('date'); break; case $parameter instanceof Property\DateTimeType: $param->setType('string'); $param->setFormat('date-time'); break; default: $param->setType('string'); break; } $param->setDescription($parameter->getDescription()); $param->setRequired($parameter->isRequired()); if ($parameter instanceof Property\DecimalType) { $param->setMinimum($parameter->getMin()); $param->setMaximum($parameter->getMax()); } elseif ($parameter instanceof Property\StringType) { $param->setMinimum($parameter->getMinLength()); $param->setMaximum($parameter->getMaxLength()); $param->setEnum($parameter->getEnumeration()); } }
protected function assertRequired($data, PropertyInterface $property, $path) { if ($property->isRequired() && $data === null) { throw new ValidationException('Property ' . $path . ' is required'); } }