Passed
Push — master ( 823aee...b9b37f )
by Alec
13:15 queued 12s
created

Facade   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 18
c 3
b 0
f 0
dl 0
loc 50
rs 10
wmc 6

5 Methods

Rating   Name   Duplication   Size   Complexity  
A createSpinner() 0 4 1
A getLoop() 0 6 1
A registerLoopHelperClass() 0 5 1
A getLoopHelper() 0 6 2
A getConfigBuilder() 0 4 1
1
<?php
2
3
declare(strict_types=1);
4
// 16.03.23
5
6
namespace AlecRabbit\Spinner;
7
8
use AlecRabbit\Spinner\Core\Config\Contract\IConfig;
9
use AlecRabbit\Spinner\Core\Config\Contract\IConfigBuilder;
10
use AlecRabbit\Spinner\Core\Config\Contract\IConfigBuilderGetter;
11
use AlecRabbit\Spinner\Core\Contract\ILoopAdapter;
12
use AlecRabbit\Spinner\Core\Contract\ILoopHelper;
13
use AlecRabbit\Spinner\Core\Contract\ISpinner;
14
use AlecRabbit\Spinner\Core\Factory\A\ADefaultsAwareClass;
15
use AlecRabbit\Spinner\Core\Factory\A\ASpinnerFactory;
16
use AlecRabbit\Spinner\Core\Factory\Contract\ILoopGetter;
17
use AlecRabbit\Spinner\Core\Factory\Contract\ISpinnerFactory;
18
use AlecRabbit\Spinner\Exception\DomainException;
19
use AlecRabbit\Spinner\Exception\InvalidArgumentException;
20
use AlecRabbit\Spinner\Helper\Asserter;
21
22
final class Facade extends ADefaultsAwareClass implements
23
    ISpinnerFactory,
24
    IConfigBuilderGetter,
25
    ILoopGetter
26
{
27
    protected static ?string $loopHelperClass = null;
28
29
    public static function getConfigBuilder(): IConfigBuilder
30
    {
31
        return
32
            ASpinnerFactory::getConfigBuilder();
33
    }
34
35
    public static function createSpinner(IConfig $config = null): ISpinner
36
    {
37
        return
38
            ASpinnerFactory::createSpinner($config);
39
    }
40
41
    /**
42
     * @throws DomainException
43
     */
44
    public static function getLoop(): ILoopAdapter
45
    {
46
        /** @var ILoopHelper $loopHelper */
47
        $loopHelper = self::getLoopHelper();
48
        return
49
            $loopHelper::get();
50
    }
51
52
    /**
53
     * @throws DomainException
54
     */
55
    public static function getLoopHelper(): string
56
    {
57
        if (null === self::$loopHelperClass) {
58
            throw new DomainException('LoopHelper class is not registered');
59
        }
60
        return self::$loopHelperClass;
61
    }
62
63
    /**
64
     * @param class-string $class
0 ignored issues
show
Documentation Bug introduced by
The doc comment class-string at position 0 could not be parsed: Unknown type name 'class-string' at position 0 in class-string.
Loading history...
65
     * @throws InvalidArgumentException
66
     */
67
    public static function registerLoopHelperClass(string $class): void
68
    {
69
        Asserter::assertClassExists($class);
70
        Asserter::isSubClass($class, ILoopHelper::class);
71
        self::$loopHelperClass = $class;
72
    }
73
}
74