Exemplo n.º 1
0
 /**
  * @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]);
 }
Exemplo n.º 2
0
 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());
 }
Exemplo n.º 3
0
 /**
  * @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;
 }
Exemplo n.º 5
0
 /**
  * @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;
 }