Passed
Pull Request — 2.x (#19)
by Alexander
11:44
created

NameBasedOnChangesGenerator::changeToString()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 17
nc 1
nop 2
dl 0
loc 20
rs 9.7
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Cycle\Schema\Generator\Migrations;
6
7
use Cycle\Migrations\Atomizer\Atomizer;
8
use Cycle\Schema\Generator\Migrations\Changes\ChangeType;
9
use Cycle\Schema\Generator\Migrations\Changes\Collector;
10
use Cycle\Schema\Generator\Migrations\Changes\CollectorInterface;
11
12
final class NameBasedOnChangesGenerator implements NameGeneratorInterface
13
{
14
    public function __construct(
15
        private readonly CollectorInterface $collector = new Collector(),
16
    )
17
    {
18
    }
19
20
    public function generate(Atomizer $atomizer): string
21
    {
22
        return \implode(
23
            '_',
24
            \array_map(
25
                fn(array $pair) => $this->changeToString($pair[0], $pair[1]),
26
                $this->collector->collect($atomizer),
27
            )
28
        );
29
    }
30
31
    private function changeToString(ChangeType $change, string $name): string
32
    {
33
        return sprintf(
34
            '%s_%s',
35
            match ($change) {
36
                ChangeType::Create => 'create',
37
                ChangeType::Drop => 'drop',
38
                ChangeType::Rename => 'rename',
39
                ChangeType::Change => 'change',
40
                ChangeType::Add => 'add',
41
                ChangeType::Remove => 'rm',
42
                ChangeType::Alter => 'alter',
43
                ChangeType::AddIndex => 'add_index',
44
                ChangeType::RemoveIndex => 'rm_index',
45
                ChangeType::AlterIndex => 'alter_index',
46
                ChangeType::AddFk => 'add_fk',
47
                ChangeType::RemoveFk => 'rm_fk',
48
                ChangeType::AlterFk => 'alter_fk',
49
            },
50
            $name,
51
        );
52
    }
53
}
54