HandlerProcessor::enableHandlers()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 4
nc 2
nop 1
1
<?php
2
3
namespace Dumkaaa\BxOptimize\Handler;
4
5
class HandlerProcessor
6
{
7
    /** @var array Стандартные обработчики */
8
    private $defaultHandlers = [
9
        'image' => '\\Dumkaaa\\BxOptimize\\Handler\\ImageHandler',
10
        'css'   => '\\Dumkaaa\\BxOptimize\\Handler\\CssHandler',
11
    ];
12
13
    /** @var array Включенные обработчики */
14
    protected $handlers = [];
15
16
    /**
17
     * Включаем либо обработчики из переданного набора, либо все стандартные.
18
     *
19
     * @param array $handlers
20
     */
21
    public function __construct(array $handlers)
22
    {
23
        is_array($handlers)
24
            ? $this->enableHandlers($handlers)
25
            : $this->enableHandlers($this->defaultHandlers);
26
    }
27
28
    /**
29
     * Включает обработчики из массива.
30
     *
31
     * @param array $handlers
32
     */
33
    public function enableHandlers(array $handlers)
34
    {
35
        //убираем возможные дубликаты
36
        $handlers = array_unique(array_map('strtolower', $handlers));
37
38
        //включаем
39
        foreach ($handlers as $handler) {
40
            $this->enableHandler($handler);
41
        }
42
    }
43
44
    /**
45
     * Включает обработчик из списка доступных обработчиков.
46
     *
47
     * @param string $key Ключ-имя обработчика
48
     *
49
     * @throws \Exception
50
     */
51
    public function enableHandler($key)
52
    {
53
        if (is_null($key)) {
54
            throw new \Exception('Не передан ключ обработчика');
55
        } else {
56
            $key = strtolower(trim($key));
57
        }
58
59
        if (isset($this->defaultHandlers[$key])) {
60
            $this->handlers[$key] = new $this->defaultHandlers[$key]();
61
        } else {
62
            throw new \Exception("Обработчик $key не найден");
63
        }
64
    }
65
66
    /**
67
     * Возврашает включенные обработчики.
68
     *
69
     * @return array
70
     */
71
    public function getHandlers()
72
    {
73
        return $this->handlers;
74
    }
75
76
    /**
77
     * Добавляет новый обработчик и сразу включает его.
78
     *
79
     * @param string $key       Ключ-имя обработчика
80
     * @param string $classname Класс обработчика
81
     * @param bool   $replace   Заменять, если уже есть такой обработчик
82
     *
83
     * @return bool
84
     */
85
    public function addHandler($key, $classname, $replace = false)
86
    {
87
        $return = false;
88
89
        if (!isset($this->handlers[$key]) || $replace) {
90
            $this->handlers[$key] = new $classname();
91
            $return = true;
92
        }
93
94
        return $return;
95
    }
96
}
97