TransitionEventCallbackResolver::__construct()   A
last analyzed

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
eloc 1
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Dflydev\FiniteStateMachine\TransitionEvent;
6
7
use Dflydev\FiniteStateMachine\Contracts\TransitionEventCallback;
8
use Dflydev\FiniteStateMachine\Contracts\TransitionEventCallbackFactory;
9
10
class TransitionEventCallbackResolver
11
{
12
    private array $transitionEventCallbackFactories;
13
14 21
    public function __construct(TransitionEventCallbackFactory ...$transitionEventCallbackFactories)
15
    {
16 21
        $this->transitionEventCallbackFactories = $transitionEventCallbackFactories + static::defaultTransitionEventCallbackFactories();
17 21
    }
18
19
    public function register(TransitionEventCallbackFactory $transitionEventCallbackFactory): void
20
    {
21
        $this->transitionEventCallbackFactories[] = $transitionEventCallbackFactory;
22
    }
23
24
    /**
25
     * @param mixed $do
26
     */
27 21
    public function resolve($do): TransitionEventCallback
28
    {
29 21
        foreach ($this->transitionEventCallbackFactories as $transitionEventCallbackFactory) {
30 21
            if ($transitionEventCallbackFactory->supports($do)) {
31 21
                return $transitionEventCallbackFactory->build($do);
32
            }
33
        }
34
35
        throw new \RuntimeException('Could not resolve transition event callback');
36
    }
37
38 21
    public static function defaultTransitionEventCallbackFactories(): array
39
    {
40
        return [
41 21
            new CallableTransitionEventCallbackFactory(),
42
        ];
43
    }
44
}
45