/** * Attempt to encode a Spec into a JSON schema. * * @param Spec $spec * @param string $title * * @throws CoreException * @return string */ public function encode(Spec $spec, $title = 'root') { $schema = ['$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => $title, 'type' => CompoundTypes::COMPOUND_OBJECT, 'required' => $spec->getRequired()]; $properties = []; foreach ($spec->getConstraints() as $key => $constraints) { $properties[$key] = $this->encodeConstraints($spec, $constraints, $key); } foreach ($spec->getDefaults() as $key => $default) { if (!Arr::has($properties, $key)) { $properties[$key] = []; } $properties[$key]['default'] = $default; } $schema['properties'] = $properties; return json_encode($schema, JSON_PRETTY_PRINT); }
public function testAccessors() { $strings = Boa::string(); $spec = new Spec(['name' => $strings], ['name' => 'Bobby'], ['name']); $this->assertEqualsMatrix([[['name' => $strings], $spec->getConstraints()], [['name' => 'Bobby'], $spec->getDefaults()], [['name'], $spec->getRequired()]]); }
/** * Get a RAML parameter definition from a Spec field. * * @param Spec $spec * @param string $field * * @return array */ protected function specFieldToParameter(Spec $spec, $field) { $constraints = $spec->getConstraints(); $defaults = $spec->getDefaults(); $required = $spec->getRequired(); $parameter = []; if (Arr::has($constraints, $field)) { $input = $constraints[$field]; if (is_array($input) || $input instanceof Spec) { if ($input instanceof Spec) { $input = [$input]; } foreach ($input as $constraint) { if ($constraint instanceof PrimitiveTypeConstraint) { switch ($constraint->toString()) { case ScalarTypes::SCALAR_STRING: $parameter['type'] = 'string'; break; case ScalarTypes::SCALAR_FLOAT: case ScalarTypes::SCALAR_INTEGER: $parameter['type'] = 'number'; break; case ScalarTypes::SCALAR_BOOLEAN: $parameter['type'] = 'boolean'; break; } } } } } if (Arr::has($defaults, $field)) { $parameter['default'] = $defaults[$field]; } $parameter['required'] = in_array($field, $required); return $parameter; }