Card::createSimple()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 4
dl 0
loc 8
ccs 5
cts 5
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 2
crap 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