JSendErrorResponse   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 4
dl 0
loc 69
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 11 1
A getCode() 0 4 1
A getMessage() 0 4 1
A asArray() 0 12 1
A getError() 0 4 1
1
<?php
2
3
namespace Demv\JSend;
4
5
/**
6
 * Class JSendErrorResponse
7
 * @package Demv\JSend
8
 */
9
10
use function Dgame\Ensurance\ensure;
11
12
/**
13
 * Class JSendErrorResponse
14
 * @package Demv\JSend
15
 */
16
final class JSendErrorResponse extends AbstractJSendResponse implements JSendErrorResponseInterface
17
{
18
    /**
19
     * @var string
20
     */
21
    private $message;
22
    /**
23
     * @var int|null
24
     */
25
    private $code;
26
27
    /**
28
     * JSendErrorResponse constructor.
29
     *
30
     * @param StatusInterface $status
31
     * @param array           $response
32
     */
33
    public function __construct(StatusInterface $status, array $response)
34
    {
35
        parent::__construct($status, $response['data'] ?? null);
36
        ensure($response)->isArray()->hasKey('message')->orThrow('Key "message" is required');
37
        ensure(trim($response['message']))->isString()->isLongerThan(0)->orThrow(
38
            'Key "message" should be a descriptive error-message'
39
        );
40
41
        $this->message = $response['message'];
42
        $this->code    = $response['code'] ?? null;
43
    }
44
45
    /**
46
     * @return int|null
47
     */
48
    public function getCode(): ?int
49
    {
50
        return $this->code;
51
    }
52
53
    /**
54
     * @return string
55
     */
56
    public function getMessage(): string
57
    {
58
        return $this->message;
59
    }
60
61
    /**
62
     * @return array
63
     */
64
    public function asArray(): array
65
    {
66
        return array_merge(
67
            array_filter(parent::asArray()),
68
            array_filter(
69
                [
70
                    'message' => $this->message,
71
                    'code'    => $this->code
72
                ]
73
            )
74
        );
75
    }
76
77
    /**
78
     * @return JSendErrorResponseInterface
79
     */
80
    public function getError(): JSendErrorResponseInterface
81
    {
82
        return $this;
83
    }
84
}
85