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

Provider::isInvokable()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
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