Completed
Push — master ( 8b2d07...19f052 )
by Daniel
04:03 queued 01:35
created

SimpleEmitter::extractEventName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
/**
3
 * @package event
4
 */
5
6
7
namespace Mleko\Event;
8
9
10
class SimpleEmitter implements MutableEmitter
11
{
12
13
    /** @var array */
14
    private $listeners = [];
15
16
    /** @var EventNameExtractor */
17
    private $eventNameExtractor;
18
19
    /**
20
     * SimpleEventBus constructor.
21
     * @param EventNameExtractor $eventNameExtractor
22
     */
23 3
    public function __construct(EventNameExtractor $eventNameExtractor)
24
    {
25 3
        $this->eventNameExtractor = $eventNameExtractor;
26 3
    }
27
28
    /**
29
     * @param object $event
30
     * @return void
31
     */
32 3
    public function emit($event)
33
    {
34 3
        $eventName = $this->extractEventName($event);
35 3
        $eventListeners = $this->getEventListeners($eventName);
36 3
        foreach ($eventListeners as $listener) {
37 3
            $listener->handle($event);
0 ignored issues
show
Bug introduced by
The call to handle() misses a required argument $meta.

This check looks for function calls that miss required arguments.

Loading history...
38
        }
39
    }
40
41
    /**
42
     * @param string $eventName
43
     * @param Listener $listener
44
     * @return Subscription
45
     */
46 3
    public function addListener($eventName, Listener $listener)
47
    {
48 3
        $this->listeners[$eventName][] = $listener;
49 3
        return new Subscription($eventName, $listener, $this);
50
    }
51
52
    /**
53
     * @param string $eventName
54
     * @param Listener $listener
55
     * @return bool
56
     */
57 1
    public function removeListener($eventName, Listener $listener)
58
    {
59 1
        $eventListeners = $this->getEventListeners($eventName);
60 1
        foreach ($eventListeners as $key => $eventListener) {
61
            if ($listener === $eventListener) {
62
                unset($this->listeners[$eventName][$key]);
63
                return true;
64
            }
65
        }
66 1
        return false;
67
    }
68
69
    /**
70
     * @param $event
71
     * @return string
72
     */
73 3
    private function extractEventName($event)
74
    {
75 3
        return $this->eventNameExtractor->extract($event);
76
    }
77
78
    /**
79
     * @param $eventName
80
     * @return Listener[]
81
     */
82 3
    private function getEventListeners($eventName)
83
    {
84 3
        $eventListeners = array_key_exists($eventName, $this->listeners) ? $this->listeners[$eventName] : [];
85 3
        return $eventListeners;
86
    }
87
}
88