/** * Create a new API Definition from an array * * @param string $title * @param array $data * [ * title: string * version: ?string * baseUrl: ?string * baseUriParameters: ?array * protocols: ?array * defaultMediaType: ?string * schemas: ?array * securitySchemes: ?array * documentation: ?array * /* * ] * * @return ApiDefinition */ public static function createFromArray($title, array $data = []) { $apiDefinition = new static($title); // -- if (isset($data['version'])) { $apiDefinition->setVersion($data['version']); } if (isset($data['baseUrl'])) { $apiDefinition->setBaseUrl($data['baseUrl']); } // support for RAML 0.8 if (isset($data['baseUri'])) { $apiDefinition->setBaseUrl($data['baseUri']); } if (isset($data['baseUriParameters'])) { foreach ($data['baseUriParameters'] as $key => $baseUriParameter) { $apiDefinition->addBaseUriParameter(BaseUriParameter::createFromArray($key, $baseUriParameter)); } } if (isset($data['mediaType'])) { $apiDefinition->setDefaultMediaType($data['mediaType']); } if (isset($data['protocols'])) { foreach ($data['protocols'] as $protocol) { $apiDefinition->addProtocol($protocol); } } if (isset($data['defaultMediaType'])) { $apiDefinition->setDefaultMediaType($data['defaultMediaType']); } if (isset($data['schemas'])) { foreach ($data['schemas'] as $name => $schema) { $apiDefinition->addSchemaCollection($name, $schema); } } if (isset($data['securitySchemes'])) { foreach ($data['securitySchemes'] as $name => $securityScheme) { $apiDefinition->addSecurityScheme(SecurityScheme::createFromArray($name, $securityScheme)); } } if (isset($data['securedBy'])) { foreach ($data['securedBy'] as $securedBy) { if ($securedBy) { $apiDefinition->addSecuredBy($apiDefinition->getSecurityScheme($securedBy)); } else { $apiDefinition->addSecuredBy(SecurityScheme::createFromArray('null', [], $apiDefinition)); } } } if (isset($data['documentation'])) { foreach ($data['documentation'] as $title => $documentation) { $apiDefinition->addDocumentation($title, $documentation); } } // --- foreach ($data as $resourceName => $resource) { // check if actually a resource if (strpos($resourceName, '/') === 0) { $apiDefinition->addResource(Resource::createFromArray($resourceName, $resource, $apiDefinition)); } } return $apiDefinition; }