Passed
Push — master ( e17376...74a3c9 )
by Asmir
01:07 queued 17s
created

DoctrineMigrationsExtension::load()   F

Complexity

Conditions 14
Paths 2112

Size

Total Lines 74
Code Lines 41

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 41
CRAP Score 14.0026

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 41
dl 0
loc 74
ccs 41
cts 42
cp 0.9762
rs 2.1
c 1
b 0
f 1
cc 14
nc 2112
nop 2
crap 14.0026

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