Passed
Push — feature/VSVGVQ-20 ( 0bacd5...97a728 )
by steven
03:22
created

Company::hasValidValues()   B

Complexity

Conditions 6
Paths 16

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 9
nc 16
nop 1
dl 0
loc 14
rs 8.8571
c 0
b 0
f 0
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
        if ($aliases->count() !== 2 || !$this->hasValidValues($aliases)) {
33
            $suppliedValues = '';
34
            foreach ($aliases as $alias) {
35
                $suppliedValues .= $alias->getAlias()->toNative().' - '.$alias->getLanguage()->toNative().', ';
36
            }
37
38
            throw new \InvalidArgumentException(
39
                'Invalid value(s) for aliases: '.$suppliedValues.
40
                'exactly one alias per language (nl and fr) required.'
41
            );
42
        }
43
        $this->id = $id;
44
        $this->name = $name;
45
        $this->aliases = $aliases;
46
    }
47
48
    /**
49
     * @return UuidInterface
50
     */
51
    public function getId(): UuidInterface
52
    {
53
        return $this->id;
54
    }
55
56
    /**
57
     * @return NotEmptyString
58
     */
59
    public function getName(): NotEmptyString
60
    {
61
        return $this->name;
62
    }
63
64
    /**
65
     * @return TranslatedAliases
66
     */
67
    public function getAliases(): TranslatedAliases
68
    {
69
        return $this->aliases;
70
    }
71
72
    /**
73
     * @param TranslatedAliases $aliases
74
     * @return bool
75
     */
76
    public function hasValidValues(TranslatedAliases $aliases): bool
77
    {
78
        $languages = [];
79
        foreach ($aliases as $alias) {
80
            $languages[] = $alias->getLanguage()->toNative();
81
        }
82
        $freqs = array_count_values($languages);
83
        $freqNl = isset($freqs['nl']) ? $freqs['nl'] : 0;
84
        $freqFr = isset($freqs['fr']) ? $freqs['fr'] : 0;
85
        if ($freqFr === 1 && $freqNl === 1) {
86
            return true;
87
        }
88
89
        return false;
90
    }
91
}
92