Completed
Push — master ( 54758a...09c84d )
by Dmitry
02:43
created

TacticianCommandBus::prepareMiddlewares()   A

Complexity

Conditions 4
Paths 6

Size

Total Lines 14
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 0
Metric Value
dl 0
loc 14
c 0
b 0
f 0
ccs 0
cts 11
cp 0
rs 9.2
cc 4
eloc 7
nc 6
nop 1
crap 20
1
<?php
2
3
namespace hiapi\components;
4
5
use League\Tactician\CommandBus;
6
use League\Tactician\Handler\CommandHandlerMiddleware;
7
use League\Tactician\Middleware;
8
use Yii;
9
10
class TacticianCommandBus extends \yii\base\Component implements CommandBusInterface
11
{
12
    /**
13
     * @var Middleware[]
14
     */
15
    protected $middlewares = [];
16
17
    /**
18
     * @var Middleware
19
     */
20
    protected $defaultHandler;
21
22
    /**
23
     * @var CommandBus
24
     */
25
    protected $realCommandBus;
26
27
    public function __construct(Middleware $defaultHandler, array $config = [])
28
    {
29
        parent::__construct($config);
30
31
        $this->defaultHandler = $defaultHandler;
32
        $this->realCommandBus = new CommandBus($this->getMiddlewares());
33
    }
34
35
    public function handle($command)
36
    {
37
        return $this->realCommandBus->handle($command);
38
    }
39
40
    public function getMiddlewares()
41
    {
42
        $this->middlewares = $this->prepareMiddlewares($this->middlewares);
43
44
        return $this->middlewares;
45
    }
46
47
    protected function prepareMiddlewares($middlewares)
48
    {
49
        foreach ($middlewares as &$middleware) {
50
            if (!is_object($middleware)) {
51
                $middleware = Yii::createObject($middleware);
52
            }
53
        }
54
55
        if (!$this->containsHandler($middlewares)) {
56
            $middlewares[] = $this->defaultHandler;
57
        }
58
59
        return $middlewares;
60
    }
61
62
    public function setMiddlewares($middlewares)
63
    {
64
        $this->middlewares = $middlewares;
65
    }
66
67
    protected function containsHandler($middlewares)
68
    {
69
        foreach ($middlewares as $middleware) {
70
            if ($middleware instanceof CommandHandlerMiddleware) {
71
                return true;
72
            }
73
        }
74
75
        return false;
76
    }
77
}
78