AliasService::getAliases()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace WebComplete\core\utils\alias;
4
5
class AliasService
6
{
7
    /**
8
     * @var array
9
     */
10
    protected $aliases;
11
12
    /**
13
     * @param array|null $aliases
14
     *
15
     * @throws AliasException
16
     */
17
    public function __construct(array $aliases = null)
18
    {
19
        if ($aliases !== null) {
20
            foreach ($aliases as $alias => $value) {
21
                $this->setAlias($alias, $value);
22
            }
23
        }
24
    }
25
26
    /**
27
     * @param string $alias
28
     * @param string $value
29
     *
30
     * @throws AliasException
31
     */
32
    public function setAlias(string $alias, string $value)
33
    {
34
        if (0 !== \strpos($alias, '@')) {
35
            throw new AliasException('Alias should starts with @');
36
        }
37
        $this->aliases[$alias] = $value;
38
    }
39
40
    /**
41
     * @return array
42
     */
43
    public function getAliases(): array
44
    {
45
        return $this->aliases;
46
    }
47
48
    /**
49
     * @param string $alias
50
     * @param bool $throwException
51
     *
52
     * @return string|null
53
     * @throws AliasException
54
     */
55
    public function get(string $alias, $throwException = true)
56
    {
57
        if (0 !== \strpos($alias, '@')) {
58
            return $alias;
59
        }
60
61
        $pos = \strpos($alias, '/');
62
        /** @var string $root */
63
        $root = $pos === false ? $alias : \substr($alias, 0, $pos);
64
65
        if (isset($this->aliases[$root])) {
66
            return $pos === false ? $this->aliases[$root] : $this->aliases[$root] . \substr($alias, $pos);
67
        }
68
69
        if ($throwException) {
70
            throw new AliasException("Invalid alias: $alias");
71
        }
72
73
        return null;
74
    }
75
}
76