CommandBusMiddleware::__invoke()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 6
nc 2
nop 2
1
<?php
2
3
namespace NilPortugues\MessageBus\CommandBus;
4
5
use NilPortugues\MessageBus\CommandBus\Contracts\Command;
6
use NilPortugues\MessageBus\CommandBus\Contracts\CommandBusMiddleware as CommandBusMiddlewareInterface;
7
use NilPortugues\MessageBus\CommandBus\Contracts\CommandHandler;
8
use NilPortugues\MessageBus\CommandBus\Contracts\CommandHandlerResolver;
9
use NilPortugues\MessageBus\CommandBus\Contracts\CommandTranslator;
10
11
class CommandBusMiddleware implements CommandBusMiddlewareInterface
12
{
13
    /** @var CommandTranslator */
14
    protected $commandTranslator;
15
16
    /** @var CommandHandlerResolver */
17
    protected $handlerResolver;
18
19
    /**
20
     * @param CommandTranslator      $commandTranslator
21
     * @param CommandHandlerResolver $handlerResolver
22
     */
23
    public function __construct(CommandTranslator $commandTranslator, CommandHandlerResolver $handlerResolver)
24
    {
25
        $this->commandTranslator = $commandTranslator;
26
        $this->handlerResolver = $handlerResolver;
27
    }
28
29
    /**
30
     * @param Command       $command
31
     * @param callable|null $next
32
     */
33
    public function __invoke(Command $command, callable $next = null)
34
    {
35
        $handlerName = $this->commandTranslator->handlerName($command);
36
37
        /** @var $handlerInstance CommandHandler */
38
        $handlerInstance = $this->handlerResolver->instantiate($handlerName);
39
        $handlerInstance($command);
40
41
        if ($next) {
42
            $next($command);
43
        }
44
    }
45
}
46