Passed
Push — 2.x ( f09c73...766c68 )
by Aleksei
39:35 queued 23:36
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
11
final class NameBasedOnChangesGenerator implements NameGeneratorInterface
12
{
13
    public function generate(Atomizer $atomizer): string
14
    {
15
        $collector = new Collector();
16
        return \implode(
17
            '_',
18
            \array_map(
19
                fn(array $pair): string => $this->changeToString($pair[0], $pair[1]),
20
                $collector->collect($atomizer),
21
            ),
22
        );
23
    }
24
25
    private function changeToString(ChangeType $change, string $name): string
26
    {
27
        return sprintf(
28
            '%s_%s',
29
            match ($change) {
30
                ChangeType::CreateTable => 'create',
31
                ChangeType::DropTable => 'drop',
32
                ChangeType::RenameTable => 'rename',
33
                ChangeType::ChangeTable => 'change',
34
                ChangeType::AddColumn => 'add',
35
                ChangeType::DropColumn => 'rm',
36
                ChangeType::AlterColumn => 'alter',
37
                ChangeType::AddIndex => 'add_index',
38
                ChangeType::DropIndex => 'rm_index',
39
                ChangeType::AlterIndex => 'alter_index',
40
                ChangeType::AddFk => 'add_fk',
41
                ChangeType::DropFk => 'rm_fk',
42
                ChangeType::AlterFk => 'alter_fk',
43
            },
44
            $name,
45
        );
46
    }
47
}
48