StatusField::setCodeSubject()   A
last analyzed

Complexity

Conditions 3
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 3

Importance

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