Completed
Pull Request — develop (#563)
by Narcotic
13:49
created

DocumentMapCompilerPass::process()   B

Complexity

Conditions 4
Paths 6

Size

Total Lines 47
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 26
CRAP Score 4.0378

Importance

Changes 2
Bugs 0 Features 1
Metric Value
c 2
b 0
f 1
dl 0
loc 47
ccs 26
cts 30
cp 0.8667
rs 8.6845
cc 4
eloc 32
nc 6
nop 1
crap 4.0378
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 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 2
                $rootDir.'/../vendor/graviton'
43
            ];
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
        }
55
56 2
        $documentMap = new DocumentMap(
57 2
            (new Finder())
58 2
                ->in($dirs)
59 2
                ->path('Resources/config/doctrine')
60 2
                ->name('*.mongodb.xml'),
61 2
            (new Finder())
62 2
                ->in($dirs)
63 2
                ->path('Resources/config/serializer')
64 2
                ->name('*.xml'),
65 2
            (new Finder())
66 2
                ->in($dirs)
67 2
                ->path('Resources/config')
68 2
                ->name('validation.xml'),
69 2
            (new Finder())
70 2
                ->in($dirs)
71 2
                ->path('Resources/config/schema')
72 2
                ->name('*.json')
73
        );
74
75 2
        $container->set('graviton.document.map', $documentMap);
76 2
    }
77
}
78