Failed Conditions
Pull Request — master (#97)
by Jonathan
02:10
created

Uninflected::getDefaultWords()   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
cc 1
nc 1
nop 0
dl 0
loc 108
ccs 107
cts 107
cp 1
crap 1
rs 8
c 0
b 0
f 0

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