Completed
Push — master ( aedaa6...d154ad )
by Valentin
06:14
created

Declaration::extractExtendedNamespace()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 13
rs 9.8333
c 0
b 0
f 0
cc 3
nc 3
nop 2
1
<?php
2
declare(strict_types=1);
3
4
namespace Cycle\ORM\Promise\Declaration;
5
6
class Declaration
7
{
8
    /** @var Proxy\Class_ */
9
    public $class;
10
11
    /** @var Proxy\Class_ */
12
    public $parent;
13
14
    public function __construct(string $parent, string $class)
15
    {
16
        $this->parent = Proxy\Class_::create($this->extractClassName($parent), $this->extractNamespace($parent));
17
        $this->class = Proxy\Class_::create($this->extractClassName($class), $this->extractNamespaceOfParentClass($class, $parent));
18
    }
19
20
    private function extractClassName(string $class): string
21
    {
22
        $lastPosition = mb_strripos($class, '\\');
23
        if ($lastPosition === false) {
24
            return $class;
25
        }
26
27
        return mb_substr($class, $lastPosition + 1);
28
    }
29
30
    private function extractNamespaceOfParentClass(string $class, string $parent): ?string
31
    {
32
        $lastPosition = mb_strripos($class, '\\');
33
        if ($lastPosition === 0) {
34
            return null;
35
        }
36
37
        if ($lastPosition !== false) {
38
            return $this->extractNamespace($class);
39
        }
40
41
        return $this->extractNamespace($parent);
42
    }
43
44
    private function extractNamespace(string $class): ?string
45
    {
46
        $lastPosition = mb_strripos($class, '\\');
47
        if ($lastPosition === false || $lastPosition === 0) {
48
            return null;
49
        }
50
51
        return mb_substr($class, 0, $lastPosition);
52
    }
53
}