NotifiesDomainEvents   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 3
c 2
b 0
f 0
lcom 1
cbo 3
dl 0
loc 48
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 1
A handle() 0 12 2
1
<?php
2
3
declare (strict_types = 1);
4
5
namespace HMLB\DDDBundle\MessageBus\Middleware;
6
7
use HMLB\DDDBundle\EventListener\CollectsEventsFromEntities;
8
use Psr\Log\LoggerInterface;
9
use SimpleBus\Message\Bus\MessageBus;
10
use SimpleBus\Message\Bus\Middleware\MessageBusMiddleware;
11
12
/**
13
 * NotifiesDomainEvents.
14
 *
15
 * @author Hugues Maignol <[email protected]>
16
 */
17
class NotifiesDomainEvents implements MessageBusMiddleware
18
{
19
    /**
20
     * @var MessageBus
21
     */
22
    private $eventBus;
23
    /**
24
     * @var CollectsEventsFromEntities
25
     */
26
    private $collectsEventsFromEntities;
27
28
    /**
29
     * @var LoggerInterface
30
     */
31
    private $logger;
32
33
    /**
34
     * @param LoggerInterface            $logger
35
     * @param MessageBus                 $eventBus
36
     * @param CollectsEventsFromEntities $collectsEventsFromEntities
37
     */
38
    public function __construct(
39
        LoggerInterface $logger,
40
        MessageBus $eventBus,
41
        CollectsEventsFromEntities $collectsEventsFromEntities
42
    ) {
43
        $this->logger = $logger;
44
        $this->eventBus = $eventBus;
45
        $this->collectsEventsFromEntities = $collectsEventsFromEntities;
46
    }
47
48
    /**
49
     * @param object   $message
50
     * @param callable $next
51
     */
52
    public function handle($message, callable $next)
53
    {
54
        $this->logger->debug('NotifiesDomainEvents calls next before collect events');
55
        $next($message);
56
        $events = $this->collectsEventsFromEntities->recordedMessages();
57
        $this->collectsEventsFromEntities->eraseMessages();
58
59
        $this->logger->debug('NotifiesDomainEvents notifies '.count($events).' events');
60
        foreach ($events as $event) {
61
            $this->eventBus->handle($event);
62
        }
63
    }
64
}
65