TransitionEventCallbackResolver   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 32
Duplicated Lines 0 %

Test Coverage

Coverage 69.23%

Importance

Changes 0
Metric Value
wmc 6
eloc 10
dl 0
loc 32
ccs 9
cts 13
cp 0.6923
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A register() 0 3 1
A __construct() 0 3 1
A defaultTransitionEventCallbackFactories() 0 4 1
A resolve() 0 9 3
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