ElementFactory   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Test Coverage

Coverage 42.11%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 7
eloc 18
c 1
b 0
f 0
dl 0
loc 57
ccs 8
cts 19
cp 0.4211
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getSubNamespace() 0 3 1
A __construct() 0 2 1
A specializedFactory() 0 16 3
A getNamePair() 0 12 1
A baseclassName() 0 3 1
1
<?php declare(strict_types=1);
2
3
namespace Formularium\Factory;
4
5
use Formularium\Element;
6
use Formularium\Exception\ClassNotFoundException;
7
use Formularium\FrameworkComposer;
8
use Formularium\Framework;
9
10
final class ElementFactory extends AbstractSpecializationFactory
11
{
12
    public static function getSubNamespace(): string
13
    {
14
        return "Framework";
15
    }
16
17
    public static function baseclassName(): string
18
    {
19
        return "Element";
20
    }
21
22
    /**
23
     * @codeCoverageIgnore
24
     */
25
    private function __construct()
26
    {
27
    }
28
29
    /**
30
     * Factory.
31
     *
32
     * @param string $elementName
33
     * @param Framework $framework
34
     * @param FrameworkComposer $composer
35
     * @return Element
36
     */
37 1
    public static function specializedFactory($elementName, object $framework, $composer = null): Element
38
    {
39
        // TODO: use reflection like Datatype
40 1
        $frameworkClassname = get_class($framework);
41 1
        $lastpos = strrpos($frameworkClassname, '\\');
42 1
        if ($lastpos === false) {
43
            $ns = '';
44
        } else {
45 1
            $ns = '\\' . substr($frameworkClassname, 0, $lastpos);
46
        }
47 1
        $class = "$ns\\Element\\$elementName";
48 1
        if (!class_exists($class)) {
49
            // TODO: namespaces
50
            throw new ClassNotFoundException("Invalid element $elementName for {$framework->getName()}");
51
        }
52 1
        return new $class($framework, $composer);
53
    }
54
55
    protected static function getNamePair(\ReflectionClass $reflection): array
56
    {
57
        $class = $reflection->getName();
58
59
        /**
60
         * @var Element
61
         */
62
        $d = new $class();
63
64
        return [
65
            'name' => $class,
66
            'value' => $d->getName()
67
        ];
68
    }
69
}
70