EventDispatcherBySubscriber   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 3
dl 0
loc 38
ccs 18
cts 18
cp 1
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 1
A dispatchEvent() 0 20 4
1
<?php
2
/******************************************************************************
3
 * Copyright (c) 2016 Constantin Galbenu <[email protected]>             *
4
 ******************************************************************************/
5
6
namespace Gica\Cqrs\Event\EventDispatcher;
7
8
9
use Gica\Cqrs\Event\EventDispatcher;
10
use Gica\Cqrs\Event\EventSubscriber;
11
use Gica\Cqrs\Event\EventWithMetaData;
12
use Psr\Log\LoggerInterface;
13
14
class EventDispatcherBySubscriber implements EventDispatcher
15
{
16
    /** @var EventSubscriber */
17
    private $eventSubscriber;
18
19
    /** @var LoggerInterface|null */
20
    private $logger;
21
22 11
    public function __construct(
23
        EventSubscriber $eventSubscriber,
24
        LoggerInterface $logger = null
25
    )
26
    {
27 11
        $this->eventSubscriber = $eventSubscriber;
28 11
        $this->logger = $logger;
29 11
    }
30
31 6
    public function dispatchEvent(EventWithMetaData $eventWithMetadata)
32
    {
33 6
        $listeners = $this->eventSubscriber->getListenersForEvent($eventWithMetadata->getEvent());
34
35 6
        foreach ($listeners as $listener) {
36
            try {
37 2
                call_user_func($listener, $eventWithMetadata->getEvent(), $eventWithMetadata->getMetaData());
38 1
            } catch (\Throwable $exception) {
39 1
                if ($this->logger) {
40 1
                    $this->logger->error(
41 1
                        sprintf(
42 1
                            "Dispatch event of type %s to %s failed: %s",
43 1
                            get_class($eventWithMetadata->getEvent()),
44 1
                            get_class($listener[0]),
45 1
                            $exception->getMessage()),
46 2
                        $exception->getTrace());
47
                }
48
            }
49
        }
50
    }
51
}