Completed
Branch develop (4c3d66)
by Mariano
11:18
created

AbstractFactory::createInstance()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1
Metric Value
dl 0
loc 9
ccs 5
cts 5
cp 1
rs 9.6666
cc 1
eloc 5
nc 1
nop 3
crap 1
1
<?php
2
namespace Mcustiel\PowerRoute\Common\Factories;
3
4
abstract class AbstractFactory extends Mapping
5
{
6
    /**
7
     *
8
     * @param array $config
9
     *
10
     * @return \Mcustiel\PowerRoute\InputSources\InputSourceInterface
11
     * @throws \Exception
12
     */
13 4
    public function createFromConfig(array $config)
14
    {
15 4
        $class = key($config);
16 4
        $this->checkMappingIsValid($class);
17
18 4
        return $this->getInstance($class, $config);
19
    }
20
21 4
    private function getInstance($class, $config)
22
    {
23 4
        if (is_object($this->mapping[$class])) {
24 1
            return $this->mapping[$class];
25
        }
26
27 3
        return $this->createInstance($this->getClassName($class), $config, $class);
28
    }
29
30 3
    private function createInstance($className, $config, $class)
31
    {
32 3
        $arguments = $this->getConstructorArguments($class);
33
34 3
        $object = new $className(...$arguments);
35 3
        $object->setArgument($config[$class]);
36
37 3
        return $object;
38
    }
39
}
40