Completed
Pull Request — develop (#563)
by Narcotic
66:28
created

DocumentMapCompilerPass   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Importance

Changes 2
Bugs 0 Features 1
Metric Value
wmc 4
lcom 0
cbo 3
dl 0
loc 60
rs 10
c 2
b 0
f 1

1 Method

Rating   Name   Duplication   Size   Complexity  
B process() 0 51 4
1
<?php
2
/**
3
 * build a collection_name to routerId mapping for ExtReference Types
4
 *
5
 * This is all done the cheap way by just inferring collection names from
6
 * the available serviecs that are tagged as rest service. This also means
7
 * we need to stick to the naming conventions already there even more.
8
 */
9
10
namespace Graviton\DocumentBundle\DependencyInjection\Compiler;
11
12
use Graviton\DocumentBundle\DependencyInjection\Compiler\Utils\DocumentMap;
13
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
14
use Symfony\Component\DependencyInjection\ContainerBuilder;
15
use Symfony\Component\Finder\Finder;
16
17
/**
18
 * @author   List of contributors <https://github.com/libgraviton/graviton/graphs/contributors>
19
 * @license  http://opensource.org/licenses/gpl-license.php GNU Public License
20
 * @link     http://swisscom.ch
21
 */
22
class DocumentMapCompilerPass implements CompilerPassInterface
23
{
24
    /**
25
     * create mapping from services
26
     *
27
     * @param ContainerBuilder $container container builder
28
     * @return void
29
     */
30
    public function process(ContainerBuilder $container)
31
    {
32
        // If it's inside vendor library or running as graviton base.
33
        $rootDir = $container->getParameter('kernel.root_dir');
34
35
        if (strpos($rootDir, 'vendor/graviton')) {
36
            $dirs = [
37
                $rootDir.'/../..'
38
            ];
39
        } else {
40
            $dirs = [
41
                __DIR__ . '/../../../..',
42
                $rootDir.'/../vendor/graviton'
43
            ];
44
        }
45
46
        $dynamicBundleDir = $container->getParameter('graviton.generator.dynamicbundle.dir');
47
        if (!empty($dynamicBundleDir)) {
48
            // if this is not an absolute dir, make it relative to the base dir
49
            if (substr($dynamicBundleDir, 0, 1) !== '/') {
50
                $dynamicBundleDir = $container->getParameter('kernel.root_dir').'/../'.$dynamicBundleDir;
51
            }
52
53
            $dirs[] = $dynamicBundleDir;
54
        } else {
55
            // default dynamic bundle dir is withing our ./src
56
            $dynamicBundleDir = __DIR__.'/../../../../GravitonDyn';
57
        }
58
59
        $documentMap = new DocumentMap(
60
            (new Finder())
61
                ->in($dirs)
62
                ->path('Resources/config/doctrine')
63
                ->name('*.mongodb.xml'),
64
            (new Finder())
65
                ->in($dirs)
66
                ->path('Resources/config/serializer')
67
                ->name('*.xml'),
68
            (new Finder())
69
                ->in($dirs)
70
                ->path('Resources/config')
71
                ->name('validation.xml'),
72
            (new Finder())
73
                ->in($dirs)
74
                ->path('Resources/config/schema')
75
                ->name('*.json')
76
        );
77
78
        $container->set('graviton.document.map', $documentMap);
79
        $container->setParameter('graviton.generator.dynamicbundle.dir', $dynamicBundleDir);
80
    }
81
}
82