/**
  * @param ApiResource $apiResource
  * @param RouteCollection $routes
  * @param ApiResource $parentResource
  */
 private function addRoute(ApiResource $apiResource, RouteCollection $routes, $parentResource = null)
 {
     foreach ($apiResource->getActions() as $action) {
         if (!$parentResource && !$apiResource->isMainResource()) {
             continue;
         }
         $route = new Route($this->getUrl($action, $parentResource));
         $route->setDefault('_api_resource', $apiResource->getName())->setDefault('_controller', $action->getControllerAction())->setDefault('_entity', $apiResource->getEntityClass())->setDefault('_security', $this->expressionsToSecurity($action->getSecurityExpression()))->setDefault('_identifier', $apiResource->getIdentifier())->setMethods($action->getMethods());
         if ($action instanceof Index) {
             $route->setDefault('_indexGetterMethod', $action->getResourceGetterMethod());
             $route->setDefault('_limit', $action->getDefaultLimit());
         }
         $routes->add($action->getRouteName($parentResource), $route);
     }
     foreach ($apiResource->getSubResources() as $subResource) {
         $this->addRoute($subResource, $routes, $apiResource);
     }
 }
 /**
  * @param ApiResource $resource
  * @return string
  */
 public static function getFilterName(ApiResource $resource)
 {
     return $resource->getBundlePrefix() . '_' . $resource->getName();
 }
 /**
  * Get the name of a route action
  *
  * @param ApiResource $parentResource
  * @return string
  */
 public function getRouteName(ApiResource $parentResource = null)
 {
     $parentResourceName = $parentResource ? '.' . $parentResource->getName() : '';
     return $this->apiResource->getBundlePrefix() . $parentResourceName . '.' . $this->apiResource->getName() . '.' . $this->action;
 }
 /**
  * @param ApiResource $resource
  * @param Route $route
  * @return string
  */
 private function getDescription(ApiResource $resource, Route $route)
 {
     $description = '';
     $name = $resource->getName();
     $action = $resource->getActions()->getActionForRoute($route);
     switch (get_class($action)) {
         case Index::class:
             $description = 'List all ' . Inflector::pluralize($name);
             break;
         case Show::class:
             $description = 'Get a single ' . Inflector::singularize($name);
             break;
         case Create::class:
             $description = 'Create a new ' . Inflector::singularize($name);
             break;
         case Update::class:
             $description = 'Update a ' . Inflector::singularize($name);
             break;
         case BatchUpdate::class:
             $description = 'Update multiple ' . Inflector::pluralize($name);
             break;
         case Delete::class:
             $description = 'Delete a ' . Inflector::singularize($name);
             break;
         case BatchDelete::class:
             $description = 'Delete multiple ' . Inflector::pluralize($name);
             break;
         default:
             @trigger_error('Action was not defined');
             break;
     }
     return $description;
 }
 /** @test */
 public function it_returns_the_resource_name()
 {
     $this->assertEquals('posts', $this->config->getName());
 }