ElementFactory::getSubNamespace()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 1
c 0
b 0
f 0
dl 0
loc 3
ccs 0
cts 2
cp 0
rs 10
cc 1
nc 1
nop 0
crap 2
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