AliasService   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 69
rs 10
c 0
b 0
f 0
wmc 12

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 3
A getAliases() 0 3 1
B get() 0 19 6
A setAlias() 0 6 2
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