Passed
Pull Request — master (#97)
by Maximilian
04:02
created

TextComponent::jsonSerialize()   F

Complexity

Conditions 15
Paths 8192

Size

Total Lines 57
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 29
CRAP Score 15

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 15
eloc 28
nc 8192
nop 0
dl 0
loc 57
ccs 29
cts 29
cp 1
crap 15
rs 1.7499
c 1
b 0
f 1

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace MaxBeckers\AmazonAlexa\Response\Directives\APL\Component;
6
7
use MaxBeckers\AmazonAlexa\Response\Directives\APL\Document\APLComponentType;
8
use MaxBeckers\AmazonAlexa\Response\Directives\APL\Document\FontStyle;
9
use MaxBeckers\AmazonAlexa\Response\Directives\APL\Document\FontWeight;
10
use MaxBeckers\AmazonAlexa\Response\Directives\APL\Document\TextAlign;
11
use MaxBeckers\AmazonAlexa\Response\Directives\APL\Document\TextAlignVertical;
12
use MaxBeckers\AmazonAlexa\Response\Directives\APL\StandardCommand\AbstractStandardCommand;
13
14
class TextComponent extends APLBaseComponent implements \JsonSerializable
15
{
16
    public const TYPE = APLComponentType::TEXT;
17
18
    /**
19
     * @param string|null $color The color of the text
20
     * @param string $fontFamily Font family (such as "Amazon Ember Display")
21
     * @param string $fontSize The size of the text
22
     * @param FontStyle|null $fontStyle The font style to display
23
     * @param FontWeight|null $fontWeight The font weight to display
24
     * @param string $lang The language of the text
25
     * @param string $letterSpacing Additional space to add between letters
26
     * @param string $lineHeight Line-height multiplier
27
     * @param int $maxLines The maximum number of lines of text to display
28
     * @param AbstractStandardCommand[]|null $onTextLayout Commands to run when the text layout changes
29
     * @param string $text The markup to display in this text box
30
     * @param TextAlign|null $textAlign Alignment of text within a paragraph
31
     * @param TextAlignVertical|null $textAlignVertical Vertical alignment of text
32
     */
33 15
    public function __construct(
34
        public ?string $color = null,
35
        public string $fontFamily = 'sans-serif',
36
        public string $fontSize = '40dp',
37
        public ?FontStyle $fontStyle = null,
38
        public ?FontWeight $fontWeight = null,
39
        public string $lang = '',
40
        public string $letterSpacing = '0',
41
        public string $lineHeight = '125%',
42
        public int $maxLines = 0,
43
        public ?array $onTextLayout = null,
44
        public string $text = '',
45
        public ?TextAlign $textAlign = null,
46
        public ?TextAlignVertical $textAlignVertical = null,
47
    ) {
48 15
        parent::__construct(self::TYPE);
49
    }
50
51 9
    public function jsonSerialize(): array
52
    {
53 9
        $data = parent::jsonSerialize();
54
55 9
        if ($this->color !== null) {
56 1
            $data['color'] = $this->color;
57
        }
58
59 9
        if ($this->fontFamily !== 'sans-serif') {
60 2
            $data['fontFamily'] = $this->fontFamily;
61
        }
62
63 9
        if ($this->fontSize !== '40dp') {
64 2
            $data['fontSize'] = $this->fontSize;
65
        }
66
67 9
        if ($this->fontStyle !== null) {
68 2
            $data['fontStyle'] = $this->fontStyle->value;
69
        }
70
71 9
        if ($this->fontWeight !== null) {
72 2
            $data['fontWeight'] = $this->fontWeight->value;
73
        }
74
75 9
        if ($this->lang !== '') {
76 2
            $data['lang'] = $this->lang;
77
        }
78
79 9
        if ($this->letterSpacing !== '0') {
80 2
            $data['letterSpacing'] = $this->letterSpacing;
81
        }
82
83 9
        if ($this->lineHeight !== '125%') {
84 2
            $data['lineHeight'] = $this->lineHeight;
85
        }
86
87 9
        if ($this->maxLines !== 0) {
88 2
            $data['maxLines'] = $this->maxLines;
89
        }
90
91 9
        if ($this->onTextLayout !== null && !empty($this->onTextLayout)) {
92 1
            $data['onTextLayout'] = $this->onTextLayout;
93
        }
94
95 9
        if ($this->text !== '') {
96 2
            $data['text'] = $this->text;
97
        }
98
99 9
        if ($this->textAlign !== null) {
100 2
            $data['textAlign'] = $this->textAlign->value;
101
        }
102
103 9
        if ($this->textAlignVertical !== null) {
104 2
            $data['textAlignVertical'] = $this->textAlignVertical->value;
105
        }
106
107 9
        return $data;
108
    }
109
}
110