Completed
Push — master ( 06e52a...98c39c )
by Pavel
13:39 queued 10:37
created

JmsSerializerDriverPass::process()   B

Complexity

Conditions 4
Paths 4

Size

Total Lines 34
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 0
Metric Value
dl 0
loc 34
ccs 0
cts 29
cp 0
rs 8.5806
c 0
b 0
f 0
cc 4
eloc 20
nc 4
nop 1
crap 20
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
    public function process(ContainerBuilder $container)
15
    {
16
        if (!$container->has('jms_serializer.metadata.doctrine_type_driver')) {
17
            return;
18
        }
19
20
        $handler = $container->register('cruds.jms.doctrine_associations_handler', JmsDoctrineHandler::class);
21
22
        //fixme: JMS utilizes only public handlers for lazyness
23
        $handler->setPublic(true);
24
        $handler->addArgument(new Reference('doctrine'));
25
26
        $formats    = ['json', 'xml', 'array'];
27
        $directions = [
28
            'serialization'   => 'serializeRelation',
29
            'deserialization' => 'deserializeRelation',
30
        ];
31
        $type       = JmsDoctrineHandler::TYPE;
32
        $name       = 'jms_serializer.handler';
33
34
        foreach ($formats as $format) {
35
            foreach ($directions as $direction => $method) {
36
                $handler->addTag(
37
                    $name,
38
                    [
39
                        'type'      => $type,
40
                        'direction' => $direction,
41
                        'format'    => $format,
42
                        'method'    => $method,
43
                    ]
44
                );
45
            }
46
        }
47
    }
48
}
49