RuleFactory   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 4
eloc 38
c 1
b 0
f 0
dl 0
loc 59
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A make() 0 14 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Polyglot\Pluralization;
6
7
use Polyglot\Pluralization\Rules\Arabic;
8
use Polyglot\Pluralization\Rules\BosnianSerbian;
9
use Polyglot\Pluralization\Rules\Chinese;
10
use Polyglot\Pluralization\Rules\Croatian;
11
use Polyglot\Pluralization\Rules\Czech;
12
use Polyglot\Pluralization\Rules\French;
13
use Polyglot\Pluralization\Rules\German;
14
use Polyglot\Pluralization\Rules\Icelandic;
15
use Polyglot\Pluralization\Rules\Lithuanian;
16
use Polyglot\Pluralization\Rules\Polish;
17
use Polyglot\Pluralization\Rules\RuleInterface;
18
use Polyglot\Pluralization\Rules\Russian;
19
use Polyglot\Pluralization\Rules\Slovenian;
20
use RuntimeException;
21
22
/**
23
 * Rule factory which crafts a pluralization rule depending on the provided locale.
24
 *
25
 * @package Polyglot/Pluralization
26
 * @author  Mihai MATEI <[email protected]>
27
 */
28
class RuleFactory
29
{
30
    /**
31
     * @var array
32
     */
33
    private static $localesRulesMapping = [
34
        'ar' => Arabic::class,
35
        'bs-Latn-BA' => BosnianSerbian::class,
36
        'bs-Cyrl-BA' => BosnianSerbian::class,
37
        'srl-RS' => BosnianSerbian::class,
38
        'sr-RS' => BosnianSerbian::class,
39
        'id' => Chinese::class,
40
        'id-ID' => Chinese::class,
41
        'ja' => Chinese::class,
42
        'ko' => Chinese::class,
43
        'ko-KR' => Chinese::class,
44
        'lo' => Chinese::class,
45
        'ms' => Chinese::class,
46
        'th' => Chinese::class,
47
        'th-TH' => Chinese::class,
48
        'zh' => Chinese::class,
49
        'hr' => Croatian::class,
50
        'hr-HR' => Croatian::class,
51
        'fr' => French::class,
52
        'tl' => French::class,
53
        'pt-br' => French::class,
54
        'ru' => Russian::class,
55
        'ru-RU' => Russian::class,
56
        'lt' => Lithuanian::class,
57
        'cs' => Czech::class,
58
        'cs-CZ' => Czech::class,
59
        'sk' => Czech::class,
60
        'pl' => Polish::class,
61
        'is' => Icelandic::class,
62
        'sl-SL' => Slovenian::class,
63
    ];
64
65
    /**
66
     * Make a new pluralization rule.
67
     *
68
     * @param string $locale
69
     * @param array  $customPluralRules
70
     *
71
     * @return RuleInterface
72
     */
73
    public static function make(string $locale, array $customPluralRules = []): RuleInterface
74
    {
75
        if (isset($customPluralRules[$locale])) {
76
            if (!is_object($customPluralRules[$locale]) || !$customPluralRules[$locale] instanceof RuleInterface) {
77
                throw new RuntimeException('All custom plural rules must be classes '
78
                    . 'which implement the interface Polyglot\Pluralization\Rules\RuleInterface');
79
            }
80
81
            return $customPluralRules[$locale];
82
        }
83
84
        $rule = self::$localesRulesMapping[$locale] ?? German::class;
85
86
        return new $rule();
87
    }
88
}