/** * @param array $documentation * * @return array */ public function create(array $documentation) { $apiDoc = new ApiDoc($documentation); if (array_key_exists('route', $documentation) === true) { $apiDoc->setRoute($this->router->getRouteCollection()->get($documentation['route'])); } return array(self::KEY_ANNOTATION => $apiDoc, self::KEY_RESOURCE => $documentation[self::KEY_RESOURCE]); }
public function testSetRoute() { $route = new Route('/path/{foo}', ['foo' => 'bar', 'nested' => ['key1' => 'value1', 'key2' => 'value2']], [], [], '{foo}.awesome_host.com'); $apiDoc = new ApiDoc([]); $apiDoc->setRoute($route); $this->assertSame($route, $apiDoc->getRoute()); $this->assertEquals('bar.awesome_host.com', $apiDoc->getHost()); $this->assertEquals('ANY', $apiDoc->getMethod()); }
/** * @param ApiDoc $doc * @return Route */ public function setDoc($doc) { $this->doc = $doc; $this->doc->setRoute($this); return $this; }
/** * Builds ApiDoc annotation from DunglasApiBundle data. * * @param bool $collection * @param ResourceInterface $resource * @param OperationInterface $operation * @param array $resourceHydraDoc * @param array $entrypointHydraDoc * * @return ApiDoc */ private function getApiDoc($collection, ResourceInterface $resource, OperationInterface $operation, array $resourceHydraDoc, array $entrypointHydraDoc = []) { $method = $operation->getRoute()->getMethods()[0]; if ($collection) { $operationHydraDoc = $this->getCollectionOperationHydraDoc($resource->getShortName(), $method, $entrypointHydraDoc); } else { $operationHydraDoc = $this->getOperationHydraDoc($operation->getRoute()->getMethods()[0], $resourceHydraDoc); } $route = $operation->getRoute(); $data = ['resource' => $route->getPath(), 'description' => $operationHydraDoc['hydra:title'], 'resourceDescription' => $resourceHydraDoc['hydra:title'], 'section' => $resourceHydraDoc['hydra:title']]; $entityClass = $resource->getEntityClass(); if (isset($operationHydraDoc['expects']) && 'owl:Nothing' !== $operationHydraDoc['expects']) { $data['input'] = sprintf('%s:%s', DunglasApiParser::IN_PREFIX, $entityClass); } if (isset($operationHydraDoc['returns']) && 'owl:Nothing' !== $operationHydraDoc['returns']) { $data['output'] = sprintf('%s:%s', DunglasApiParser::OUT_PREFIX, $entityClass); } if (Request::METHOD_GET === $method && $collection) { $data['filters'] = []; foreach ($resource->getFilters() as $filter) { foreach ($filter->getDescription($resource) as $name => $definition) { $data['filters'][] = ['name' => $name] + $definition; } } } $apiDoc = new ApiDoc($data); $apiDoc->setRoute($route); return $apiDoc; }
/** * @param $resource * @param ApiDoc $annotation * @param Resource|Resource $dunglasResource * @param Route $route * @return ApiDoc */ private function addFilters($resource, ApiDoc $annotation, Resource $dunglasResource, Route $route) { $data = $annotation->toArray(); $tags = isset($data['tags']) ? $data['tags'] : []; //filter embed if ('DELETE' !== $annotation->getMethod()) { $availableIncludes = $this->transformerHelper->getAvailableIncludes($resource); $defaultIncludes = $this->transformerHelper->getDefaultIncludes($resource); if (false === array_key_exists('embed', $tags)) { $annotation->addFilter('embed', ['requirement' => '\\t', 'description' => 'Include resources within other resources.', 'available' => is_array($availableIncludes) ? implode(',', $availableIncludes) : $availableIncludes, 'default' => is_array($defaultIncludes) ? implode(',', $defaultIncludes) : $defaultIncludes]); } else { unset($data['requirements']['embed']); $data['tags']['embed'] = "#298A08"; $path = explode('/', $route->getPath()); $embed = array_pop($path); $singularize = Inflector::singularize($embed); if ($embed !== $singularize) { $data['tags']['collection'] = "#0040FF"; } foreach ($data['requirements'] as $key => $value) { $data['requirements'][$key] = array_merge(['name' => $key], $value); } $annotation = new ApiDoc($data); $routeClone = clone $route; $annotation->setRoute($routeClone); $tags = isset($annotation->toArray()['tags']) ? $annotation->toArray()['tags'] : []; } } if (false !== array_key_exists('collection', $tags)) { foreach ($dunglasResource->getFilters() as $filter) { foreach ($filter->getDescription($dunglasResource) as $key => $value) { $annotation->addFilter($key, ['type' => isset($value['type']) ? $value['type'] : 'string', 'requirement' => isset($value['requirement']) ? $value['requirement'] : '[a-zA-Z0-9-]+', 'description' => isset($value['description']) ? $value['description'] : $key . ' filter', 'default' => '']); } } //filter perpage $annotation->addFilter('perpage', ['requirement' => '\\d+', 'description' => 'How many object return per page.', 'default' => 10]); //filter perpage $annotation->addFilter('page', ['requirement' => '\\d+', 'description' => 'How many page start to return.', 'default' => 1]); } return $annotation; }