Passed
Push — master ( aefa73...fefe4c )
by Gabriel
14:43
created

DefaultProvider   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 35
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 8
dl 0
loc 35
rs 10
c 0
b 0
f 0
wmc 4

3 Methods

Rating   Name   Duplication   Size   Complexity  
A addListener() 0 3 1
A listen() 0 3 1
A getListenersForEvent() 0 10 3
1
<?php
2
3
namespace ByTIC\EventDispatcher\ListenerProviders;
4
5
/**
6
 * Class DefaultProvider
7
 * @package ByTIC\EventDispatcher\ListenerProvider
8
 */
9
class DefaultProvider extends PriorityListenerProvider
10
{
11
    use Traits\ListenForInterfacesTrait;
0 ignored issues
show
Bug introduced by
The trait ByTIC\EventDispatcher\Li...istenForInterfacesTrait requires the property $listeners which is not provided by ByTIC\EventDispatcher\Li...oviders\DefaultProvider.
Loading history...
12
13
    /**
14
     * @inheritDoc
15
     */
16
    public function getListenersForEvent(object $event): iterable
17
    {
18
        yield from parent::getListenersForEvent($event);
19
20
        if (method_exists($event, 'eventName')) {
21
            yield from $this->getListenersForEventName($event->eventName());
22
        } elseif (method_exists($event, 'getName')) {
23
            yield from $this->getListenersForEventName($event->getName());
24
        }
25
        yield from $this->getListenersForEventInterfaces($event);
26
    }
27
28
    /**
29
     * @param string $eventName
30
     * @param callable|string $listener
31
     * @param int $priority
32
     */
33
    public function addListener(string $eventName, $listener, int $priority = ListenerPriority::NORMAL): void
34
    {
35
        $this->attach($listener, $priority, $eventName);
36
    }
37
38
    /**
39
     * @param string $eventName
40
     * @param callable|string $listener
41
     * @param int $priority
42
     */
43
    public function listen(string $eventName, $listener, int $priority = ListenerPriority::NORMAL): void
44
    {
45
        $this->attach($listener, $priority, $eventName);
46
    }
47
}
48