Completed
Pull Request — master (#19)
by Akihito
01:25
created

Normalizer   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 4
c 0
b 0
f 0
lcom 1
cbo 2
dl 0
loc 48
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A supportsNormalization() 0 4 1
A supportsDenormalization() 0 4 1
A normalize() 0 14 1
A denormalize() 0 8 1
1
<?php
2
namespace Ackintosh\Snidel\Result;
3
4
use Bernard\Normalizer\AbstractAggregateNormalizerAware;
5
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
6
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
7
8
/**
9
 * @codeCoverageIgnore
10
 * It has been covered by SnidelTest
11
 */
12
class Normalizer extends AbstractAggregateNormalizerAware implements NormalizerInterface, DenormalizerInterface
13
{
14
    /**
15
     * {@inheritdoc}
16
     */
17
    public function supportsNormalization($data, $format = null)
18
    {
19
        return $data instanceof Result;
20
    }
21
22
    /**
23
     * {@inheritdoc}
24
     */
25
    public function supportsDenormalization($data, $type, $format = null)
26
    {
27
        return $type === 'Ackintosh\Snidel\Result\Result';
28
    }
29
30
    /**
31
     * {@inheritdoc}
32
     */
33
    public function normalize($object, $format = null, array $context = array())
34
    {
35
        $cloned = clone $object;
36
        $serializedTask = $this->aggregate->normalize($cloned->getTask());
37
        $serializedProcess = serialize($cloned->getProcess());
38
        $cloned->setTask(null);
39
        $cloned->setProcess(null);
40
41
        return serialize([
42
            'serializedTask' => $serializedTask,
43
            'serializedProcess' => $serializedProcess,
44
            'result' => $cloned,
45
        ]);
46
    }
47
48
    /**
49
     * {@inheritdoc}
50
     */
51
    public function denormalize($data, $class, $format = null, array $context = array())
52
    {
53
        $unserialized = unserialize($data);
54
        $unserialized['result']->setTask($this->aggregate->denormalize($unserialized['serializedTask'], 'Ackintosh\Snidel\Task\Task'));
55
        $unserialized['result']->setProcess(unserialize($unserialized['serializedProcess']));
56
57
        return $unserialized['result'];
58
    }
59
}
60