Viewport   A
last analyzed

Complexity

Total Complexity 14

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 28
dl 0
loc 68
ccs 30
cts 30
cp 1
rs 10
c 1
b 0
f 1
wmc 14

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 13 1
C fromAmazonRequest() 0 38 13
1
<?php
2
3
declare(strict_types=1);
4
5
namespace MaxBeckers\AmazonAlexa\Request;
6
7
class Viewport
8
{
9
    /**
10
     * @param Experience[]|null $experiences Array of viewport experiences
11
     * @param ViewportMode|null $mode Viewport display mode
12
     * @param ViewportShape|null $shape Viewport shape
13
     * @param int|null $pixelWidth Viewport width in pixels
14
     * @param int|null $pixelHeight Viewport height in pixels
15
     * @param int|null $dpi Dots per inch
16
     * @param int|null $currentPixelWidth Current viewport width in pixels
17
     * @param int|null $currentPixelHeight Current viewport height in pixels
18
     * @param TouchType[]|null $touch Array of supported touch input types
19
     * @param KeyboardType[]|null $keyboard Array of supported keyboard input types
20
     * @param Video|null $video Video capabilities
21
     */
22 2
    public function __construct(
23
        public ?array $experiences = null,
24
        public ?ViewportMode $mode = null,
25
        public ?ViewportShape $shape = null,
26
        public ?int $pixelWidth = null,
27
        public ?int $pixelHeight = null,
28
        public ?int $dpi = null,
29
        public ?int $currentPixelWidth = null,
30
        public ?int $currentPixelHeight = null,
31
        public ?array $touch = null,
32
        public ?array $keyboard = null,
33
        public ?Video $video = null,
34
    ) {
35 2
    }
36
37 2
    public static function fromAmazonRequest(array $amazonRequest): self
38
    {
39 2
        $experiences = null;
40 2
        if (isset($amazonRequest['experiences']) && is_array($amazonRequest['experiences'])) {
41 2
            $experiences = [];
42 2
            foreach ($amazonRequest['experiences'] as $experienceData) {
43 2
                $experiences[] = Experience::fromAmazonRequest($experienceData);
44
            }
45
        }
46
47 2
        $touch = null;
48 2
        if (isset($amazonRequest['touch']) && is_array($amazonRequest['touch'])) {
49 2
            $touch = [];
50 2
            foreach ($amazonRequest['touch'] as $touchValue) {
51 2
                $touch[] = TouchType::tryFrom($touchValue);
52
            }
53
        }
54
55 2
        $keyboard = null;
56 2
        if (isset($amazonRequest['keyboard']) && is_array($amazonRequest['keyboard'])) {
57 2
            $keyboard = [];
58 2
            foreach ($amazonRequest['keyboard'] as $keyboardValue) {
59 2
                $keyboard[] = KeyboardType::tryFrom($keyboardValue);
60
            }
61
        }
62
63 2
        return new self(
64 2
            experiences: $experiences,
65 2
            mode: isset($amazonRequest['mode']) ? ViewportMode::tryFrom($amazonRequest['mode']) : null,
66 2
            shape: isset($amazonRequest['shape']) ? ViewportShape::tryFrom($amazonRequest['shape']) : null,
67 2
            pixelWidth: $amazonRequest['pixelWidth'] ?? null,
68 2
            pixelHeight: $amazonRequest['pixelHeight'] ?? null,
69 2
            dpi: $amazonRequest['dpi'] ?? null,
70 2
            currentPixelWidth: $amazonRequest['currentPixelWidth'] ?? null,
71 2
            currentPixelHeight: $amazonRequest['currentPixelHeight'] ?? null,
72 2
            touch: $touch,
73 2
            keyboard: $keyboard,
74 2
            video: isset($amazonRequest['video']) ? Video::fromAmazonRequest($amazonRequest['video']) : null,
75 2
        );
76
    }
77
}
78