Card   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 3
Bugs 1 Features 0
Metric Value
eloc 37
dl 0
loc 82
ccs 31
cts 31
cp 1
rs 10
c 3
b 1
f 0
wmc 9

6 Methods

Rating   Name   Duplication   Size   Complexity  
A createSimple() 0 8 1
A __construct() 0 8 1
A jsonSerialize() 0 15 2
A createAskForPermissionsConsent() 0 11 3
A createLinkAccount() 0 3 1
A createStandard() 0 9 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace MaxBeckers\AmazonAlexa\Response;
6
7
use MaxBeckers\AmazonAlexa\Exception\InvalidCardPermissionsException;
8
use MaxBeckers\AmazonAlexa\Helper\SerializeValueMapper;
9
10
class Card implements \JsonSerializable
11
{
12
    use SerializeValueMapper;
13
14
    public const TYPE_SIMPLE = 'Simple';
15
    public const TYPE_STANDARD = 'Standard';
16
    public const TYPE_LINK_ACCOUNT = 'LinkAccount';
17
    public const TYPE_ASK_FOR_PERMISSIONS_CONSENT = 'AskForPermissionsConsent';
18
19
    public const PERMISSION_FULL_ADDRESS = 'read::alexa:device:all:address';
20
    public const PERMISSION_COUNTRY_REGION_AND_POSTAL_CODE = 'read::alexa:device:all:address:country_and_postal_code';
21
    public const PERMISSION_GEOLOCATION = 'alexa::devices:all:geolocation:read';
22
    public const PERMISSIONS = [
23
        self::PERMISSION_FULL_ADDRESS,
24
        self::PERMISSION_COUNTRY_REGION_AND_POSTAL_CODE,
25
        self::PERMISSION_GEOLOCATION,
26
    ];
27
28 10
    public function __construct(
29
        public string $type = self::TYPE_STANDARD,
30
        public ?string $title = null,
31
        public ?string $content = null,
32
        public ?string $text = null,
33
        public ?CardImage $image = null,
34
        public array $permissions = []
35
    ) {
36 10
    }
37
38 1
    public static function createSimple(string $title, string $content): self
39
    {
40 1
        $card = new self(self::TYPE_SIMPLE);
41
42 1
        $card->title = $title;
43 1
        $card->content = $content;
44
45 1
        return $card;
46
    }
47
48 2
    public static function createStandard(string $title, string $text, ?CardImage $cardImage = null): self
49
    {
50 2
        $card = new self();
51
52 2
        $card->title = $title;
53 2
        $card->text = $text;
54 2
        $card->image = $cardImage;
55
56 2
        return $card;
57
    }
58
59 1
    public static function createLinkAccount(): self
60
    {
61 1
        return new self(self::TYPE_LINK_ACCOUNT);
62
    }
63
64 6
    public static function createAskForPermissionsConsent(array $permissions): self
65
    {
66 6
        if (empty($permissions) || !empty(array_diff($permissions, self::PERMISSIONS))) {
67 2
            throw new InvalidCardPermissionsException();
68
        }
69
70 4
        $card = new self(self::TYPE_ASK_FOR_PERMISSIONS_CONSENT);
71
72 4
        $card->permissions = $permissions;
73
74 4
        return $card;
75
    }
76
77 7
    public function jsonSerialize(): \ArrayObject
78
    {
79 7
        $data = new \ArrayObject();
80
81 7
        $this->valueToArrayIfSet($data, 'type');
82 7
        $this->valueToArrayIfSet($data, 'title');
83 7
        $this->valueToArrayIfSet($data, 'content');
84 7
        $this->valueToArrayIfSet($data, 'text');
85 7
        $this->valueToArrayIfSet($data, 'image');
86
87 7
        if (!empty($this->permissions)) {
88 3
            $data['permissions'] = $this->permissions;
89
        }
90
91 7
        return $data;
92
    }
93
}
94