Completed
Push — master ( 00278d...91b50a )
by Patrick
02:05
created

StatusField::getCode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Artack\Dsn\Field;
6
7
class StatusField extends AbstractField
8
{
9
    private const CODE_CLASSES = [2, 4, 5];
10
11
    private $codeClass;
12
    private $codeSubject;
13
    private $codeEnumerated;
14
15 22
    public function __construct(string $name, int $codeClass, int $codeSubject, int $codeEnumerated, ?string $comment)
16
    {
17 22
        parent::__construct($name, $comment);
18
19 22
        $this->setCodeClass($codeClass);
20 10
        $this->setCodeSubject($codeSubject);
21 6
        $this->setCodeEnumerated($codeEnumerated);
22 2
    }
23
24 2
    public function getCode(): string
25
    {
26 2
        return sprintf('%d.%d.%d', $this->codeClass, $this->codeSubject, $this->codeEnumerated);
27
    }
28
29 2
    public function getCodeClass(): int
30
    {
31 2
        return $this->codeClass;
32
    }
33
34 22
    public function setCodeClass(?int $codeClass): void
35
    {
36 22
        if (!\in_array($codeClass, self::CODE_CLASSES, true)) {
37 12
            throw new \InvalidArgumentException(sprintf('given code class "%s" is not one of "%s"', $codeClass, implode(', ', self::CODE_CLASSES)));
38
        }
39
40 10
        $this->codeClass = $codeClass;
41 10
    }
42
43 2
    public function getCodeSubject(): int
44
    {
45 2
        return $this->codeSubject;
46
    }
47
48 10
    public function setCodeSubject(int $codeSubject): void
49
    {
50 10
        if ($codeSubject < 0 || $codeSubject > 7) {
51 4
            throw new \InvalidArgumentException(sprintf('given code class "%d" is not in the range between 0 and 7', $codeSubject));
52
        }
53
54 6
        $this->codeSubject = $codeSubject;
55 6
    }
56
57 2
    public function getCodeEnumerated(): int
58
    {
59 2
        return $this->codeEnumerated;
60
    }
61
62 6
    public function setCodeEnumerated(int $codeEnumerated): void
63
    {
64 6
        if ($codeEnumerated < 0 || $codeEnumerated > 999) {
65 4
            throw new \InvalidArgumentException(sprintf('given code enumerated "%d" is not in the range between 0 and 999', $codeEnumerated));
66
        }
67
68 2
        $this->codeEnumerated = $codeEnumerated;
69 2
    }
70
}
71