Substitutions::inflect()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 17
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 8
c 1
b 0
f 0
dl 0
loc 17
ccs 9
cts 9
cp 1
rs 10
cc 3
nc 3
nop 1
crap 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\Inflector\Rules;
6
7
use Doctrine\Inflector\WordInflector;
8
use function strtolower;
9
use function strtoupper;
10
use function substr;
11
12
class Substitutions implements WordInflector
13
{
14
    /** @var Substitution[] */
15
    private $substitutions;
16
17 1109
    public function __construct(Substitution ...$substitutions)
18
    {
19 1109
        foreach ($substitutions as $substitution) {
20 1109
            $this->substitutions[$substitution->getFrom()->getWord()] = $substitution;
21
        }
22 1109
    }
23
24 1106
    public function getFlippedSubstitutions() : Substitutions
25
    {
26 1106
        $substitutions = [];
27
28 1106
        foreach ($this->substitutions as $substitution) {
29 1106
            $substitutions[] = new Substitution(
30 1106
                $substitution->getTo(),
31 1106
                $substitution->getFrom()
32
            );
33
        }
34
35 1106
        return new Substitutions(...$substitutions);
36
    }
37
38 684
    public function inflect(string $word) : string
39
    {
40 684
        $lowerWord = strtolower($word);
41
42 684
        if (isset($this->substitutions[$lowerWord])) {
43 196
            $firstLetterUppercase = $lowerWord[0] !== $word[0];
44
45 196
            $toWord = $this->substitutions[$lowerWord]->getTo()->getWord();
46
47 196
            if ($firstLetterUppercase) {
48 2
                return strtoupper($toWord[0]) . substr($toWord, 1);
49
            }
50
51 194
            return $toWord;
52
        }
53
54 489
        return $word;
55
    }
56
}
57