Passed
Pull Request — master (#1)
by Flavien
04:40
created

TransformerFactory   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 0
dl 0
loc 48
ccs 0
cts 14
cp 0
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A create() 0 8 2
A isWithEntityManager() 0 13 3
1
<?php
2
3
namespace QualityCode\TransformAndLoadBundle\Import\Transformer;
4
5
use Doctrine\ORM\EntityManagerInterface;
6
7
class TransformerFactory
8
{
9
    /**
10
     * @var EntityManagerInterface
11
     */
12
    protected $entityManager;
13
14
    /**
15
     * @param EntityManagerInterface $entityManager
16
     */
17
    public function __construct(EntityManagerInterface $entityManager)
18
    {
19
        $this->entityManager = $entityManager;
20
    }
21
22
    /**
23
     * @param string $transformerClassName
24
     *
25
     * @return TransformerInterface
26
     */
27
    public function create(string $transformerClassName)
28
    {
29
        if ($this->isWithEntityManager($transformerClassName)) {
30
            return new $transformerClassName($this->entityManager);
31
        }
32
33
        return new $transformerClassName();
34
    }
35
36
    /**
37
     * @param string $transformerClassName
38
     *
39
     * @return bool
40
     */
41
    protected function isWithEntityManager(string $transformerClassName)
42
    {
43
        $reflectionClass = new \ReflectionClass($transformerClassName);
44
        if ($reflectionClass->implementsInterface('QualityCode\TransformAndLoadBundle\Import\Transformer\TransformerWithEntityManagerInterface')) {
45
            return true;
46
        }
47
48
        if ($reflectionClass->isSubclassOf('QualityCode\TransformAndLoadBundle\Import\Transformer\TransformerWithEntityAbstract')) {
49
            return true;
50
        }
51
52
        return false;
53
    }
54
}
55