Passed
Push — master ( ad1f76...dbc2bc )
by Alexander
02:24
created

Provider   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 14
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 2
eloc 6
c 1
b 0
f 0
dl 0
loc 14
ccs 7
cts 7
cp 1
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A getListenersForEvent() 0 5 1
1
<?php
2
3
namespace Yiisoft\EventDispatcher\Provider;
4
5
use Psr\EventDispatcher\ListenerProviderInterface;
6
7
/**
8
 * Provider is a listener provider that registers event listeners for interfaces used in callable type-hints
9
 * and gives out a list of handlers by event interface provided for further use with Dispatcher.
10
 *
11
 * ```php
12
 * $listeners = (new ListenerCollection())->add(function (AfterDocumentProcessed $event) {
13
 *    $document = $event->getDocument();
14
 *    // do something with document
15
 * });
16
 *
17
 * $provider = new Yiisoft\EventDispatcher\Provider\Provider($listeners);
18
 * ```
19
 */
20
final class Provider implements ListenerProviderInterface
21
{
22
    private ListenerCollection $listeners;
23
24 7
    public function __construct(ListenerCollection $listeners)
25
    {
26 7
        $this->listeners = $listeners;
27 7
    }
28
29 7
    public function getListenersForEvent(object $event): iterable
30
    {
31 7
        yield from $this->listeners->getForEvents(get_class($event));
32 7
        yield from $this->listeners->getForEvents(...array_values(class_parents($event)));
33 7
        yield from $this->listeners->getForEvents(...array_values(class_implements($event)));
34 7
    }
35
}
36