/**
  * Validate http method or verb.
  *
  * @param Route          $route
  * @param RequestContext $request
  *
  * @return bool
  */
 public function match(Route $route, RequestContext $request)
 {
     if (0 === $route->getMethod()->count()) {
         return true;
     }
     return $route->getMethod()->has($request->getMethod());
 }
 /**
  * Validate host if exists.
  *
  * @param Route          $route
  * @param RequestContext $request
  *
  * @return bool
  */
 public function match(Route $route, RequestContext $request)
 {
     if (false === $route->getDomain()->hasDomain()) {
         return true;
     }
     return (string) $route->getDomain() === $request->getHost();
 }
 /**
  * Validate schema.
  *
  * @param Route          $route
  * @param RequestContext $request
  *
  * @return bool
  */
 public function match(Route $route, RequestContext $request)
 {
     return $route->getSchema()->has($request->getSchema());
 }
 /**
  * Handle route request on router.
  *
  * @param Route|null     $route
  * @param RequestContext $request
  * @param Router         $router
  * @param RequestContext $previousRequest
  */
 public function handleRouteRequest(Route $route = null, RequestContext $request, Router $router, RequestContext $previousRequest = null)
 {
     $caller = \Closure::bind($route->getHandler(), null);
     $stmt = $caller($request->getParameter('slug'));
     $this->assertTrue(in_array($stmt, ['Page: welcome-nerd', 'Page: hello-world']));
 }
 /**
  * Validate given path pattern.
  *
  * @param Route          $route
  * @param RequestContext $request
  *
  * @return bool
  */
 public function match(Route $route, RequestContext $request)
 {
     return (bool) preg_match($route->getRegex()->getRegexPattern(), rawurldecode($request->getPath()));
 }
 /**
  * Compile string handler.
  *
  * @param Route          $route
  * @param RequestContext $request
  * @param string         $handler
  *
  * @return Response|null
  *
  * @throws HttpNotFoundException
  */
 protected function compileStringHandler(Route $route, RequestContext $request, $handler)
 {
     $parts = explode(':', $handler);
     $parameters = array_map('convert_to_camel_case', array_flip((array) $request->getParameters()));
     $parameters = array_flip($parameters);
     $action = end($parts);
     $controller = $this->buildController($handler, $parts, $parameters);
     if (!method_exists($controller->getOriginalInstance(), $action . 'Action')) {
         throw new HttpNotFoundException(sprintf('Action "%sAction" not found on controller "%s".', $action, get_class($controller->getOriginalInstance())));
     }
     return $this->dispatchMiddlewares($route, $request, function () use($parameters, $controller, $action) {
         if (!$this->responseEvent->hasResponse()) {
             return $controller->callMethod($action . 'Action', $parameters);
         }
         return $this->responseEvent->getResponse();
     }, $action);
 }
 /**
  * Generate route request by route name.
  *
  * @param string $name
  * @param array  $parameters
  *
  * @return RequestContext
  */
 public function generateRoute($name, array $parameters = array())
 {
     $route = $this->collection->get($name);
     if (null === $route) {
         throw new InvalidArgumentException(sprintf('Route with name "%s" not found.', $name));
     }
     $request = RequestContext::createFromRoute($route, $parameters);
     if (false === $this->isMatch($route, $request)) {
         throw new InvalidArgumentException(sprintf('Failed generate route with name "%s", mismatch rules.', $name));
     }
     return $request;
 }
 /**
  * Redirect response.
  *
  * @param RequestContext $context
  * @param string         $queryString
  * @param int            $delay
  *
  * @return Response\RedirectResponse
  */
 public function redirect(RequestContext $context, $queryString = '', $delay = 0)
 {
     return new Response\RedirectResponse($context->generateUrl() . $queryString, $delay);
 }