Completed
Pull Request — develop (#607)
by Tom
03:12 queued 01:40
created

MigrationsConfigurationFactory::createService()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

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