Completed
Push — master ( 378c5b...5052d2 )
by Markus
08:56
created

JmsSerializerObjectFactory   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 86.67%

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 1
dl 0
loc 41
ccs 13
cts 15
cp 0.8667
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A factor() 0 20 3
1
<?php
2
3
namespace Mathielen\DataImport\Writer\ObjectWriter;
4
5
use JMS\Serializer\SerializerInterface;
6
7
class JmsSerializerObjectFactory implements ObjectFactoryInterface
8
{
9
    private $classname;
10
11
    /**
12
     * @var SerializerInterface
13
     */
14
    private $serializer;
15
16
    /**
17
     * @var array
18
     */
19
    private $cache = [];
20
21 2
    public function __construct($classname, SerializerInterface $serializer)
22
    {
23 2
        $this->classname = $classname;
24 2
        $this->serializer = $serializer;
25 2
    }
26
27 1
    public function factor(array $item)
28
    {
29
        //lowercase properties because the naming-strategy of jms serializer depends on lowercase'd prop's
30 1
        $item = array_change_key_case($item, CASE_LOWER);
31 1
        $json = json_encode($item);
32
33 1
        $cacheKey = md5($json);
34 1
        if (isset($this->cache[$cacheKey])) {
35
            return $this->cache[$cacheKey];
36
        }
37
38 1
        $object = $this->serializer->deserialize($json, $this->classname, 'json');
39 1
        $this->cache[$cacheKey] = $object;
40
41 1
        if (count($this->cache) > 100) {
42
            array_shift($this->cache); //cut last one
43
        }
44
45 1
        return $object;
46
    }
47
}
48