Passed
Pull Request — 2.x (#21)
by Aleksei
13:56
created

ChangesCountNameGenerator   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 25
dl 0
loc 36
rs 10
c 0
b 0
f 0
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A changeToString() 0 16 1
A generate() 0 16 3
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 ChangesCountNameGenerator implements NameGeneratorInterface
12
{
13
    public function generate(Atomizer $atomizer): string
14
    {
15
        $collector = new Collector();
16
        $map = [];
17
        foreach ($collector->collect($atomizer) as $pair) {
18
            $key = $this->changeToString($pair[0]);
19
            $map[$key] ??= 0;
20
            $map[$key]++;
21
        }
22
23
        $result = [];
24
        foreach ($map as $key => $cnt) {
25
            $result[] = "{$key}{$cnt}";
26
        }
27
28
        return \implode('_', $result);
29
    }
30
31
    private function changeToString(ChangeType $change): string
32
    {
33
        return match ($change) {
34
            ChangeType::CreateTable => 'ct',
35
            ChangeType::DropTable => 'dt',
36
            ChangeType::RenameTable,
37
            ChangeType::ChangeTable => 't',
38
            ChangeType::AddColumn,
39
            ChangeType::DropColumn,
40
            ChangeType::AlterColumn => 'c',
41
            ChangeType::AddIndex,
42
            ChangeType::DropIndex,
43
            ChangeType::AlterIndex => 'i',
44
            ChangeType::AddFk,
45
            ChangeType::DropFk,
46
            ChangeType::AlterFk => 'fk',
47
        };
48
    }
49
}
50