Failed Conditions
Push — master ( 74a3c9...254e05 )
by Asmir
40s queued 10s
created

DoctrineMigrationsExtension::load()   F

Complexity

Conditions 14
Paths 2112

Size

Total Lines 72
Code Lines 40

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 40
CRAP Score 14.0028

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 40
c 1
b 0
f 1
dl 0
loc 72
ccs 40
cts 41
cp 0.9756
rs 2.1
cc 14
nc 2112
nop 2
crap 14.0028

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
        foreach ($config['migrations_paths'] as $ns => $path) {
41 20
            $configurationDefinition->addMethodCall('addMigrationsDirectory', [$ns, $path]);
42
        }
43
44 20
        foreach ($config['migrations'] as $migrationClass) {
45 2
            $configurationDefinition->addMethodCall('addMigrationClass', [$migrationClass]);
46
        }
47
48 20
        if ($config['organize_migrations'] !== false) {
49 2
            $configurationDefinition->addMethodCall('setMigrationOrganization', [$config['organize_migrations']]);
50
        }
51
52 20
        if ($config['custom_template'] !== null) {
53
            $configurationDefinition->addMethodCall('setCustomTemplate', [$config['custom_template']]);
54
        }
55
56 20
        $configurationDefinition->addMethodCall('setAllOrNothing', [$config['all_or_nothing']]);
57 20
        $configurationDefinition->addMethodCall('setCheckDatabasePlatform', [$config['check_database_platform']]);
58
59 20
        $diDefinition = $container->getDefinition('doctrine.migrations.dependency_factory');
60
61 20
        foreach ($config['services'] as $doctrineId => $symfonyId) {
62 2
            $diDefinition->addMethodCall('setService', [$doctrineId, new Reference($symfonyId)]);
63
        }
64
65 20
        if (! isset($config['services'][MetadataStorage::class])) {
66 19
            $storageConfiguration = $config['storage']['table_storage'];
67
68 19
            $storageDefinition = new Definition(TableMetadataStorageConfiguration::class);
69 19
            $container->setDefinition('doctrine.migrations.storage.table_storage', $storageDefinition);
70 19
            $container->setAlias('doctrine.migrations.metadata_storage', 'doctrine.migrations.storage.table_storage');
71
72 19
            if ($storageConfiguration['table_name']!== null) {
73 2
                $storageDefinition->addMethodCall('setTableName', [$storageConfiguration['table_name']]);
74
            }
75 19
            if ($storageConfiguration['version_column_name']!== null) {
76 2
                $storageDefinition->addMethodCall('setVersionColumnName', [$storageConfiguration['version_column_name']]);
77
            }
78 19
            if ($storageConfiguration['version_column_length']!== null) {
79 2
                $storageDefinition->addMethodCall('setVersionColumnLength', [$storageConfiguration['version_column_length']]);
80
            }
81 19
            if ($storageConfiguration['executed_at_column_name']!== null) {
82 2
                $storageDefinition->addMethodCall('setExecutedAtColumnName', [$storageConfiguration['executed_at_column_name']]);
83
            }
84 19
            if ($storageConfiguration['execution_time_column_name']!== null) {
85 2
                $storageDefinition->addMethodCall('setExecutionTimeColumnName', [$storageConfiguration['execution_time_column_name']]);
86
            }
87
88 19
            $configurationDefinition->addMethodCall('setMetadataStorageConfiguration', [new Reference('doctrine.migrations.storage.table_storage')]);
89
        }
90
91 20
        if ($config['em'] !== null && $config['connection'] !== null) {
92 1
            throw new InvalidArgumentException(
93 1
                'You cannot specify both "connection" and "em" in the DoctrineMigrationsBundle configurations.'
94
            );
95
        }
96
97 19
        $container->setParameter('doctrine.migrations.preferred_em', $config['em']);
98 19
        $container->setParameter('doctrine.migrations.preferred_connection', $config['connection']);
99 19
    }
100
101
    /**
102
     * Returns the base path for the XSD files.
103
     *
104
     * @return string The XSD base path
105
     */
106
    public function getXsdValidationBasePath() : string
107
    {
108
        return __DIR__ . '/../Resources/config/schema';
109
    }
110
111 1
    public function getNamespace() : string
112
    {
113 1
        return 'http://symfony.com/schema/dic/doctrine/migrations/3.0';
114
    }
115
}
116