Completed
Push — master ( 5f6043...fc24f1 )
by Mike
02:46
created

MigrationStatusInfosHelper   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 71
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 95.35%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 10
c 1
b 0
f 0
lcom 1
cbo 4
dl 0
loc 71
ccs 41
cts 43
cp 0.9535
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 1
C getMigrationsInfos() 0 42 8
A getExecutedUnavailableMigrations() 0 4 1
1
<?php
2
3
namespace Doctrine\DBAL\Migrations\Tools\Console\Helper;
4
5
6
use Doctrine\DBAL\Migrations\Configuration\AbstractFileConfiguration;
7
use Doctrine\DBAL\Migrations\Configuration\Configuration;
8
use Doctrine\DBAL\Migrations\Version;
9
10
class MigrationStatusInfosHelper
11
{
12
    /** @var Version[] */
13
    private $executedMigrations;
14
15
    /** @var Version[] */
16
    private $availableMigrations;
17
18
    /** @var Version[] */
19
    private $executedUnavailableMigrations;
20
21
    /** @var Configuration  */
22
    private $configuration;
23
24 7
    public function __construct(Configuration $configuration)
25
    {
26 7
        $this->configuration = $configuration;
27 7
        $this->executedMigrations = $this->configuration->getMigratedVersions();
28 7
        $this->availableMigrations = $this->configuration->getAvailableVersions();
29 7
        $this->executedUnavailableMigrations = array_diff($this->executedMigrations, $this->availableMigrations);
30 7
    }
31
32 7
    public function getMigrationsInfos()
33
    {
34 7
        $formattedVersions = [];
35 7
        foreach (['prev', 'current', 'next', 'latest'] as $alias) {
36 7
            $version = $this->configuration->resolveVersionAlias($alias);
37 7
            if ($version === null) {
38 7
                if ($alias == 'next') {
39 3
                    $formattedVersions[$alias] = 'Already at latest version';
40 7
                } elseif ($alias == 'prev') {
41 7
                    $formattedVersions[$alias] = 'Already at first version';
42 7
                }
43 7
            } elseif ($version === '0') {
44 7
                $formattedVersions[$alias] = '<comment>0</comment>';
45 7
            } else {
46 7
                $formattedVersions[$alias] = $this->configuration->getDateTime($version) . ' (<comment>' . $version . '</comment>)';
47
            }
48 7
        }
49
50 7
        $numExecutedUnavailableMigrations = count($this->executedUnavailableMigrations);
51 7
        $numNewMigrations = count(array_diff($this->availableMigrations, $this->executedMigrations));
52
53
        $infos = [
54 7
            'Name'                              => $this->configuration->getName() ? $this->configuration->getName() : 'Doctrine Database Migrations',
55 7
            'Database Driver'                   => $this->configuration->getConnection()->getDriver()->getName(),
56 7
            'Database Name'                     => $this->configuration->getConnection()->getDatabase(),
57 7
            'Configuration Source'              => $this->configuration instanceof AbstractFileConfiguration ? $this->configuration->getFile() : 'manually configured',
58 7
            'Version Table Name'                => $this->configuration->getMigrationsTableName(),
59 7
            'Version Column Name'               => $this->configuration->getMigrationsColumnName(),
60 7
            'Migrations Namespace'              => $this->configuration->getMigrationsNamespace(),
61 7
            'Migrations Directory'              => $this->configuration->getMigrationsDirectory(),
62 7
            'Previous Version'                  => $formattedVersions['prev'],
63 7
            'Current Version'                   => $formattedVersions['current'],
64 7
            'Next Version'                      => $formattedVersions['next'],
65 7
            'Latest Version'                    => $formattedVersions['latest'],
66 7
            'Executed Migrations'               => count($this->executedMigrations),
67 7
            'Executed Unavailable Migrations'   => $numExecutedUnavailableMigrations,
68 7
            'Available Migrations'              => count($this->availableMigrations),
69 7
            'New Migrations'                    => $numNewMigrations,
70 7
        ];
71
72 7
        return $infos;
73
    }
74
75
    /** @var Version[] */
76
    public function getExecutedUnavailableMigrations()
77
    {
78
        return $this->executedUnavailableMigrations;
79
    }
80
}
81