Completed
Pull Request — develop (#607)
by Tom
01:30
created

MigrationsConfigurationFactory::getOptionsClass()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 3
ccs 0
cts 2
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DoctrineORMModule\Service;
6
7
use Doctrine\DBAL\Connection;
8
use Doctrine\Migrations\Configuration\Configuration;
9
use Doctrine\Migrations\OutputWriter;
10
use DoctrineModule\Service\AbstractFactory;
11
use Interop\Container\ContainerInterface;
12
use Laminas\ServiceManager\ServiceLocatorInterface;
13
use Symfony\Component\Console\Output\ConsoleOutput;
14
use function method_exists;
15
16
/**
17
 * DBAL Connection ServiceManager factory
18
 */
19
class MigrationsConfigurationFactory extends AbstractFactory
20
{
21
    /**
22
     * {@inheritDoc}
23
     *
24
     * @return Configuration
25
     */
26
    public function __invoke(ContainerInterface $container, $requestedName, ?array $options = null)
27
    {
28
        $name       = $this->getName();
29
        $connection = $container->get('doctrine.connection.' . $name);
30
        $appConfig        = $container->get('config');
31
        $migrationsConfig = $appConfig['doctrine']['migrations_configuration'][$name];
32
33
        $configuration = new Configuration($connection);
34
35
        $output         = new ConsoleOutput();
36
        $writerCallback = static function ($message) use ($output) : void {
37
            $output->writeln($message);
38
        };
39
40
        $outputWriter = $configuration->getOutputWriter();
41
        if (method_exists($outputWriter, 'setCallback')) {
42
            $outputWriter->setCallback($writerCallback);
43
        } else {
44
            // Fallback for doctrine-migrations v1.x
45
            $configuration->setOutputWriter(new OutputWriter($writerCallback));
46
        }
47
48
        $configuration->setName($migrationsConfig['name']);
49
        $configuration->setMigrationsDirectory($migrationsConfig['directory']);
50
        $configuration->setMigrationsNamespace($migrationsConfig['namespace']);
51
        $configuration->setMigrationsTableName($migrationsConfig['table']);
52
        $configuration->registerMigrationsFromDirectory($migrationsConfig['directory']);
53
54
        if (method_exists($configuration, 'setMigrationsColumnName')) {
55
            $configuration->setMigrationsColumnName($migrationsConfig['column']);
56
        }
57
58
        if (isset($migrationsConfig['custom_template']) && method_exists($configuration, 'setCustomTemplate')) {
59
            $configuration->setCustomTemplate($migrationsConfig['custom_template']);
60
        }
61
62
        return $configuration;
63
    }
64
65
    /**
66
     * {@inheritDoc}
67
     *
68
     * @return Configuration
69
     */
70
    public function createService(ServiceLocatorInterface $container)
71
    {
72
        return $this($container, Configuration::class);
73
    }
74
75
    public function getOptionsClass() : string
76
    {
77
    }
78
}
79