Completed
Pull Request — develop (#640)
by Narcotic
08:00 queued 01:02
created

DocumentMapCompilerPass   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 63
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Test Coverage

Coverage 75.61%

Importance

Changes 0
Metric Value
wmc 5
lcom 0
cbo 3
dl 0
loc 63
ccs 31
cts 41
cp 0.7561
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
B process() 0 54 5
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  https://opensource.org/licenses/MIT MIT 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 2
    public function process(ContainerBuilder $container)
31
    {
32
        // If it's inside vendor library or running as graviton base.
33 2
        $rootDir = $container->getParameter('kernel.root_dir');
34
35 2
        if (strpos($rootDir, 'vendor/graviton')) {
36
            $dirs = [
37
                $rootDir.'/../..'
38
            ];
39
        } else {
40
            $dirs = [
41 2
                __DIR__ . '/../../../..',
42 1
                $rootDir.'/../vendor/graviton'
43 1
            ];
44
        }
45
46 2
        $dynamicBundleDir = $container->getParameter('graviton.generator.dynamicbundle.dir');
47 2
        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 2
            $dynamicBundleDir = __DIR__.'/../../../../GravitonDyn';
57 2
            if (!is_dir($dynamicBundleDir)) {
58
                $dynamicBundleDir = null;
59
            }
60
        }
61
62 2
        $documentMap = new DocumentMap(
63 2
            (new Finder())
64 2
                ->in($dirs)
65 2
                ->path('Resources/config/doctrine')
66 2
                ->name('*.mongodb.xml'),
67 2
            (new Finder())
68 2
                ->in($dirs)
69 2
                ->path('Resources/config/serializer')
70 2
                ->name('*.xml'),
71 2
            (new Finder())
72 2
                ->in($dirs)
73 2
                ->path('Resources/config')
74 2
                ->name('validation.xml'),
75 2
            (new Finder())
76 2
                ->in($dirs)
77 2
                ->path('Resources/config/schema')
78 2
                ->name('*.json')
79 1
        );
80
81 2
        $container->set('graviton.document.map', $documentMap);
82 2
        $container->setParameter('graviton.generator.dynamicbundle.dir', $dynamicBundleDir);
83 2
    }
84
}
85