Passed
Push — master ( 219880...a97980 )
by Derek Stephen
01:30
created

BoneDoctrinePackage   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 99
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 6
Bugs 0 Features 1
Metric Value
eloc 65
c 6
b 0
f 1
dl 0
loc 99
ccs 67
cts 67
cp 1
rs 10
wmc 7

2 Methods

Rating   Name   Duplication   Size   Complexity  
A registerConsoleCommands() 0 55 2
A addToContainer() 0 32 5
1
<?php
2
3
namespace Bone\BoneDoctrine;
4
5
use Barnacle\Container;
6
use Barnacle\Exception\NotFoundException;
7
use Barnacle\RegistrationInterface;
8
use Bone\Console\CommandRegistrationInterface;
9
use Bone\Console\ConsoleApplication;
10
use Doctrine\Migrations\Configuration\Configuration;
11
use Doctrine\Migrations\Configuration\EntityManager\ExistingEntityManager;
12
use Doctrine\Migrations\Configuration\Migration\ExistingConfiguration;
13
use Doctrine\Migrations\DependencyFactory;
14
use Doctrine\Migrations\Metadata\Storage\TableMetadataStorageConfiguration;
15
use Doctrine\Migrations\Tools\Console\Command\DoctrineCommand;
16
use Doctrine\Migrations\Tools\Console\Command\DiffCommand;
17
use Doctrine\Migrations\Tools\Console\Command\DumpSchemaCommand;
18
use Doctrine\Migrations\Tools\Console\Command\ExecuteCommand;
19
use Doctrine\Migrations\Tools\Console\Command\GenerateCommand;
20
use Doctrine\Migrations\Tools\Console\Command\LatestCommand;
21
use Doctrine\Migrations\Tools\Console\Command\ListCommand;
22
use Doctrine\Migrations\Tools\Console\Command\MigrateCommand;
23
use Doctrine\Migrations\Tools\Console\Command\RollupCommand;
24
use Doctrine\Migrations\Tools\Console\Command\StatusCommand;
25
use Doctrine\Migrations\Tools\Console\Command\SyncMetadataCommand;
26
use Doctrine\Migrations\Tools\Console\Command\VersionCommand;
27
use Doctrine\ORM\EntityManager;
28
use Doctrine\ORM\Tools\Console\Command\GenerateProxiesCommand;
29
use Doctrine\ORM\Tools\Console\ConsoleRunner;
30
use Doctrine\ORM\Tools\Setup;
31
use Symfony\Component\Console\Helper\QuestionHelper;
32
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
33
34
class BoneDoctrinePackage implements RegistrationInterface, CommandRegistrationInterface
35
{
36
    /**
37
     * @param Container $c
38
     * @throws \Doctrine\ORM\ORMException
39
     */
40 5
    public function addToContainer(Container $c)
41
    {
42
        /** @var EntityManager $em */
43
44 5
        if (!$c->has('cache_dir')) {
45 1
            throw new NotFoundException('please set cache_dir in your config');
46
        }
47
48 4
        if (!$c->has('db')) {
49 1
            throw new NotFoundException('please set db connection details in your config');
50
        }
51
52 3
        if (!$c->has('entity_paths')) {
53 1
            throw new NotFoundException('please set entity_paths in your config');
54
        }
55
56 2
        if (!$c->has('proxy_dir')) {
57 1
            throw new NotFoundException('please set proxy_dir in your config');
58
        }
59
60 1
        $credentials = $c->get('db');
61 1
        $entityPaths = $c->get('entity_paths');
62 1
        $proxyDir =$c->get('proxy_dir');
63 1
        $cacheDir = $c->get('cache_dir');
64 1
        $isDevMode = false;
65 1
        $cachePool = new FilesystemAdapter('', 60, $cacheDir);
66 1
        $config = Setup::createAnnotationMetadataConfiguration($entityPaths, $isDevMode, null, null, false);
67 1
        $config->setProxyDir($proxyDir);
68 1
        $config->setProxyNamespace('DoctrineProxies');
69 1
        $config->setQueryCache($cachePool);
70 1
        $entityManager = EntityManager::create($credentials, $config);
71 1
        $c[EntityManager::class] = $entityManager;
72 1
    }
73
74
    /**
75
     * @param Container $container
76
     * @return array
77
     */
78 1
    public function registerConsoleCommands(Container $container): array
79
    {
80
        /** @var EntityManager $em $em */
81 1
        $em = $container->get(EntityManager::class);
82 1
        $helperSet = ConsoleRunner::createHelperSet($em);
83 1
        $helperSet->set(new QuestionHelper(), 'dialog');
84 1
        $app = $container->get(ConsoleApplication::class);
85 1
        $app->setHelperSet($helperSet);
86 1
        $migrationsDir = 'data/migrations';
87 1
        $meta = new TableMetadataStorageConfiguration();
88 1
        $meta->setTableName('Migration');
89 1
        $configuration = new Configuration();
90 1
        $configuration->addMigrationsDirectory('Migrations', $migrationsDir);
91 1
        $configuration->setMetadataStorageConfiguration($meta);
92
93 1
        $configLoader = new ExistingConfiguration($configuration);
94 1
        $emLoader = new ExistingEntityManager($em);
95 1
        $dependencyFactory = DependencyFactory::fromEntityManager($configLoader, $emLoader);
96
97 1
        $diff = new DiffCommand($dependencyFactory);
98 1
        $dump = new DumpSchemaCommand($dependencyFactory);
99 1
        $exec = new ExecuteCommand($dependencyFactory);
100 1
        $gen = new GenerateCommand($dependencyFactory);
101 1
        $latest = new LatestCommand($dependencyFactory);
102 1
        $list = new ListCommand($dependencyFactory);
103 1
        $migrate = new MigrateCommand($dependencyFactory);
104 1
        $rollup = new RollupCommand($dependencyFactory);
105 1
        $status = new StatusCommand($dependencyFactory);
106 1
        $sync = new SyncMetadataCommand($dependencyFactory);
107 1
        $ver = new VersionCommand($dependencyFactory);
108 1
        $proxy = new GenerateProxiesCommand();
109
110 1
        $diff->setName('migrant:diff');
111 1
        $dump->setName('migrant:dump');
112 1
        $exec->setName('migrant:execute');
113 1
        $gen->setName('migrant:generate');
114 1
        $latest->setName('migrant:latest');
115 1
        $list->setName('migrant:list');
116 1
        $migrate->setName('migrant:migrate');
117 1
        $rollup->setName('migrant:rollup');
118 1
        $status->setName('migrant:status');
119 1
        $sync->setName('migrant:sync');
120 1
        $ver->setName('migrant:version');
121 1
        $proxy->setName('migrant:generate-proxies');
122
123 1
        $commands = [$diff, $dump, $exec, $gen, $latest, $list, $migrate, $rollup, $status, $sync, $ver, $proxy];
124
125
        /** @var DoctrineCommand $command */
126 1
        foreach ($commands as $command) {
127 1
            $name = $command->getName();
128 1
            $name = str_replace(array('migrations:', 'orm:'), '', $name);
129 1
            $command->setName($name);
130
        }
131
132 1
        return $commands;
133
    }
134
}
135