ISO6391Languages::getLanguages()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 2
eloc 3
nc 2
nop 0
dl 0
loc 7
rs 10
c 1
b 0
f 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Talentify\ValueObject\Linguistics\Languages;
6
7
use ArrayIterator;
8
use RuntimeException;
9
use Talentify\ValueObject\Linguistics\Language;
10
use Traversable;
11
12
/**
13
 * List of all languages defined by ISO 639-1.
14
 *
15
 * @see https://en.wikipedia.org/wiki/ISO_639-1
16
 */
17
class ISO6391Languages implements Languages
18
{
19
    /**
20
     * Map of known languages indexed by code.
21
     *
22
     * @var mixed[]|null
23
     */
24
    private static $languages;
25
26
    /**
27
     * {@inheritdoc}
28
     */
29
    public function contains(Language $language) : bool
30
    {
31
        return isset($this->getLanguages()[$language->getCode()]);
32
    }
33
34
    public function getIterator() : Traversable
35
    {
36
        return new ArrayIterator(
37
            array_map(
38
                function ($definition) {
39
                    return new Language($definition['name'], $definition['code']);
40
                },
41
                $this->getLanguages()
42
            )
43
        );
44
    }
45
46
    /**
47
     * Returns a map of known languages indexed by code.
48
     *
49
     * @return mixed[]
50
     */
51
    private function getLanguages() : array
52
    {
53
        if (null === self::$languages) {
54
            self::$languages = $this->loadLanguages();
55
        }
56
57
        return self::$languages;
58
    }
59
60
    /**
61
     * @return mixed[]
62
     */
63
    private function loadLanguages() : array
64
    {
65
        $file = __DIR__ . '/../../../resources/languages/iso6391.php';
66
67
        if (file_exists($file)) {
68
            return require $file;
69
        }
70
71
        throw new RuntimeException('Failed to load language ISO 639-1 codes.');
72
    }
73
}
74