EventManager   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 1
dl 0
loc 50
ccs 21
cts 21
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A listen() 0 13 2
A isValidListener() 0 7 2
A trigger() 0 9 3
1
<?php
2
namespace Aeq\Hal\Event;
3
4
use Aeq\Hal\Event\Exception\InvalidListenerException;
5
6
class EventManager
7
{
8
    /**
9
     * @var array
10
     */
11
    private static $listeners = [];
12
13
    /**
14
     * @param EventInterface $event
15
     */
16 1
    public function trigger(EventInterface $event)
17
    {
18 1
        foreach (self::$listeners as $listener) {
19 1
            list($registeredEvent, $registeredListener) = $listener;
20 1
            if (get_class($event) === $registeredEvent) {
21 1
                call_user_func_array([$registeredListener, 'handle'], [$event]);
22 1
            }
23 1
        }
24 1
    }
25
26
    /**
27
     * @param string $event
28
     * @param string $listener
29
     */
30 2
    public function listen($event, $listener)
31
    {
32 2
        if (!$this->isValidListener($listener)) {
33 1
            throw new InvalidListenerException(
34 1
                sprintf('Listener "%s" not valid. Listener should be a POPO object with a "handle" method', $listener),
35
                1472634731
36 1
            );
37
        }
38 1
        self::$listeners[] = [
39 1
            $event,
40
            $listener
41 1
        ];
42 1
    }
43
44
    /**
45
     * @param string $listener
46
     * @return bool
47
     */
48 2
    private function isValidListener($listener)
49
    {
50 2
        if (is_callable([$listener, 'handle'])) {
51 1
            return true;
52
        }
53 1
        return false;
54
    }
55
}
56