From 76b85938c6c8683e1ab28265e1f23aea2b4c190c Mon Sep 17 00:00:00 2001 From: fvilpoix Date: Tue, 16 Apr 2013 13:46:15 +0200 Subject: [PATCH] implementing all stof comments :) --- .../ExtractorHandlerCompilerPass.php | 37 +++++++++++++++++++ DependencyInjection/NelmioApiDocExtension.php | 13 ------- Extractor/ApiDocExtractor.php | 5 +-- Extractor/Handler/EmptyHandler.php | 22 ----------- ...eryParamHandler.php => FosRestHandler.php} | 17 +++++++-- .../Handler/FosRestRequestParamHandler.php | 34 ----------------- ...andler.php => JmsSecurityExtraHandler.php} | 7 ++-- ...er.php => SensioFrameworkExtraHandler.php} | 7 ++-- Extractor/HandlerInterface.php | 4 +- NelmioApiDocBundle.php | 2 + Resources/config/services.xml | 17 +++------ 11 files changed, 71 insertions(+), 94 deletions(-) create mode 100644 DependencyInjection/ExtractorHandlerCompilerPass.php delete mode 100644 Extractor/Handler/EmptyHandler.php rename Extractor/Handler/{FosRestQueryParamHandler.php => FosRestHandler.php} (58%) delete mode 100644 Extractor/Handler/FosRestRequestParamHandler.php rename Extractor/Handler/{JmsSecurityExtraSecureHandler.php => JmsSecurityExtraHandler.php} (72%) rename Extractor/Handler/{SensioFrameworkExtraCacheHandler.php => SensioFrameworkExtraHandler.php} (72%) diff --git a/DependencyInjection/ExtractorHandlerCompilerPass.php b/DependencyInjection/ExtractorHandlerCompilerPass.php new file mode 100644 index 0000000..6e7a697 --- /dev/null +++ b/DependencyInjection/ExtractorHandlerCompilerPass.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Nelmio\ApiDocBundle\DependencyInjection; + +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; +use Symfony\Component\DependencyInjection\Reference; + + +class ExtractorHandlerCompilerPass implements CompilerPassInterface +{ + /** + * {@inheritDoc} + */ + public function process(ContainerBuilder $container) + { + $handlers = array(); + foreach ($container->findTaggedServiceIds('nelmio_api_doc.extractor.handler') as $id => $attributes) { + + // Adding handlers from tagged services + $handlers[] = new Reference($id); + } + $definition = $container->getDefinition( + 'nelmio_api_doc.extractor.api_doc_extractor' + ); + $definition->replaceArgument(4, $handlers); + } +} diff --git a/DependencyInjection/NelmioApiDocExtension.php b/DependencyInjection/NelmioApiDocExtension.php index 9c04b28..6298f78 100644 --- a/DependencyInjection/NelmioApiDocExtension.php +++ b/DependencyInjection/NelmioApiDocExtension.php @@ -49,18 +49,5 @@ class NelmioApiDocExtension extends Extension if (isset($config['sandbox']['authentication'])) { $container->setParameter('nelmio_api_doc.sandbox.authentication', $config['sandbox']['authentication']); } - - // Adding handlers from tagged services - $definition = $container->getDefinition( - 'nelmio_api_doc.extractor.api_doc_extractor' - ); - $taggedServices = $container->findTaggedServiceIds( - 'nelmio_api_doc.extractor.handler' - ); - $handlers = array(); - foreach ($taggedServices as $id => $attributes) { - $handlers[] = new Reference($id); - } - $definition->replaceArgument(4, $handlers); } } diff --git a/Extractor/ApiDocExtractor.php b/Extractor/ApiDocExtractor.php index 6682e39..91c41d8 100644 --- a/Extractor/ApiDocExtractor.php +++ b/Extractor/ApiDocExtractor.php @@ -19,7 +19,6 @@ use Symfony\Component\Routing\RouterInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Request; use Nelmio\ApiDocBundle\Util\DocCommentExtractor; -use Nelmio\ApiDocBundle\Extractor\Handler\HandlerInterface; class ApiDocExtractor { @@ -55,7 +54,7 @@ class ApiDocExtractor */ protected $handlers; - public function __construct(ContainerInterface $container, RouterInterface $router, Reader $reader, DocCommentExtractor $commentExtractor, $handlers) + public function __construct(ContainerInterface $container, RouterInterface $router, Reader $reader, DocCommentExtractor $commentExtractor, array $handlers) { $this->container = $container; $this->router = $router; @@ -360,7 +359,7 @@ class ApiDocExtractor { $annots = $this->reader->getMethodAnnotations($method); foreach ($this->handlers as $handler) { - $handler->handle($annotation, $annots); + $handler->handle($annotation, $annots, $route, $method); } } } diff --git a/Extractor/Handler/EmptyHandler.php b/Extractor/Handler/EmptyHandler.php deleted file mode 100644 index 1b1f958..0000000 --- a/Extractor/Handler/EmptyHandler.php +++ /dev/null @@ -1,22 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Nelmio\ApiDocBundle\Extractor\Handler; - -use Nelmio\ApiDocBundle\Extractor\HandlerInterface; -use \Nelmio\ApiDocBundle\Annotation\ApiDoc; - -class EmptyHandler implements HandlerInterface -{ - public function handle(ApiDoc $annotation, $annotations) - { - } -} diff --git a/Extractor/Handler/FosRestQueryParamHandler.php b/Extractor/Handler/FosRestHandler.php similarity index 58% rename from Extractor/Handler/FosRestQueryParamHandler.php rename to Extractor/Handler/FosRestHandler.php index bcbf9db..8ad2602 100644 --- a/Extractor/Handler/FosRestQueryParamHandler.php +++ b/Extractor/Handler/FosRestHandler.php @@ -12,16 +12,25 @@ namespace Nelmio\ApiDocBundle\Extractor\Handler; use Nelmio\ApiDocBundle\Extractor\HandlerInterface; -use \Nelmio\ApiDocBundle\Annotation\ApiDoc; +use Nelmio\ApiDocBundle\Annotation\ApiDoc; +use Symfony\Component\Routing\Route; -class FosRestQueryParamHandler implements HandlerInterface +class FosRestHandler implements HandlerInterface { + const FOS_REST_REQUEST_PARAM_CLASS = 'FOS\\RestBundle\\Controller\\Annotations\\RequestParam'; const FOS_REST_QUERY_PARAM_CLASS = 'FOS\\RestBundle\\Controller\\Annotations\\QueryParam'; - public function handle(ApiDoc $annotation, $annotations) + public function handle(ApiDoc $annotation, $annotations, Route $route, \ReflectionMethod $method) { foreach ($annotations as $annot) { - if (is_a($annot, self::FOS_REST_QUERY_PARAM_CLASS)) { + if (is_a($annot, self::FOS_REST_REQUEST_PARAM_CLASS)) { + $annotation->addParameter($annot->name, array( + 'required' => $annot->strict && $annot->default === null, + 'dataType' => $annot->requirements, + 'description' => $annot->description, + 'readonly' => false + )); + } elseif (is_a($annot, self::FOS_REST_QUERY_PARAM_CLASS)) { if ($annot->strict && $annot->default === null) { $annotation->addRequirement($annot->name, array( 'requirement' => $annot->requirements, diff --git a/Extractor/Handler/FosRestRequestParamHandler.php b/Extractor/Handler/FosRestRequestParamHandler.php deleted file mode 100644 index 1260bd4..0000000 --- a/Extractor/Handler/FosRestRequestParamHandler.php +++ /dev/null @@ -1,34 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Nelmio\ApiDocBundle\Extractor\Handler; - -use Nelmio\ApiDocBundle\Extractor\HandlerInterface; -use \Nelmio\ApiDocBundle\Annotation\ApiDoc; - -class FosRestRequestParamHandler implements HandlerInterface -{ - const FOS_REST_REQUEST_PARAM_CLASS = 'FOS\\RestBundle\\Controller\\Annotations\\RequestParam'; - - public function handle(ApiDoc $annotation, $annotations) - { - foreach ($annotations as $annot) { - if (is_a($annot, self::FOS_REST_REQUEST_PARAM_CLASS)) { - $annotation->addParameter($annot->name, array( - 'required' => $annot->strict && $annot->default === null, - 'dataType' => $annot->requirements, - 'description' => $annot->description, - 'readonly' => false - )); - } - } - } -} diff --git a/Extractor/Handler/JmsSecurityExtraSecureHandler.php b/Extractor/Handler/JmsSecurityExtraHandler.php similarity index 72% rename from Extractor/Handler/JmsSecurityExtraSecureHandler.php rename to Extractor/Handler/JmsSecurityExtraHandler.php index 1110ee1..6dfca7a 100644 --- a/Extractor/Handler/JmsSecurityExtraSecureHandler.php +++ b/Extractor/Handler/JmsSecurityExtraHandler.php @@ -12,13 +12,14 @@ namespace Nelmio\ApiDocBundle\Extractor\Handler; use Nelmio\ApiDocBundle\Extractor\HandlerInterface; -use \Nelmio\ApiDocBundle\Annotation\ApiDoc; +use Nelmio\ApiDocBundle\Annotation\ApiDoc; +use Symfony\Component\Routing\Route; -class JmsSecurityExtraSecureHandler implements HandlerInterface +class JmsSecurityExtraHandler implements HandlerInterface { const JMS_SECURITY_EXTRA_SECURE_CLASS = 'JMS\\SecurityExtraBundle\\Annotation\\Secure'; - public function handle(ApiDoc $annotation, $annotations) + public function handle(ApiDoc $annotation, $annotations, Route $route, \ReflectionMethod $method) { foreach ($annotations as $annot) { if (is_a($annot, self::JMS_SECURITY_EXTRA_SECURE_CLASS)) { diff --git a/Extractor/Handler/SensioFrameworkExtraCacheHandler.php b/Extractor/Handler/SensioFrameworkExtraHandler.php similarity index 72% rename from Extractor/Handler/SensioFrameworkExtraCacheHandler.php rename to Extractor/Handler/SensioFrameworkExtraHandler.php index 1b22d86..e92f143 100644 --- a/Extractor/Handler/SensioFrameworkExtraCacheHandler.php +++ b/Extractor/Handler/SensioFrameworkExtraHandler.php @@ -12,13 +12,14 @@ namespace Nelmio\ApiDocBundle\Extractor\Handler; use Nelmio\ApiDocBundle\Extractor\HandlerInterface; -use \Nelmio\ApiDocBundle\Annotation\ApiDoc; +use Nelmio\ApiDocBundle\Annotation\ApiDoc; +use Symfony\Component\Routing\Route; -class SensioFrameworkExtraCacheHandler implements HandlerInterface +class SensioFrameworkExtraHandler implements HandlerInterface { const CACHE_ANNOTATION_CLASS = 'Sensio\\Bundle\\FrameworkExtraBundle\\Configuration\\Cache'; - public function handle(ApiDoc $annotation, $annotations) + public function handle(ApiDoc $annotation, $annotations, Route $route, \ReflectionMethod $method) { foreach ($annotations as $annot) { if (is_a($annot, self::CACHE_ANNOTATION_CLASS)) { diff --git a/Extractor/HandlerInterface.php b/Extractor/HandlerInterface.php index bedf2ff..00557e1 100644 --- a/Extractor/HandlerInterface.php +++ b/Extractor/HandlerInterface.php @@ -13,7 +13,9 @@ namespace Nelmio\ApiDocBundle\Extractor; use Nelmio\ApiDocBundle\Annotation\ApiDoc; +use Symfony\Component\Routing\Route; + interface HandlerInterface { - public function handle(ApiDoc $annotation, $annotations); + public function handle(ApiDoc $annotation, $annotations, Route $route, \ReflectionMethod $method); } diff --git a/NelmioApiDocBundle.php b/NelmioApiDocBundle.php index ad9a5ce..c165888 100644 --- a/NelmioApiDocBundle.php +++ b/NelmioApiDocBundle.php @@ -6,6 +6,7 @@ use Symfony\Component\HttpKernel\Bundle\Bundle; use Symfony\Component\DependencyInjection\ContainerBuilder; use Nelmio\ApiDocBundle\DependencyInjection\RegisterJmsParserPass; use Nelmio\ApiDocBundle\DependencyInjection\RegisterExtractorParsersPass; +use Nelmio\ApiDocBundle\DependencyInjection\ExtractorHandlerCompilerPass; class NelmioApiDocBundle extends Bundle { @@ -15,5 +16,6 @@ class NelmioApiDocBundle extends Bundle $container->addCompilerPass(new RegisterJmsParserPass()); $container->addCompilerPass(new RegisterExtractorParsersPass()); + $container->addCompilerPass(new ExtractorHandlerCompilerPass()); } } diff --git a/Resources/config/services.xml b/Resources/config/services.xml index c53998c..2c15d31 100644 --- a/Resources/config/services.xml +++ b/Resources/config/services.xml @@ -9,10 +9,9 @@ Nelmio\ApiDocBundle\Twig\Extension\MarkdownExtension Nelmio\ApiDocBundle\Util\DocCommentExtractor - Nelmio\ApiDocBundle\Extractor\Handler\FosRestQueryParamHandler - Nelmio\ApiDocBundle\Extractor\Handler\FosRestRequestParamHandler - Nelmio\ApiDocBundle\Extractor\Handler\JmsSecurityExtraSecureHandler - Nelmio\ApiDocBundle\Extractor\Handler\SensioFrameworkExtraCacheHandler + Nelmio\ApiDocBundle\Extractor\Handler\FosRestHandler + Nelmio\ApiDocBundle\Extractor\Handler\JmsSecurityExtraHandler + Nelmio\ApiDocBundle\Extractor\Handler\SensioFrameworkExtraHandler @@ -36,19 +35,15 @@ - + - + - - - - - +