Passed
Push — master ( c81968...b18996 )
by Maximilian
01:27 queued 12s
created

Card::createAskForPermissionsConsent()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 3

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 11
ccs 6
cts 6
cp 1
rs 10
c 0
b 0
f 0
cc 3
nc 2
nop 1
crap 3
1
<?php
2
3
namespace MaxBeckers\AmazonAlexa\Response;
4
5
use MaxBeckers\AmazonAlexa\Exception\InvalidCardPermissionsException;
6
use MaxBeckers\AmazonAlexa\Helper\SerializeValueMapper;
7
8
/**
9
 * @author Maximilian Beckers <[email protected]>
10
 */
11
class Card implements \JsonSerializable
12
{
13
    use SerializeValueMapper;
14
15
    const TYPE_SIMPLE                      = 'Simple';
16
    const TYPE_STANDARD                    = 'Standard';
17
    const TYPE_LINK_ACCOUNT                = 'LinkAccount';
18
    const TYPE_ASK_FOR_PERMISSIONS_CONSENT = 'AskForPermissionsConsent';
19
20
    const PERMISSION_FULL_ADDRESS                   = 'read::alexa:device:all:address';
21
    const PERMISSION_COUNTRY_REGION_AND_POSTAL_CODE = 'read::alexa:device:all:address:country_and_postal_code';
22
    const PERMISSION_GEOLOCATION                    = 'alexa::devices:all:geolocation:read';
23
    const PERMISSIONS                               = [
24
        self::PERMISSION_FULL_ADDRESS,
25
        self::PERMISSION_COUNTRY_REGION_AND_POSTAL_CODE,
26
        self::PERMISSION_GEOLOCATION,
27
    ];
28
29
    /**
30
     * @var string
31
     */
32
    public $type;
33
34
    /**
35
     * @var string|null
36
     */
37
    public $title;
38
39
    /**
40
     * @var string|null
41
     */
42
    public $content;
43
44
    /**
45
     * @var string|null
46
     */
47
    public $text;
48
49
    /**
50
     * @var CardImage|null
51
     */
52
    public $image;
53
54
    /**
55
     * @var array
56
     */
57
    public $permissions = [];
58
59
    /**
60
     * @param string $type
61
     */
62 10
    public function __construct(string $type = self::TYPE_STANDARD)
63
    {
64 10
        $this->type = $type;
65
    }
66
67
    /**
68
     * @param string $title
69
     * @param string $content
70
     *
71
     * @return Card
72
     */
73 1
    public static function createSimple(string $title, string $content): self
74
    {
75 1
        $card = new self(self::TYPE_SIMPLE);
76
77 1
        $card->title   = $title;
78 1
        $card->content = $content;
79
80 1
        return $card;
81
    }
82
83
    /**
84
     * @param string         $title
85
     * @param string         $text
86
     * @param CardImage|null $cardImage
87
     *
88
     * @return Card
89
     */
90 2
    public static function createStandard(string $title, string $text, CardImage $cardImage = null): self
91
    {
92 2
        $card = new self();
93
94 2
        $card->title = $title;
95 2
        $card->text  = $text;
96 2
        $card->image = $cardImage;
97
98 2
        return $card;
99
    }
100
101
    /**
102
     * @return Card
103
     */
104 1
    public static function createLinkAccount(): self
105
    {
106 1
        return new self(self::TYPE_LINK_ACCOUNT);
107
    }
108
109
    /**
110
     * @param array $permissions
111
     *
112
     * @throws InvalidCardPermissionsException
113
     *
114
     * @return Card
115
     */
116 6
    public static function createAskForPermissionsConsent(array $permissions): self
117
    {
118 6
        if (empty($permissions) || !empty(array_diff($permissions, self::PERMISSIONS))) {
119 2
            throw new InvalidCardPermissionsException();
120
        }
121
122 4
        $card = new self(self::TYPE_ASK_FOR_PERMISSIONS_CONSENT);
123
124 4
        $card->permissions = $permissions;
125
126 4
        return $card;
127
    }
128
129
    /**
130
     * @inheritdoc
131
     */
132 7
    public function jsonSerialize()
133
    {
134 7
        $data = new \ArrayObject();
135
136 7
        $this->valueToArrayIfSet($data, 'type');
137 7
        $this->valueToArrayIfSet($data, 'title');
138 7
        $this->valueToArrayIfSet($data, 'content');
139 7
        $this->valueToArrayIfSet($data, 'text');
140 7
        $this->valueToArrayIfSet($data, 'image');
141
142 7
        if (!empty($this->permissions)) {
143 3
            $data['permissions'] = $this->permissions;
144
        }
145
146 7
        return $data;
147
    }
148
}
149