Passed
Pull Request — master (#97)
by Jonathan
02:15
created

Uninflected::getDefault()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 108

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 107
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 108
ccs 107
cts 107
cp 1
rs 8
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 1

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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