Completed
Push — master ( 2e0cd6...c623e8 )
by Pavel
12:31
created

JmsSerializerDriverPass   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 4
c 1
b 0
f 0
lcom 0
cbo 3
dl 0
loc 48
ccs 31
cts 31
cp 1
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B process() 0 44 4
1
<?php
2
3
namespace ScayTrase\Api\Cruds\DependencyInjection\Compiler;
4
5
use ScayTrase\Api\Cruds\Adaptors\JmsSerializer\JmsDoctrineHandler;
6
use ScayTrase\Api\Cruds\Adaptors\JmsSerializer\JmsDoctrineMetadataDriver;
7
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
8
use Symfony\Component\DependencyInjection\ContainerBuilder;
9
use Symfony\Component\DependencyInjection\Reference;
10
11
final class JmsSerializerDriverPass implements CompilerPassInterface
12
{
13
    /** {@inheritdoc} */
14 2
    public function process(ContainerBuilder $container)
15
    {
16 2
        if (!$container->has('jms_serializer.metadata.doctrine_type_driver')) {
17 1
            return;
18
        }
19
20 1
        $factory = $container->getDefinition('jms_serializer.metadata_factory');
21
22 1
        $driver = $factory->getArgument(0);
23
24
        $definition = $container
25 1
            ->register('cruds.jms.doctrine_metadata_driver', JmsDoctrineMetadataDriver::class)
26 1
            ->setArguments([
27 1
                $driver,
28 1
                new Reference('doctrine'),
29 1
            ]);
30
31 1
        $factory->replaceArgument(0, $definition);
32
33 1
        $handler = $container->register('cruds.jms.doctrine_associations_handler', JmsDoctrineHandler::class);
34 1
        $handler->addArgument(new Reference('doctrine'));
35
36 1
        $formats    = ['json', 'xml', 'array'];
37
        $directions = [
38 1
            'serialization'   => 'serializeRelation',
39 1
            'deserialization' => 'deserializeRelation',
40 1
        ];
41 1
        $type       = JmsDoctrineHandler::TYPE;
42 1
        $name       = 'jms_serializer.handler';
43
44 1
        foreach ($formats as $format) {
45 1
            foreach ($directions as $direction => $method) {
46 1
                $handler->addTag(
47 1
                    $name,
48
                    [
49 1
                        'type'      => $type,
50 1
                        'direction' => $direction,
51 1
                        'format'    => $format,
52 1
                        'method'    => $method,
53
                    ]
54 1
                );
55 1
            }
56 1
        }
57 1
    }
58
}
59