Completed
Pull Request — master (#66)
by Frank
07:06 queued 04:59
created

LightSwitch::createSnapshotState()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace EventSauce\EventSourcing\Snapshotting\Tests;
6
7
use EventSauce\EventSourcing\AggregateRootBehaviour;
8
use EventSauce\EventSourcing\AggregateRootId;
9
use EventSauce\EventSourcing\Snapshotting\SnapshottingBehaviour;
10
use EventSauce\EventSourcing\Snapshotting\AggregateRootWithSnapshotting;
11
12
class LightSwitch implements AggregateRootWithSnapshotting
13
{
14
    use AggregateRootBehaviour;
15
    use SnapshottingBehaviour;
16
17
    const OFF = false;
18
    const ON = true;
19
20
    private $state = self::OFF;
21
22
    private function createSnapshotState()
23
    {
24
        return $this->state;
25
    }
26
27
    public function state(): bool
28
    {
29
        return $this->state;
30
    }
31
32
    public function turnOn(): void
33
    {
34
        if (self::OFF == $this->state) {
35
            $this->recordThat(LightSwitchWasFlipped::on());
36
        }
37
    }
38
39
    public function turnOff(): void
40
    {
41
        if (self::ON == $this->state) {
42
            $this->recordThat(LightSwitchWasFlipped::off());
43
        }
44
    }
45
46
    protected function applyLightSwitchWasFlipped(LightSwitchWasFlipped $event): void
47
    {
48
        $this->state = $event->state();
49
    }
50
51
    protected static function reconstituteFromSnapshotState(AggregateRootId $id, bool $state): AggregateRootWithSnapshotting
52
    {
53
        $lightSwitch = new static($id);
54
        $lightSwitch->state = $state;
55
56
        return $lightSwitch;
57
    }
58
}
59