Completed
Push — master ( 0791f9...7c80a3 )
by Josh
28s queued 13s
created

Response   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 80
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 92.31%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
c 1
b 0
f 0
lcom 1
cbo 1
dl 0
loc 80
ccs 12
cts 13
cp 0.9231
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getStatusCode() 0 4 1
A withStatus() 0 16 4
A getReasonPhrase() 0 4 1
1
<?php
2
3
namespace CodeJet\Http;
4
5
use Psr\Http\Message\ResponseInterface;
6
7
class Response extends Message implements ResponseInterface
8
{
9
    /**
10
     * @var int Status code.
11
     */
12
    protected $statusCode = 200;
13
14
    /**
15
     * @var string Reason Phrase.
16
     */
17
    protected $reasonPhrase = '';
18
19
    /**
20
     * Gets the response status code.
21
     *
22
     * The status code is a 3-digit integer result code of the server's attempt
23
     * to understand and satisfy the request.
24
     *
25
     * @return int Status code.
26
     */
27 18
    public function getStatusCode()
28
    {
29 18
        return $this->statusCode;
30
    }
31
32
    /**
33
     * Return an instance with the specified status code and, optionally, reason phrase.
34
     *
35
     * If no reason phrase is specified, implementations MAY choose to default
36
     * to the RFC 7231 or IANA recommended reason phrase for the response's
37
     * status code.
38
     *
39
     * This method MUST be implemented in such a way as to retain the
40
     * immutability of the message, and MUST return an instance that has the
41
     * updated status and reason phrase.
42
     *
43
     * @link http://tools.ietf.org/html/rfc7231#section-6
44
     * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
45
     * @param int $code The 3-digit integer result code to set.
46
     * @param string $reasonPhrase The reason phrase to use with the
47
     *     provided status code; if none is provided, implementations MAY
48
     *     use the defaults as suggested in the HTTP specification.
49
     * @return static
50
     * @throws \InvalidArgumentException For invalid status code arguments.
51
     */
52 21
    public function withStatus($code, $reasonPhrase = '')
53
    {
54 21
        if (!is_int($code) || strlen($code) > 3) {
55 3
            throw new \InvalidArgumentException('Status code must be a 3 digit integer.');
56
        }
57
58 18
        if (!is_string($reasonPhrase)) {
59
            throw new \InvalidArgumentException('Reason phrase must be a string.');
60
        }
61
62 18
        $clone = clone $this;
63 18
        $clone->statusCode = $code;
64 18
        $clone->reasonPhrase = $reasonPhrase;
65
66 18
        return $clone;
67
    }
68
69
    /**
70
     * Gets the response reason phrase associated with the status code.
71
     *
72
     * Because a reason phrase is not a required element in a response
73
     * status line, the reason phrase value MAY be null. Implementations MAY
74
     * choose to return the default RFC 7231 recommended reason phrase (or those
75
     * listed in the IANA HTTP Status Code Registry) for the response's
76
     * status code.
77
     *
78
     * @link http://tools.ietf.org/html/rfc7231#section-6
79
     * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
80
     * @return string Reason phrase; must return an empty string if none present.
81
     */
82 6
    public function getReasonPhrase()
83
    {
84 6
        return $this->reasonPhrase;
85
    }
86
}
87