Passed
Pull Request — master (#90)
by Jonathan
02:20
created

Uninflected::getRegex()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 6
nc 2
nop 0
dl 0
loc 11
ccs 6
cts 6
cp 1
crap 2
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\Inflector\Rules;
6
7
use function array_map;
8
use function implode;
9
use function preg_match;
10
11
class Uninflected
12
{
13
    /** @var Word[] */
14
    private $words;
15
16
    /** @var string|null */
17
    private $regex;
18
19 527
    public function __construct(Word ...$words)
20
    {
21 527
        $this->words = $words;
22 527
    }
23
24
    /**
25
     * @return Word[]
26
     */
27 527
    public static function getDefaultWords() : array
28
    {
29
        return [
30 527
            new Word('.*?media'),
31 527
            new Word('Amoyese'),
32 527
            new Word('audio'),
33 527
            new Word('bison'),
34 527
            new Word('Borghese'),
35 527
            new Word('bream'),
36 527
            new Word('breeches'),
37 527
            new Word('britches'),
38 527
            new Word('buffalo'),
39 527
            new Word('cantus'),
40 527
            new Word('carp'),
41 527
            new Word('chassis'),
42 527
            new Word('clippers'),
43 527
            new Word('cod'),
44 527
            new Word('coitus'),
45 527
            new Word('compensation'),
46 527
            new Word('Congoese'),
47 527
            new Word('contretemps'),
48 527
            new Word('coreopsis'),
49 527
            new Word('corps'),
50 527
            new Word('data'),
51 527
            new Word('debris'),
52 527
            new Word('deer'),
53 527
            new Word('diabetes'),
54 527
            new Word('djinn'),
55 527
            new Word('education'),
56 527
            new Word('eland'),
57 527
            new Word('elk'),
58 527
            new Word('emoji'),
59 527
            new Word('equipment'),
60 527
            new Word('evidence'),
61 527
            new Word('Faroese'),
62 527
            new Word('feedback'),
63 527
            new Word('fish'),
64 527
            new Word('flounder'),
65 527
            new Word('Foochowese'),
66 527
            new Word('Furniture'),
67 527
            new Word('furniture'),
68 527
            new Word('gallows'),
69 527
            new Word('Genevese'),
70 527
            new Word('Genoese'),
71 527
            new Word('Gilbertese'),
72 527
            new Word('gold'),
73 527
            new Word('headquarters'),
74 527
            new Word('herpes'),
75 527
            new Word('hijinks'),
76 527
            new Word('Hottentotese'),
77 527
            new Word('information'),
78 527
            new Word('innings'),
79 527
            new Word('jackanapes'),
80 527
            new Word('jedi'),
81 527
            new Word('Kiplingese'),
82 527
            new Word('knowledge'),
83 527
            new Word('Kongoese'),
84 527
            new Word('love'),
85 527
            new Word('Lucchese'),
86 527
            new Word('Luggage'),
87 527
            new Word('mackerel'),
88 527
            new Word('Maltese'),
89 527
            new Word('metadata'),
90 527
            new Word('mews'),
91 527
            new Word('moose'),
92 527
            new Word('mumps'),
93 527
            new Word('Nankingese'),
94 527
            new Word('news'),
95 527
            new Word('nexus'),
96 527
            new Word('Niasese'),
97 527
            new Word('nutrition'),
98 527
            new Word('offspring'),
99 527
            new Word('Pekingese'),
100 527
            new Word('Piedmontese'),
101 527
            new Word('pincers'),
102 527
            new Word('Pistoiese'),
103 527
            new Word('plankton'),
104 527
            new Word('pliers'),
105 527
            new Word('pokemon'),
106 527
            new Word('police'),
107 527
            new Word('Portuguese'),
108 527
            new Word('proceedings'),
109 527
            new Word('rabies'),
110 527
            new Word('rain'),
111 527
            new Word('rhinoceros'),
112 527
            new Word('rice'),
113 527
            new Word('salmon'),
114 527
            new Word('Sarawakese'),
115 527
            new Word('scissors'),
116 527
            new Word('sea[- ]bass'),
117 527
            new Word('series'),
118 527
            new Word('Shavese'),
119 527
            new Word('shears'),
120 527
            new Word('sheep'),
121 527
            new Word('siemens'),
122 527
            new Word('species'),
123 527
            new Word('staff'),
124 527
            new Word('swine'),
125 527
            new Word('traffic'),
126 527
            new Word('trousers'),
127 527
            new Word('trout'),
128 527
            new Word('tuna'),
129 527
            new Word('us'),
130 527
            new Word('Vermontese'),
131 527
            new Word('Wenchowese'),
132 527
            new Word('wheat'),
133 527
            new Word('whiting'),
134 527
            new Word('wildebeest'),
135 527
            new Word('Yengeese'),
136
        ];
137
    }
138
139
    /**
140
     * @return Word[]
141
     */
142 527
    public function getWords() : array
143
    {
144 527
        return $this->words;
145
    }
146
147 421
    public function isUninflected(string $word) : bool
148
    {
149 421
        return preg_match('/^(' . $this->getRegex() . ')$/i', $word, $regs) === 1;
150
    }
151
152 421
    private function getRegex() : string
153
    {
154 421
        if ($this->regex === null) {
155
            $words = array_map(function (Word $word) {
156 421
                return $word->getWord();
157 421
            }, $this->words);
158
159 421
            $this->regex = '(?:' . implode('|', $words) . ')';
160
        }
161
162 421
        return $this->regex;
163
    }
164
}
165