Passed
Push — master ( de3d61...be839c )
by Alec
13:42 queued 13s
created

SettingsProviderBuilder::getRootWidgetConfig()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 6
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
6
namespace AlecRabbit\Spinner\Core\Builder\Settings;
7
8
use AlecRabbit\Spinner\Core\Builder\Settings\Contract\IAuxSettingsBuilder;
9
use AlecRabbit\Spinner\Core\Builder\Settings\Contract\IDriverSettingsBuilder;
10
use AlecRabbit\Spinner\Core\Builder\Settings\Contract\ISettingsProviderBuilder;
11
use AlecRabbit\Spinner\Core\CharFrame;
12
use AlecRabbit\Spinner\Core\Config\Contract\IWidgetConfig;
13
use AlecRabbit\Spinner\Core\Config\WidgetConfig;
14
use AlecRabbit\Spinner\Core\Contract\ISettingsProvider;
15
use AlecRabbit\Spinner\Core\Factory\Contract\ILoopSettingsFactory;
16
use AlecRabbit\Spinner\Core\Factory\Contract\ITerminalSettingsFactory;
17
use AlecRabbit\Spinner\Core\Pattern\CharPattern\Snake;
18
use AlecRabbit\Spinner\Core\Pattern\NoCharPattern;
19
use AlecRabbit\Spinner\Core\Pattern\NoStylePattern;
20
use AlecRabbit\Spinner\Core\Pattern\StylePattern\Rainbow;
21
use AlecRabbit\Spinner\Core\Settings\SettingsProvider;
22
23
final class SettingsProviderBuilder implements ISettingsProviderBuilder
24
{
25
    public function __construct(
26
        protected ILoopSettingsFactory $loopSettingsFactory,
27
        protected ITerminalSettingsFactory $terminalSettingsFactory,
28
        protected IAuxSettingsBuilder $auxSettingsBuilder,
29
        protected IDriverSettingsBuilder $driverSettingsBuilder,
30
    ) {
31
    }
32
33
    public function build(): ISettingsProvider
34
    {
35
        return new SettingsProvider(
36
            auxSettings: $this->auxSettingsBuilder->build(),
37
            terminalSettings: $this->terminalSettingsFactory->createTerminalSettings(),
38
            loopSettings: $this->loopSettingsFactory->createLoopSettings(),
39
            driverSettings: $this->driverSettingsBuilder->build(),
40
            widgetConfig: $this->getWidgetConfig(),
41
            rootWidgetConfig: $this->getRootWidgetConfig(),
42
        );
43
    }
44
45
    protected function getWidgetConfig(): IWidgetConfig
46
    {
47
        return
48
            new WidgetConfig(
49
                leadingSpacer: CharFrame::createEmpty(),
50
                trailingSpacer: CharFrame::createSpace(),
51
                stylePattern: new NoStylePattern(),
52
                charPattern: new NoCharPattern(),
53
            );
54
    }
55
56
    protected function getRootWidgetConfig(): IWidgetConfig
57
    {
58
        return
59
            new WidgetConfig(
60
                stylePattern: new Rainbow(),
61
                charPattern: new Snake(),
62
            );
63
    }
64
}
65