Completed
Pull Request — master (#542)
by Asmir
16:51
created

DoctrinePass   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Test Coverage

Coverage 40.63%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 9
c 1
b 0
f 1
lcom 0
cbo 3
dl 0
loc 48
ccs 13
cts 32
cp 0.4063
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
D process() 0 45 9
1
<?php
2
3
namespace JMS\SerializerBundle\DependencyInjection\Compiler;
4
5
use Symfony\Component\DependencyInjection\ContainerBuilder;
6
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
7
use Symfony\Component\DependencyInjection\Reference;
8
9
class DoctrinePass implements CompilerPassInterface
10
{
11 7
    public function process(ContainerBuilder $container)
12
    {
13 7
        if ($container->hasParameter('jms_serializer.infer_types_from_doctrine_metadata') 
14 7
            && $container->getParameter('jms_serializer.infer_types_from_doctrine_metadata') === false) {
15
            return;
16
        }
17
18
        $registries = array(
19 7
            'doctrine.orm.entity_manager' => 'doctrine',
20 7
            'doctrine_phpcr.odm.document_manager' => 'doctrine_phpcr',
21 7
        );
22
23 7
        foreach ($registries as $managerId => $registry) {
24 7
            if (!$container->has($managerId)) {
25 7
                unset($registries[$managerId]);
26 7
            }
27 7
        }
28
29 7
        if (empty($registries)) {
30 7
            return;
31
        }
32
33
        $serviceTemplates = array(
34
            'jms_serializer.metadata_driver' => 'jms_serializer.metadata.%s_type_driver',
35
            'jms_serializer.object_constructor' => 'jms_serializer.%s_object_constructor',
36
        );
37
38
        $registry = array_pop($registries);
39
        $previousId = array();
40
        foreach ($serviceTemplates as $service => $serviceTemplate) {
41
            $previousId[$service] = sprintf($serviceTemplate, $registry);
42
            $container->setAlias($service, $previousId[$service]);
43
        }
44
45
        foreach ($registries as $registry) {
46
            foreach ($serviceTemplates as $service => $serviceTemplate) {
47
                $id = sprintf($serviceTemplate, $registry);
48
                $container
49
                    ->getDefinition($id)
50
                    ->replaceArgument(0, new Reference($previousId[$service]))
51
                ;
52
                $previousId[$service] = $id;
53
            }
54
        }
55
    }
56
}
57