Passed
Pull Request — master (#5)
by Jan-Marten
03:41
created

OperationHandler::handle()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 6
ccs 4
cts 4
cp 1
crap 1
rs 10
1
<?php
2
/**
3
 * Copyright MediaCT. All rights reserved.
4
 * https://www.mediact.nl
5
 */
6
7
namespace Johmanx10\Transaction;
8
9
use Johmanx10\Transaction\Visitor\OperationVisitorAwareInterface;
10
use Johmanx10\Transaction\Visitor\OperationVisitorInterface;
11
use Johmanx10\Transaction\Visitor\TransactionFactory;
12
use Johmanx10\Transaction\Visitor\TransactionFactoryInterface;
13
14
class OperationHandler implements
15
    OperationHandlerInterface,
16
    OperationVisitorAwareInterface
17
{
18
    /** @var OperationVisitorInterface[] */
19
    private $visitors = [];
20
21
    /** @var TransactionFactoryInterface */
22
    private $factory;
23
24
    /**
25
     * Constructor.
26
     *
27
     * @param TransactionFactoryInterface|null $factory
28
     */
29 1
    public function __construct(TransactionFactoryInterface $factory = null)
30
    {
31 1
        $this->factory = $factory ?? new TransactionFactory();
32 1
    }
33
34
    /**
35
     * Handle the given operations.
36
     *
37
     * @param OperationInterface ...$operations
38
     *
39
     * @return void
40
     */
41 1
    public function handle(OperationInterface ...$operations): void
42
    {
43
        $this
44 1
            ->factory
45 1
            ->createTransaction(...$operations)
46 1
            ->commit(...array_values($this->visitors));
47 1
    }
48
49
    /**
50
     * Attach operation visitors to the current container.
51
     *
52
     * @param OperationVisitorInterface ...$visitors
53
     *
54
     * @return void
55
     */
56 1
    public function attachVisitor(OperationVisitorInterface ...$visitors): void
57
    {
58 1
        foreach ($visitors as $visitor) {
59 1
            $this->visitors[spl_object_hash($visitor)] = $visitor;
60
        }
61 1
    }
62
63
    /**
64
     * Detach operation visitors to the current container.
65
     *
66
     * @param OperationVisitorInterface ...$visitors
67
     *
68
     * @return void
69
     */
70 1
    public function detachVisitor(OperationVisitorInterface ...$visitors): void
71
    {
72 1
        foreach ($visitors as $visitor) {
73 1
            unset($this->visitors[spl_object_hash($visitor)]);
74
        }
75 1
    }
76
}
77