Completed
Pull Request — master (#46)
by
unknown
05:21
created

Builder::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 2
1
<?php
2
3
namespace Coduo\TuTu\Response;
4
5
use Coduo\TuTu\Config\Element;
6
use Coduo\TuTu\Request\Path\Parser;
7
use Symfony\Component\HttpFoundation\Request;
8
use Symfony\Component\HttpFoundation\Response;
9
10
class Builder
11
{
12
    /**
13
     * @var \Twig_Environment
14
     */
15
    private $twig;
16
17
    /**
18
     * @var \Coduo\TuTu\Request\Path\Parser
19
     */
20
    private $requestParser;
21
22
    public function __construct(\Twig_Environment $twig, Parser $requestParser)
23
    {
24
        $this->twig = $twig;
25
        $this->requestParser = $requestParser;
26
    }
27
28
    /**
29
     * @param Element $config
30
     * @param Request $request
31
     * @return Response
32
     */
33
    public function build(Element $config, Request $request)
34
    {
35
        $content = $this->twig->render($config->getResponse()->getContent(), [
36
            'request' => $request,
37
            'path' => $this->requestParser->extractPlaceholders($request, $config->getRequest()->getPath())
38
        ]);
39
40
        return new Response($content, $config->getResponse()->getStatus(), $config->getResponse()->getHeaders());
41
    }
42
43
    /**
44
     * @param Request $request
45
     * @return Response
46
     */
47
    public function buildForMismatch(Request $request)
48
    {
49
        $content = sprintf('TuTu don\'t know how to response for "%s" "%s" request :(', $request->getMethod(), $request->getRequestUri());
50
        return new Response(
51
            $content,
52
            404,
53
            ['TuTu-Error' => 'Request mismatch']
54
        );
55
    }
56
57
    /**
58
     * @param \Exception $exception
59
     * @return Response
60
     */
61
    public function buildForException(\Exception $exception)
62
    {
63
        $content = sprintf('There was a internal server error with message: %s', $exception->getMessage());
64
        return new Response(
65
            $content,
66
            500,
67
            ['TuTu-Error' => 'Internal']
68
        );
69
    }
70
}
71