AbstractFactory::create()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 6
nc 2
nop 1
1
<?php
2
3
namespace Dafiti\Silex\Response;
4
5
use Dafiti\Silex\Exception\InvalidResponse;
6
use Symfony\Component\HttpFoundation;
7
8
abstract class AbstractFactory
9
{
10
    /**
11
     * @var string
12
     */
13
    protected $contentType;
14
15
    /**
16
     * @var bool
17
     */
18
    private $hasError;
19
20
    /**
21
     * @param string $contentType
22
     */
23
    public function __construct($contentType)
24
    {
25
        $this->contentType = $contentType;
26
        $this->hasError = false;
27
    }
28
29
    /**
30
     * @param int $statusCode
31
     *
32
     * @return bool
33
     */
34
    protected function isError($statusCode)
35
    {
36
        $successStatus = [
37
            HttpFoundation\Response::HTTP_OK,
38
            HttpFoundation\Response::HTTP_CREATED,
39
            HttpFoundation\Response::HTTP_ACCEPTED,
40
            HttpFoundation\Response::HTTP_NO_CONTENT,
41
        ];
42
43
        if (in_array($statusCode, $successStatus)) {
44
            return false;
45
        }
46
47
        return true;
48
    }
49
50
    /**
51
     * @param \Dafiti\Silex\Response $controllerResponse
52
     *
53
     * @return HttpFoundation\Response
54
     *
55
     * @throws InvalidResponse
56
     */
57
    public function create(\Dafiti\Silex\Response $controllerResponse)
58
    {
59
        $controllerResponse = $this->decorateControllerResponse($controllerResponse);
60
61
        $response = $this->transform($controllerResponse);
62
63
        if (!$response instanceof HttpFoundation\Response) {
64
            throw new InvalidResponse();
65
        }
66
67
        return $response;
68
    }
69
70
    /**
71
     * @param \Dafiti\Silex\Response $controllerResponse
72
     *
73
     * @return \Dafiti\Silex\Response
74
     */
75
    private function decorateControllerResponse(\Dafiti\Silex\Response $controllerResponse)
76
    {
77
        if ($this->isError($controllerResponse->getStatusCode())) {
78
            $this->hasError = true;
79
80
            return $this->decorateErrorMessage($controllerResponse);
81
        }
82
83
        return $controllerResponse;
84
    }
85
86
    /**
87
     * @param \Dafiti\Silex\Response $controllerResponse
88
     *
89
     * @return \Dafiti\Silex\Response
90
     */
91
    private function decorateErrorMessage(\Dafiti\Silex\Response $controllerResponse)
92
    {
93
        $message = HttpFoundation\Response::$statusTexts[$controllerResponse->getStatusCode()];
94
95
        if (!is_null($controllerResponse->getErrorMessage())) {
96
            $message = $controllerResponse->getErrorMessage();
97
        }
98
99
        $controllerResponse->setErrorMessage($message);
100
101
        return $controllerResponse;
102
    }
103
104
    /**
105
     * @return bool
106
     */
107
    protected function hasError()
108
    {
109
        return $this->hasError;
110
    }
111
112
    /**
113
     * @param \Dafiti\Silex\Response $controllerResponse $response
114
     *
115
     * @return HttpFoundation\Response
116
     */
117
    abstract protected function transform(\Dafiti\Silex\Response $controllerResponse);
118
}
119