EventProviderTrait   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 8
eloc 12
c 0
b 0
f 0
dl 0
loc 39
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A recordEvent() 0 4 2
A aggregateEventsFrom() 0 4 2
A releaseEvents() 0 6 2
A pullEventsFrom() 0 4 2
1
<?php
2
declare(strict_types=1);
3
4
namespace OniBus\Event;
5
6
use Generator;
7
8
trait EventProviderTrait
9
{
10
    /**
11
     * @var array
12
     */
13
    protected $events = [];
14
15
    /**
16
     * @var array
17
     */
18
    protected $aggregateEvents = [];
19
20
    public function recordEvent(Event ...$events)
21
    {
22
        foreach ($events as $event) {
23
            $this->events[] = $event;
24
        }
25
    }
26
27
    public function aggregateEventsFrom(ProvidesEvent ...$eventRecorders)
28
    {
29
        foreach ($eventRecorders as $eventRecorder) {
30
            $this->aggregateEvents[] = $eventRecorder;
31
        }
32
    }
33
34
    public function pullEventsFrom(ProvidesEvent ...$eventRecorders)
35
    {
36
        foreach ($eventRecorders as $eventRecorder) {
37
            $this->recordEvent(...$eventRecorder->releaseEvents());
38
        }
39
    }
40
41
    public function releaseEvents(): Generator
42
    {
43
        $this->pullEventsFrom(...$this->aggregateEvents);
44
45
        while ($event = array_shift($this->events)) {
46
            yield $event;
47
        }
48
    }
49
}
50