ResponseContextAbstract::hasHttpError()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 2
nc 2
nop 0
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace GinoPane\NanoRest\Response;
4
5
use GinoPane\NanoHttpStatus\NanoHttpStatus;
6
7
use GinoPane\NanoRest\{
8
    Exceptions\ResponseContextException, Request\RequestContext, Supplemental\HeadersProperty
9
};
10
11
/**
12
 * Class ResponseContext
13
 *
14
 */
15
abstract class ResponseContextAbstract
16
{
17
    /**
18
     * Constant for JSON response type
19
     */
20
    const RESPONSE_TYPE_JSON = "JSON";
21
22
    /**
23
     * Stored raw content
24
     *
25
     * @var string|null
26
     */
27
    protected $content = null;
28
29
    /**
30
     * Response status code
31
     *
32
     * @var int
33
     */
34
    protected $httpStatusCode;
35
36
    /**
37
     * Request context that was used for request
38
     *
39
     * @var RequestContext
40
     */
41
    protected $requestContext = null;
42
43
    /**
44
     * Get raw result data
45
     *
46
     * @param array $options
47
     *
48
     * @return string|null
49
     */
50
    abstract public function getRaw(array $options = array()): ?string;
51
52
    /**
53
     * Get result data as array
54
     *
55
     * @param array $options
56
     *
57
     * @return array
58
     */
59
    abstract public function getArray(array $options = array()): array;
60
61
    /**
62
     * Get result data as object
63
     *
64
     * @param array $options
65
     *
66
     * @return object|null
67
     */
68
    abstract public function getObject(array $options = array());
69
70
    /**
71
     * Makes sure that $content is valid for this AbstractResponseContext instance
72
     *
73
     * @param string $content
74
     *
75
     * @throws ResponseContextException
76
     *
77
     * @return bool
78
     */
79
    abstract protected function assertIsValid(string $content): bool;
80
81
    /**
82
     * String representation of response for debug purposes
83
     *
84
     * @return string
85
     */
86
    abstract public function __toString();
87
88
    use HeadersProperty;
89
90
    /**
91
     * ResponseContext constructor
92
     *
93
     * @param string|null $content
94
     *
95
     * @throws ResponseContextException
96
     */
97
    public function __construct(string $content = null)
98
    {
99
        $this->setContent($content);
100
    }
101
102
    /**
103
     * Set result content.
104
     *
105
     * @param string $content
106
     *
107
     * @throws ResponseContextException
108
     *
109
     * @return ResponseContextAbstract
110
     */
111
    public function setContent(string $content = null): ResponseContextAbstract
112
    {
113
        if (is_null($content)) {
114
            return $this;
115
        }
116
117
        $this->assertIsValid($content);
118
119
        $this->content = $content;
120
121
        return $this;
122
    }
123
124
    /**
125
     * Get response content
126
     *
127
     * @return null|string
128
     */
129
    public function getContent(): ?string
130
    {
131
        return $this->content;
132
    }
133
134
    /**
135
     * Get HTTP status code from response
136
     *
137
     * @return int
138
     */
139
    public function getHttpStatusCode(): int
140
    {
141
        return $this->httpStatusCode;
142
    }
143
144
    /**
145
     * Get HTTP status message from response
146
     *
147
     * @return string
148
     */
149
    public function getHttpStatusMessage(): string
150
    {
151
        return (new NanoHttpStatus())->getMessage($this->httpStatusCode);
152
    }
153
    /**
154
     * Set HTTP status code for response
155
     *
156
     * @param int|string $httpStatusCode
157
     *
158
     * @return ResponseContextAbstract
159
     */
160
    public function setHttpStatusCode(int $httpStatusCode): ResponseContextAbstract
161
    {
162
        $this->httpStatusCode = $httpStatusCode;
163
164
        return $this;
165
    }
166
167
    /**
168
     * Set request context that is being used for request
169
     *
170
     * @param RequestContext $request
171
     *
172
     * @return ResponseContextAbstract
173
     */
174
    public function setRequestContext(RequestContext $request): ResponseContextAbstract
175
    {
176
        $this->requestContext = $request;
177
178
        return $this;
179
    }
180
181
    /**
182
     * Get request context for this request
183
     *
184
     * @return RequestContext
185
     */
186
    public function getRequestContext()
187
    {
188
        return $this->requestContext ?: new RequestContext();
189
    }
190
191
    /**
192
     * Returns if current response context has HTTP error status code set
193
     *
194
     * @return bool
195
     */
196
    public function hasHttpError(): bool
197
    {
198
        $httpStatus = new NanoHttpStatus();
199
200
        return $httpStatus->isClientError($this->httpStatusCode) || $httpStatus->isServerError($this->httpStatusCode);
201
    }
202
203
    /**
204
     * Create response context instance
205
     *
206
     * @param string $type
207
     * @param string|null $content
208
     *
209
     * @return ResponseContextAbstract
210
     */
211
    public static function getByType(string $type, string $content = null): ResponseContextAbstract
212
    {
213
        switch ($type) {
214
            case self::RESPONSE_TYPE_JSON:
215
                return new JsonResponseContext($content);
216
            default:
217
                return new DummyResponseContext($content);
218
        }
219
    }
220
}
221