Passed
Push — feature/VSVGVQ-20 ( 5fa028...246439 )
by steven
02:50
created

Company::guardTranslatedAliases()   B

Complexity

Conditions 6
Paths 6

Size

Total Lines 17
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 17
rs 8.8571
c 0
b 0
f 0
cc 6
eloc 11
nc 6
nop 1
1
<?php declare(strict_types=1);
2
3
namespace VSV\GVQ_API\Company\Models;
4
5
use Ramsey\Uuid\UuidInterface;
6
use VSV\GVQ_API\Common\ValueObjects\NotEmptyString;
7
8
class Company
9
{
10
    /**
11
     * @var UuidInterface
12
     */
13
    private $id;
14
15
    /**
16
     * @var NotEmptyString
17
     */
18
    private $name;
19
20
    /**
21
     * @var TranslatedAliases
22
     */
23
    private $aliases;
24
25
    /**
26
     * @param UuidInterface $id
27
     * @param NotEmptyString $name
28
     * @param TranslatedAliases $aliases
29
     */
30
    public function __construct(UuidInterface $id, NotEmptyString $name, TranslatedAliases $aliases)
31
    {
32
        $this->guardTranslatedAliases($aliases);
33
34
        $this->id = $id;
35
        $this->name = $name;
36
        $this->aliases = $aliases;
37
    }
38
39
    /**
40
     * @return UuidInterface
41
     */
42
    public function getId(): UuidInterface
43
    {
44
        return $this->id;
45
    }
46
47
    /**
48
     * @return NotEmptyString
49
     */
50
    public function getName(): NotEmptyString
51
    {
52
        return $this->name;
53
    }
54
55
    /**
56
     * @return TranslatedAliases
57
     */
58
    public function getAliases(): TranslatedAliases
59
    {
60
        return $this->aliases;
61
    }
62
63
    /**
64
     * @param TranslatedAliases $aliases
65
     */
66
    private function guardTranslatedAliases(TranslatedAliases $aliases): void
67
    {
68
        $languages = [];
69
        foreach ($aliases as $alias) {
70
            $languages[] = $alias->getLanguage()->toNative();
71
        }
72
        $languageCount = array_count_values($languages);
73
74
        if ($aliases->count() !== 2 || !($languageCount['nl'] === 1 && $languageCount['fr'] === 1)) {
75
            $suppliedAliases = [];
76
            foreach ($aliases as $alias) {
77
                $suppliedAliases[] = $alias->getAlias()->toNative().' - '.$alias->getLanguage()->toNative();
78
            }
79
80
            throw new \InvalidArgumentException(
81
                'Invalid value(s) for aliases: '.implode($suppliedAliases).
82
                'exactly one alias per language (nl and fr) required.'
83
            );
84
        }
85
    }
86
}
87