Passed
Push — master ( dbfb37...74a6ed )
by Frank
46s queued 13s
created

retrieveAllAfterVersion()   A

Complexity

Conditions 5
Paths 6

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 5

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 7
c 1
b 0
f 0
nc 6
nop 2
dl 0
loc 13
ccs 8
cts 8
cp 1
crap 5
rs 9.6111
1
<?php
2
3
declare(strict_types=1);
4
5
namespace EventSauce\EventSourcing;
6
7
use Generator;
8
9
final class InMemoryMessageRepository implements MessageRepository
10
{
11
    /**
12
     * @var Message[]
13
     */
14
    private $messages = [];
15
16
    /**
17
     * @var object[]
18
     */
19
    private $lastCommit = [];
20
21
    /**
22
     * @return object[]
23
     */
24 13
    public function lastCommit(): array
25
    {
26 13
        return $this->lastCommit;
27
    }
28
29 13
    public function purgeLastCommit(): void
30
    {
31 13
        $this->lastCommit = [];
32 13
    }
33
34 15
    public function persist(Message ...$messages): void
35
    {
36 15
        $this->lastCommit = [];
37
38
        /* @var Message $event */
39 15
        foreach ($messages as $message) {
40 10
            $this->messages[] = $message;
41 10
            $this->lastCommit[] = $message->event();
42
        }
43 15
    }
44
45 15
    public function retrieveAll(AggregateRootId $id): Generator
46
    {
47 15
        $lastMessage = null;
48
49 15
        foreach ($this->messages as $message) {
50 7
            if ($id->toString() === $message->header(Header::AGGREGATE_ROOT_ID)->toString()) {
51 6
                yield $message;
52 6
                $lastMessage = $message;
53
            }
54
        }
55
56 15
        return $lastMessage instanceof Message ? $lastMessage->aggregateVersion() : 0;
57
    }
58
59 1
    public function retrieveAllAfterVersion(AggregateRootId $id, int $aggregateRootVersion): Generator
60
    {
61 1
        $lastMessage = null;
62
63 1
        foreach ($this->messages as $message) {
64 1
            if ($id->toString() === $message->header(Header::AGGREGATE_ROOT_ID)->toString()
65 1
                && $message->header(Header::AGGREGATE_ROOT_VERSION) > $aggregateRootVersion) {
66 1
                yield $message;
67 1
                $lastMessage = $message;
68
            }
69
        }
70
71 1
        return $lastMessage instanceof Message ? $lastMessage->aggregateVersion() : 0;
72
    }
73
}
74