Passed
Pull Request — master (#278)
by Asmir
04:33
created

DoctrineMigrationsExtension::load()   F

Complexity

Conditions 16
Paths 3168

Size

Total Lines 87
Code Lines 51

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 50
CRAP Score 16.0019

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 51
c 1
b 0
f 1
dl 0
loc 87
ccs 50
cts 51
cp 0.9804
rs 1.4
cc 16
nc 3168
nop 2
crap 16.0019

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\Bundle\MigrationsBundle\DependencyInjection;
6
7
use Doctrine\Migrations\DependencyFactory;
8
use Doctrine\Migrations\Metadata\Storage\MetadataStorage;
9
use Doctrine\Migrations\Metadata\Storage\TableMetadataStorageConfiguration;
10
use InvalidArgumentException;
11
use Symfony\Component\Config\FileLocator;
12
use Symfony\Component\DependencyInjection\ContainerBuilder;
13
use Symfony\Component\DependencyInjection\Definition;
14
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
15
use Symfony\Component\DependencyInjection\Reference;
16
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
17
use function sprintf;
18
19
/**
20
 * DoctrineMigrationsExtension.
21
 */
22
class DoctrineMigrationsExtension extends Extension
23
{
24
    /**
25
     * Responds to the migrations configuration parameter.
26
     *
27
     * @param string[][] $configs
28
     */
29 22
    public function load(array $configs, ContainerBuilder $container) : void
30
    {
31 22
        $configuration = new Configuration();
32
33 22
        $config = $this->processConfiguration($configuration, $configs);
34
35 20
        $locator = new FileLocator(__DIR__ . '/../Resources/config/');
36 20
        $loader  = new XmlFileLoader($container, $locator);
37
38 20
        $loader->load('services.xml');
39
40 20
        $configurationDefinition = $container->getDefinition('doctrine.migrations.configuration');
41
42 20
        $configurationDefinition->addMethodCall('setName', [$config['name']]);
43
44 20
        foreach ($config['migrations_paths'] as $ns => $path) {
45 20
            $configurationDefinition->addMethodCall('addMigrationsDirectory', [$ns, $path]);
46
        }
47
48 20
        foreach ($config['migrations'] as $migrationClass) {
49 2
            $configurationDefinition->addMethodCall('addMigrationClass', [$migrationClass]);
50
        }
51
52 20
        if ($config['organize_migrations'] !== false) {
53 2
            $configurationDefinition->addMethodCall('setMigrationOrganization', [$config['organize_migrations']]);
54
        }
55
56 20
        if ($config['custom_template'] !== null) {
57
            $configurationDefinition->addMethodCall('setCustomTemplate', [$config['custom_template']]);
58
        }
59
60 20
        $configurationDefinition->addMethodCall('setAllOrNothing', [$config['all_or_nothing']]);
61 20
        $configurationDefinition->addMethodCall('setCheckDatabasePlatform', [$config['check_database_platform']]);
62
63 20
        $diDefinition = $container->getDefinition('doctrine.migrations.dependency_factory');
64
65 20
        foreach ($config['services'] as $doctrineId => $symfonyId) {
66 2
            $diDefinition->addMethodCall('setService', [$doctrineId, new Reference($symfonyId)]);
67
        }
68
69 20
        if (! isset($config['services'][MetadataStorage::class])) {
70 19
            $storageConfiguration = $config['storage']['table_storage'];
71
72 19
            $storageDefinition = new Definition(TableMetadataStorageConfiguration::class);
73 19
            $container->setDefinition('doctrine.migrations.storage.table_storage', $storageDefinition);
74 19
            $container->setAlias('doctrine.migrations.metadata_storage', 'doctrine.migrations.storage.table_storage');
75
76 19
            if ($storageConfiguration['table_name']!== null) {
77 2
                $storageDefinition->addMethodCall('setTableName', [$storageConfiguration['table_name']]);
78
            }
79 19
            if ($storageConfiguration['version_column_name']!== null) {
80 2
                $storageDefinition->addMethodCall('setVersionColumnName', [$storageConfiguration['version_column_name']]);
81
            }
82 19
            if ($storageConfiguration['version_column_length']!== null) {
83 2
                $storageDefinition->addMethodCall('setVersionColumnLength', [$storageConfiguration['version_column_length']]);
84
            }
85 19
            if ($storageConfiguration['executed_at_column_name']!== null) {
86 2
                $storageDefinition->addMethodCall('setExecutedAtColumnName', [$storageConfiguration['executed_at_column_name']]);
87
            }
88 19
            if ($storageConfiguration['execution_time_column_name']!== null) {
89 2
                $storageDefinition->addMethodCall('setExecutionTimeColumnName', [$storageConfiguration['execution_time_column_name']]);
90
            }
91
92 19
            $configurationDefinition->addMethodCall('setMetadataStorageConfiguration', [new Reference('doctrine.migrations.storage.table_storage')]);
93
        }
94
95 20
        if ($config['em'] !== null && $config['connection'] !== null) {
96 1
            throw new InvalidArgumentException(
97 1
                'You cannot specify both "connection" and "em" in the DoctrineMigrationsBundle configurations.'
98
            );
99
        }
100
101 19
        $emID = sprintf('doctrine.orm.%s_entity_manager', $config['em'] ?: 'default');
102
103 19
        if ($container->has($emID)) {
104 14
            $container->getDefinition('doctrine.migrations.em_loader')
105 14
                ->setArgument(0, new Reference($emID));
106
107 14
            $diDefinition->setFactory([DependencyFactory::class, 'fromEntityManager']);
108 14
            $diDefinition->setArgument(1, new Reference('doctrine.migrations.em_loader'));
109
        } else {
110 5
            $connectionId = sprintf('doctrine.dbal.%s_connection', $config['connection'] ?? 'default');
111 5
            $container->getDefinition('doctrine.migrations.connection_loader')
112 5
                ->setArgument(0, new Reference($connectionId));
113
114 5
            $diDefinition->setFactory([DependencyFactory::class, 'fromConnection']);
115 5
            $diDefinition->setArgument(1, new Reference('doctrine.migrations.connection_loader'));
116
        }
117 19
    }
118
119
    /**
120
     * Returns the base path for the XSD files.
121
     *
122
     * @return string The XSD base path
123
     */
124
    public function getXsdValidationBasePath() : string
125
    {
126
        return __DIR__ . '/../Resources/config/schema';
127
    }
128
129 1
    public function getNamespace() : string
130
    {
131 1
        return 'http://symfony.com/schema/dic/doctrine/migrations/3.0';
132
    }
133
}
134