Passed
Push — master ( d3a94c...76e109 )
by Valentin
05:50
created

Schema::extractNamespace()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
rs 9.9666
c 0
b 0
f 0
cc 3
nc 2
nop 1
1
<?php
2
declare(strict_types=1);
3
4
namespace Cycle\ORM\Promise\Declaration;
5
6
class Schema
7
{
8
    /** @var Schema\Class_ */
9
    public $class;
10
11
    /** @var Schema\Class_ */
12
    public $extends;
13
14
    public function __construct(string $extends, string $class)
15
    {
16
        $this->class = Schema\Class_::create($this->extractClass($class), $this->extractExtendedNamespace($class, $extends));
17
        $this->extends = Schema\Class_::create($this->extractClass($extends), $this->extractNamespace($extends));
18
    }
19
20
    private function extractClass(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 extractExtendedNamespace(string $class, string $extends): ?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($extends);
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
}