Passed
Push — master ( 5545f1...83deac )
by Kirill
03:22
created

UsesTrait   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 111
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 23
c 1
b 0
f 0
dl 0
loc 111
rs 10
wmc 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A addUse() 0 5 1
A removeUse() 0 5 1
A renderUses() 0 16 3
A setUses() 0 5 1
A getUses() 0 3 1
A uses() 0 5 1
A addUses() 0 7 2
1
<?php
2
3
/**
4
 * Spiral Framework.
5
 *
6
 * @license   MIT
7
 * @author    Anton Titov (Wolfy-J)
8
 */
9
10
declare(strict_types=1);
11
12
namespace Spiral\Reactor\Traits;
13
14
/**
15
 * Provide ability to declared namespace uses.
16
 */
17
trait UsesTrait
18
{
19
    /**
20
     * @var array
21
     */
22
    private $uses = [];
23
24
    /**
25
     * @param string $class
26
     *
27
     * @return bool
28
     */
29
    public function uses(string $class): bool
30
    {
31
        $class = ltrim($class, '\\');
32
33
        return array_key_exists($class, $this->uses);
34
    }
35
36
    /**
37
     * Declare uses in a form of array [class => alias|null]. Existed uses will be dropped.
38
     *
39
     * @param array $uses
40
     *
41
     * @return self
42
     */
43
    public function setUses(array $uses): self
44
    {
45
        $this->uses = [];
46
47
        return $this->addUses($uses);
48
    }
49
50
    /**
51
     * Add additional set of uses.
52
     *
53
     * @param array $uses
54
     *
55
     * @return self
56
     */
57
    public function addUses(array $uses): self
58
    {
59
        foreach ($uses as $class => $alias) {
60
            $this->addUse($class, $alias);
61
        }
62
63
        return $this;
64
    }
65
66
    /**
67
     * @param string $class
68
     * @param string $alias Optional.
69
     *
70
     * @return self
71
     */
72
    public function addUse(string $class, string $alias = null): self
73
    {
74
        $this->uses[ltrim($class, '\\')] = $alias;
75
76
        return $this;
77
    }
78
79
    /**
80
     * @param string $class
81
     *
82
     * @return self
83
     */
84
    public function removeUse(string $class): self
85
    {
86
        unset($this->uses[ltrim($class, '\\')]);
87
88
        return $this;
89
    }
90
91
    /**
92
     * @return array
93
     */
94
    public function getUses(): array
95
    {
96
        return $this->uses;
97
    }
98
99
    /**
100
     * @param string $string
101
     * @param int    $indent
102
     *
103
     * @return string
104
     */
105
    abstract protected function addIndent(string $string, int $indent = 0): string;
106
107
    /**
108
     * @param int $indentLevel
109
     *
110
     * @return string
111
     */
112
    private function renderUses(int $indentLevel = 0): string
113
    {
114
        $lines = [];
115
        foreach ($this->getUses() as $class => $alias) {
116
            $line = "use {$class}";
117
118
            if (!empty($alias)) {
119
                $line .= " as {$alias};";
120
            } else {
121
                $line .= ';';
122
            }
123
124
            $lines[] = $this->addIndent($line, $indentLevel);
125
        }
126
127
        return implode("\n", $lines);
128
    }
129
}
130