mirror of
https://github.com/retailcrm/NelmioApiDocBundle.git
synced 2025-02-09 19:19:29 +03:00
Add type hints
This commit is contained in:
parent
684eb375ae
commit
d7c05edffc
@ -3,7 +3,6 @@ language: php
|
|||||||
php:
|
php:
|
||||||
- 7.0
|
- 7.0
|
||||||
- 7.1
|
- 7.1
|
||||||
- hhvm
|
|
||||||
|
|
||||||
sudo: false
|
sudo: false
|
||||||
|
|
||||||
|
@ -11,20 +11,20 @@
|
|||||||
|
|
||||||
namespace EXSyst\Bundle\ApiDocBundle;
|
namespace EXSyst\Bundle\ApiDocBundle;
|
||||||
|
|
||||||
use EXSyst\Bundle\ApiDocBundle\Extractor\ExtractorInterface;
|
use EXSyst\Bundle\ApiDocBundle\Describer\DescriberInterface;
|
||||||
use gossi\swagger\Swagger;
|
use gossi\swagger\Swagger;
|
||||||
|
|
||||||
class ApiDocGenerator
|
class ApiDocGenerator
|
||||||
{
|
{
|
||||||
private $swagger;
|
private $swagger;
|
||||||
private $extractors;
|
private $describers;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ExtractorInterface[] $extractors
|
* @param DescriberInterface[] $describers
|
||||||
*/
|
*/
|
||||||
public function __construct(array $extractors)
|
public function __construct(array $describers)
|
||||||
{
|
{
|
||||||
$this->extractors = $extractors;
|
$this->describers = $describers;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -37,8 +37,8 @@ class ApiDocGenerator
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->swagger = new Swagger();
|
$this->swagger = new Swagger();
|
||||||
foreach ($this->extractors as $extractor) {
|
foreach ($this->describers as $describer) {
|
||||||
$extractor->extractIn($this->swagger);
|
$describer->describe($this->swagger);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->swagger;
|
return $this->swagger;
|
||||||
|
@ -15,14 +15,14 @@ use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
|||||||
use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;
|
use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
|
||||||
class AddExtractorsPass implements CompilerPassInterface
|
class AddDescribersPass implements CompilerPassInterface
|
||||||
{
|
{
|
||||||
use PriorityTaggedServiceTrait;
|
use PriorityTaggedServiceTrait;
|
||||||
|
|
||||||
public function process(ContainerBuilder $container)
|
public function process(ContainerBuilder $container)
|
||||||
{
|
{
|
||||||
$extractors = $this->findAndSortTaggedServices('exsyst_api_doc.extractor', $container);
|
$describers = $this->findAndSortTaggedServices('exsyst_api_doc.describer', $container);
|
||||||
|
|
||||||
$container->getDefinition('exsyst_api_doc.generator')->replaceArgument(0, $extractors);
|
$container->getDefinition('exsyst_api_doc.generator')->replaceArgument(0, $describers);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -15,14 +15,14 @@ use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
|||||||
use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;
|
use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
|
||||||
class AddRoutingExtractorsPass implements CompilerPassInterface
|
class AddRouteDescribersPass implements CompilerPassInterface
|
||||||
{
|
{
|
||||||
use PriorityTaggedServiceTrait;
|
use PriorityTaggedServiceTrait;
|
||||||
|
|
||||||
public function process(ContainerBuilder $container)
|
public function process(ContainerBuilder $container)
|
||||||
{
|
{
|
||||||
$extractors = $this->findAndSortTaggedServices('exsyst_api_doc.routing_extractor', $container);
|
$routeDescribers = $this->findAndSortTaggedServices('exsyst_api_doc.route_describer', $container);
|
||||||
|
|
||||||
$container->getDefinition('exsyst_api_doc.extractors.routing')->replaceArgument(2, $extractors);
|
$container->getDefinition('exsyst_api_doc.describers.route')->replaceArgument(2, $routeDescribers);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,11 +9,11 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace EXSyst\Bundle\ApiDocBundle\Extractor;
|
namespace EXSyst\Bundle\ApiDocBundle\Describer;
|
||||||
|
|
||||||
use gossi\swagger\Swagger;
|
use gossi\swagger\Swagger;
|
||||||
|
|
||||||
interface ExtractorInterface
|
interface DescriberInterface
|
||||||
{
|
{
|
||||||
public function extractIn(Swagger $api);
|
public function describe(Swagger $api);
|
||||||
}
|
}
|
@ -9,7 +9,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace EXSyst\Bundle\ApiDocBundle\Extractor;
|
namespace EXSyst\Bundle\ApiDocBundle\Describer;
|
||||||
|
|
||||||
use Doctrine\Common\Util\ClassUtils;
|
use Doctrine\Common\Util\ClassUtils;
|
||||||
use EXSyst\Bundle\ApiDocBundle\Extractor\Routing\RouteExtractorInterface;
|
use EXSyst\Bundle\ApiDocBundle\Extractor\Routing\RouteExtractorInterface;
|
||||||
@ -18,25 +18,25 @@ use Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser;
|
|||||||
use Symfony\Component\Routing\Route;
|
use Symfony\Component\Routing\Route;
|
||||||
use Symfony\Component\Routing\RouterInterface;
|
use Symfony\Component\Routing\RouterInterface;
|
||||||
|
|
||||||
class RoutingExtractor implements ExtractorInterface
|
class RouteDescriber implements DescriberInterface
|
||||||
{
|
{
|
||||||
private $routeExtractors;
|
private $routeDescribers;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param RouterInterface $router
|
* @param RouterInterface $router
|
||||||
* @param ControllerNameParser $controllerNameParser
|
* @param ControllerNameParser $controllerNameParser
|
||||||
* @param RouteExtractorInterface[] $extractors
|
* @param RouteDescriberInterface[] $routeDescribers
|
||||||
*/
|
*/
|
||||||
public function __construct(RouterInterface $router, ControllerNameParser $controllerNameParser, array $routeExtractors)
|
public function __construct(RouterInterface $router, ControllerNameParser $controllerNameParser, array $routeDescribers)
|
||||||
{
|
{
|
||||||
$this->router = $router;
|
$this->router = $router;
|
||||||
$this->controllerNameParser = $controllerNameParser;
|
$this->controllerNameParser = $controllerNameParser;
|
||||||
$this->routeExtractors = $routeExtractors;
|
$this->routeDescribers = $routeDescribers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function extractIn(Swagger $swagger)
|
public function describe(Swagger $swagger)
|
||||||
{
|
{
|
||||||
if (0 === count($this->routeExtractors)) {
|
if (0 === count($this->routeDescribers)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,8 +44,8 @@ class RoutingExtractor implements ExtractorInterface
|
|||||||
// if able to resolve the controller
|
// if able to resolve the controller
|
||||||
if ($method = $this->getReflectionMethod($route->getDefault('_controller'))) {
|
if ($method = $this->getReflectionMethod($route->getDefault('_controller'))) {
|
||||||
// Extract as many informations as possible about this route
|
// Extract as many informations as possible about this route
|
||||||
foreach ($this->routeExtractors as $extractor) {
|
foreach ($this->routeDescribers as $describer) {
|
||||||
$extractor->extractIn($swagger, $route, $method);
|
$describer->describe($swagger, $route, $method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -68,7 +68,7 @@ class RoutingExtractor implements ExtractorInterface
|
|||||||
*
|
*
|
||||||
* @return \ReflectionMethod|null
|
* @return \ReflectionMethod|null
|
||||||
*/
|
*/
|
||||||
private function getReflectionMethod($controller)
|
private function getReflectionMethod(string $controller)
|
||||||
{
|
{
|
||||||
if (false === strpos($controller, '::') && 2 === substr_count($controller, ':')) {
|
if (false === strpos($controller, '::') && 2 === substr_count($controller, ':')) {
|
||||||
$controller = $this->controllerNameParser->parse($controller);
|
$controller = $this->controllerNameParser->parse($controller);
|
@ -11,8 +11,8 @@
|
|||||||
|
|
||||||
namespace EXSyst\Bundle\ApiDocBundle;
|
namespace EXSyst\Bundle\ApiDocBundle;
|
||||||
|
|
||||||
use EXSyst\Bundle\ApiDocBundle\DependencyInjection\Compiler\AddExtractorsPass;
|
use EXSyst\Bundle\ApiDocBundle\DependencyInjection\Compiler\AddDescribersPass;
|
||||||
use EXSyst\Bundle\ApiDocBundle\DependencyInjection\Compiler\AddRoutingExtractorsPass;
|
use EXSyst\Bundle\ApiDocBundle\DependencyInjection\Compiler\AddRouteDescribersPass;
|
||||||
use EXSyst\Bundle\ApiDocBundle\DependencyInjection\EXSystApiDocExtension;
|
use EXSyst\Bundle\ApiDocBundle\DependencyInjection\EXSystApiDocExtension;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||||
@ -24,8 +24,8 @@ class EXSystApiDocBundle extends Bundle
|
|||||||
*/
|
*/
|
||||||
public function build(ContainerBuilder $container)
|
public function build(ContainerBuilder $container)
|
||||||
{
|
{
|
||||||
$container->addCompilerPass(new AddExtractorsPass());
|
$container->addCompilerPass(new AddDescribersPass());
|
||||||
$container->addCompilerPass(new AddRoutingExtractorsPass());
|
$container->addCompilerPass(new AddRouteDescribersPass());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -9,27 +9,27 @@
|
|||||||
</service>
|
</service>
|
||||||
|
|
||||||
<!-- Extractors -->
|
<!-- Extractors -->
|
||||||
<service id="exsyst_api_doc.extractors.routing" class="EXSyst\Bundle\ApiDocBundle\Extractor\RoutingExtractor" public="false">
|
<service id="exsyst_api_doc.describers.route" class="EXSyst\Bundle\ApiDocBundle\Describer\RouteDescriber" public="false">
|
||||||
<argument type="service" id="router" />
|
<argument type="service" id="router" />
|
||||||
<argument type="service" id="controller_name_converter" />
|
<argument type="service" id="controller_name_converter" />
|
||||||
<argument type="collection" />
|
<argument type="collection" />
|
||||||
|
|
||||||
<tag name="exsyst_api_doc.extractor" priority="-100" />
|
<tag name="exsyst_api_doc.describer" priority="-100" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<!-- Routing Extractors -->
|
<!-- Routing Extractors -->
|
||||||
<service id="exsyst_api_doc.routing_extractors.route_metadata" class="EXSyst\Bundle\ApiDocBundle\Extractor\Routing\RouteMetadataExtractor" public="false">
|
<service id="exsyst_api_doc.route_describers.route_metadata" class="EXSyst\Bundle\ApiDocBundle\RouteDescriber\RouteMetadataDescriber" public="false">
|
||||||
<tag name="exsyst_api_doc.routing_extractor" priority="-50" />
|
<tag name="exsyst_api_doc.route_describer" priority="-50" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<service id="exsyst_api_doc.routing_extractors.php_doc" class="EXSyst\Bundle\ApiDocBundle\Extractor\Routing\PhpDocExtractor" public="false">
|
<service id="exsyst_api_doc.route_describers.php_doc" class="EXSyst\Bundle\ApiDocBundle\RouteDescriber\PhpDocDescriber" public="false">
|
||||||
<tag name="exsyst_api_doc.routing_extractor" priority="-70" />
|
<tag name="exsyst_api_doc.route_describer" priority="-70" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<service id="exsyst_api_doc.routing_extractors.nelmio_annotation" class="EXSyst\Bundle\ApiDocBundle\Extractor\Routing\NelmioAnnotationExtractor" public="false">
|
<service id="exsyst_api_doc.route_describers.nelmio_annotation" class="EXSyst\Bundle\ApiDocBundle\RouteDescriber\NelmioAnnotationDescriber" public="false">
|
||||||
<argument type="service" id="annotation_reader" />
|
<argument type="service" id="annotation_reader" />
|
||||||
|
|
||||||
<tag name="exsyst_api_doc.routing_extractor" priority="-100" />
|
<tag name="exsyst_api_doc.route_describer" priority="-100" />
|
||||||
</service>
|
</service>
|
||||||
</services>
|
</services>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace EXSyst\Bundle\ApiDocBundle\Extractor\Routing;
|
namespace EXSyst\Bundle\ApiDocBundle\RouteDescriber;
|
||||||
|
|
||||||
use Doctrine\Common\Annotations\Reader;
|
use Doctrine\Common\Annotations\Reader;
|
||||||
use gossi\swagger\Parameter;
|
use gossi\swagger\Parameter;
|
||||||
@ -17,9 +17,9 @@ use gossi\swagger\Swagger;
|
|||||||
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
|
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
|
||||||
use Symfony\Component\Routing\Route;
|
use Symfony\Component\Routing\Route;
|
||||||
|
|
||||||
class NelmioAnnotationExtractor implements RouteExtractorInterface
|
class NelmioAnnotationDescriber implements RouteDescriberInterface
|
||||||
{
|
{
|
||||||
use RouteExtractorTrait;
|
use RouteDescriberTrait;
|
||||||
|
|
||||||
private $annotationReader;
|
private $annotationReader;
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ class NelmioAnnotationExtractor implements RouteExtractorInterface
|
|||||||
$this->annotationReader = $annotationReader;
|
$this->annotationReader = $annotationReader;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function extractIn(Swagger $api, Route $route, \ReflectionMethod $reflectionMethod)
|
public function describe(Swagger $api, Route $route, \ReflectionMethod $reflectionMethod)
|
||||||
{
|
{
|
||||||
$annotation = $this->annotationReader->getMethodAnnotation($reflectionMethod, ApiDoc::class);
|
$annotation = $this->annotationReader->getMethodAnnotation($reflectionMethod, ApiDoc::class);
|
||||||
if (null === $annotation) {
|
if (null === $annotation) {
|
@ -9,16 +9,16 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace EXSyst\Bundle\ApiDocBundle\Extractor\Routing;
|
namespace EXSyst\Bundle\ApiDocBundle\RouteDescriber;
|
||||||
|
|
||||||
use gossi\swagger\Swagger;
|
use gossi\swagger\Swagger;
|
||||||
use phpDocumentor\Reflection\DocBlockFactory;
|
use phpDocumentor\Reflection\DocBlockFactory;
|
||||||
use phpDocumentor\Reflection\DocBlockFactoryInterface;
|
use phpDocumentor\Reflection\DocBlockFactoryInterface;
|
||||||
use Symfony\Component\Routing\Route;
|
use Symfony\Component\Routing\Route;
|
||||||
|
|
||||||
class PhpDocExtractor implements RouteExtractorInterface
|
class PhpDocDescriber implements RouteDescriberInterface
|
||||||
{
|
{
|
||||||
use RouteExtractorTrait;
|
use RouteDescriberTrait;
|
||||||
|
|
||||||
private $docBlockFactory;
|
private $docBlockFactory;
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ class PhpDocExtractor implements RouteExtractorInterface
|
|||||||
$this->docBlockFactory = $docBlockFactory;
|
$this->docBlockFactory = $docBlockFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function extractIn(Swagger $api, Route $route, \ReflectionMethod $reflectionMethod)
|
public function describe(Swagger $api, Route $route, \ReflectionMethod $reflectionMethod)
|
||||||
{
|
{
|
||||||
$classDocBlock = null;
|
$classDocBlock = null;
|
||||||
$docBlock = null;
|
$docBlock = null;
|
@ -9,12 +9,12 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace EXSyst\Bundle\ApiDocBundle\Extractor\Routing;
|
namespace EXSyst\Bundle\ApiDocBundle\RouteDescriber;
|
||||||
|
|
||||||
use gossi\swagger\Swagger;
|
use gossi\swagger\Swagger;
|
||||||
use Symfony\Component\Routing\Route;
|
use Symfony\Component\Routing\Route;
|
||||||
|
|
||||||
interface RouteExtractorInterface
|
interface RouteDescriberInterface
|
||||||
{
|
{
|
||||||
public function extractIn(Swagger $api, Route $route, \ReflectionMethod $reflectionMethod);
|
public function describe(Swagger $api, Route $route, \ReflectionMethod $reflectionMethod);
|
||||||
}
|
}
|
@ -9,7 +9,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace EXSyst\Bundle\ApiDocBundle\Extractor\Routing;
|
namespace EXSyst\Bundle\ApiDocBundle\RouteDescriber;
|
||||||
|
|
||||||
use gossi\swagger\Operation;
|
use gossi\swagger\Operation;
|
||||||
use gossi\swagger\Swagger;
|
use gossi\swagger\Swagger;
|
||||||
@ -18,7 +18,7 @@ use Symfony\Component\Routing\Route;
|
|||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
trait RouteExtractorTrait
|
trait RouteDescriberTrait
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
@ -9,16 +9,16 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace EXSyst\Bundle\ApiDocBundle\Extractor\Routing;
|
namespace EXSyst\Bundle\ApiDocBundle\RouteDescriber;
|
||||||
|
|
||||||
use gossi\swagger\Swagger;
|
use gossi\swagger\Swagger;
|
||||||
use Symfony\Component\Routing\Route;
|
use Symfony\Component\Routing\Route;
|
||||||
|
|
||||||
class RouteMetadataExtractor implements RouteExtractorInterface
|
class RouteMetadataDescriber implements RouteDescriberInterface
|
||||||
{
|
{
|
||||||
use RouteExtractorTrait;
|
use RouteDescriberTrait;
|
||||||
|
|
||||||
public function extractIn(Swagger $api, Route $route, \ReflectionMethod $reflectionMethod)
|
public function describe(Swagger $api, Route $route, \ReflectionMethod $reflectionMethod)
|
||||||
{
|
{
|
||||||
foreach ($this->getOperations($api, $route) as $operation) {
|
foreach ($this->getOperations($api, $route) as $operation) {
|
||||||
$operation->getSchemes()->addAll($route->getSchemes());
|
$operation->getSchemes()->addAll($route->getSchemes());
|
Loading…
x
Reference in New Issue
Block a user