Merge pull request #165 from benbender/recursion-on-routecollections

Recursion on routecollections
This commit is contained in:
William Durand 2013-03-27 16:08:54 -07:00
commit 2c1386b153

View File

@ -16,7 +16,6 @@ use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use Nelmio\ApiDocBundle\Parser\ParserInterface; use Nelmio\ApiDocBundle\Parser\ParserInterface;
use Symfony\Component\Routing\Route; use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Nelmio\ApiDocBundle\Util\DocCommentExtractor; use Nelmio\ApiDocBundle\Util\DocCommentExtractor;
@ -73,7 +72,7 @@ class ApiDocExtractor
*/ */
public function getRoutes() public function getRoutes()
{ {
return $this->router->getRouteCollection()->getIterator(); return $this->router->getRouteCollection()->all();
} }
/** /**
@ -91,19 +90,23 @@ class ApiDocExtractor
* - annotation * - annotation
* - resource * - resource
* *
* @param \Traversable $routes The routes for which the annotations should be extracted * @param array $routes array of Route-objects for which the annotations should be extracted
*
* @throws \InvalidArgumentException if one element of the input isnt an instance of Route
* *
* @return array * @return array
*/ */
public function extractAnnotations(\Traversable $routes) public function extractAnnotations(array $routes)
{ {
$array = array(); $array = array();
$resources = array(); $resources = array();
foreach ($routes as $route) { foreach ($routes as $route) {
if ($route instanceof RouteCollection) { if (!$route instanceof Route) {
$array = array_merge($array, $this->extractAnnotations($route->getIterator())); throw new \InvalidArgumentException(sprintf('All elements of $routes must be instances of Route. "%s" given', gettype($route)));
} elseif ($method = $this->getReflectionMethod($route->getDefault('_controller'))) { }
if ($method = $this->getReflectionMethod($route->getDefault('_controller'))) {
if ($annotation = $this->reader->getMethodAnnotation($method, self::ANNOTATION_CLASS)) { if ($annotation = $this->reader->getMethodAnnotation($method, self::ANNOTATION_CLASS)) {
if ($annotation->isResource()) { if ($annotation->isResource()) {
// remove format from routes used for resource grouping // remove format from routes used for resource grouping