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

Substitutions   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 7
dl 0
loc 44
ccs 20
cts 20
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 2
A getFlippedSubstitutions() 0 12 2
A inflect() 0 17 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 668
    public function __construct(Substitution ...$substitutions)
18
    {
19 668
        foreach ($substitutions as $substitution) {
20 668
            $this->substitutions[$substitution->getFrom()->getWord()] = $substitution;
21
        }
22 668
    }
23
24 667
    public function getFlippedSubstitutions() : Substitutions
25
    {
26 667
        $substitutions = [];
27
28 667
        foreach ($this->substitutions as $substitution) {
29 667
            $substitutions[] = new Substitution(
30 667
                $substitution->getTo(),
31 667
                $substitution->getFrom()
32
            );
33
        }
34
35 667
        return new Substitutions(...$substitutions);
36
    }
37
38
39 403
    public function inflect(string $word) : string
40
    {
41 403
        $lowerWord = strtolower($word);
42
43 403
        if (isset($this->substitutions[$lowerWord])) {
44 120
            $firstLetterUppercase = $lowerWord[0] !== $word[0];
45
46 120
            $toWord = $this->substitutions[$lowerWord]->getTo()->getWord();
47
48 120
            if ($firstLetterUppercase) {
49 2
                return strtoupper($toWord[0]) . substr($toWord, 1);
50
            }
51
52 118
            return $toWord;
53
        }
54
55 283
        return $word;
56
    }
57
}
58