public function process(Request $request)
    {
        $result = new Result;

        $stage = static::STAGE_FILTER;

        foreach ($this->processors as $processor)
        {
            if ($processor['stage'] < $stage)
                continue;

            $stage = $processor['stage'];
            $processor = $processor['processor'];
            try
            {
                $processor->process($request, $result);
            }
            catch (Response\Response $response)
            {
                $result->setResponse($response);
                $stage = static::STAGE_POSTPROCESS;
            }
        }

        return $result;
    }