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

ADefaults   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 141
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 39
c 2
b 0
f 0
dl 0
loc 141
rs 10
wmc 9

29 Methods

Rating   Name   Duplication   Size   Complexity  
A hp$0 ➔ createTerminalSettings() 0 14 3
A getOutputStream() 0 3 1
A getPercentNumberFormat() 0 3 1
A getRunMode() 0 3 1
A getRootWidgetSettings() 0 3 1
A hp$0 ➔ createWidgetSettings() 0 3 1
createTerminalSettings() 0 14 ?
createWidgetSettings() 0 3 ?
A getClasses() 0 3 1
A getSpinnerSettings() 0 3 1
A getDriverSettings() 0 3 1
A getWidgetSettings() 0 3 1
createSpinnerSettings() 0 3 ?
A getMaxShutdownDelay() 0 3 1
A isModeSynchronous() 0 3 1
A hp$0 ➔ createLoopSettings() 0 3 1
getInstance() 0 8 ?
A getTerminalSettings() 0 3 1
A createDefaultsClasses() 0 3 1
createDriverSettings() 0 3 ?
A getProbeClasses() 0 3 1
A getCharPattern() 0 6 2
A hp$0 ➔ createSpinnerSettings() 0 3 1
A getStylePattern() 0 6 2
A getShutdownDelay() 0 3 1
A getLoopSettings() 0 3 1
A hp$0 ➔ getInstance() 0 8 2
createLoopSettings() 0 3 ?
A hp$0 ➔ createDriverSettings() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
// 20.06.22
5
6
namespace AlecRabbit\Spinner\Core\Defaults\A;
7
8
use AlecRabbit\Spinner\Contract\RunMode;
9
use AlecRabbit\Spinner\Core\Defaults\Contract\IDefaults;
10
use AlecRabbit\Spinner\Core\Defaults\Contract\IDefaultsClasses;
11
use AlecRabbit\Spinner\Core\Defaults\Contract\IDriverSettings;
12
use AlecRabbit\Spinner\Core\Defaults\Contract\ILoopSettings;
13
use AlecRabbit\Spinner\Core\Defaults\Contract\ISpinnerSettings;
14
use AlecRabbit\Spinner\Core\Defaults\Contract\ITerminalSettings;
15
use AlecRabbit\Spinner\Core\Defaults\Contract\IWidgetSettings;
16
use AlecRabbit\Spinner\Core\Pattern\Char\Ascii;
17
use AlecRabbit\Spinner\Core\Pattern\Contract\IPattern;
18
use AlecRabbit\Spinner\Core\Pattern\Style\Rainbow;
19
use AlecRabbit\Spinner\Core\Terminal\Contract\ITerminalProbe;
20
use AlecRabbit\Spinner\Core\Terminal\NativeTerminalProbe;
21
use Traversable;
22
23
abstract class ADefaults extends ASettableDefaults
24
{
25
    private static ?IDefaults $objInstance = null; // private, singleton
26
27
28
    public function getRootWidgetSettings(): IWidgetSettings
29
    {
30
        return static::$rootWidgetSettings;
31
    }
32
33
    public function getWidgetSettings(): IWidgetSettings
34
    {
35
        return static::$widgetSettings;
36
    }
37
38
    public function getClasses(): IDefaultsClasses
39
    {
40
        return static::$classes;
41
    }
42
43
    /** @inheritdoc */
44
    public function getOutputStream()
45
    {
46
        return static::$outputStream;
47
    }
48
49
    public function getShutdownDelay(): float|int
50
    {
51
        return static::$shutdownDelay;
52
    }
53
54
    public function isModeSynchronous(): bool
55
    {
56
        return static::$runMode === RunMode::SYNCHRONOUS;
57
    }
58
59
    public function getRunMode(): RunMode
60
    {
61
        return static::$runMode;
62
    }
63
64
    public function getMaxShutdownDelay(): float|int
65
    {
66
        return static::$shutdownMaxDelay;
67
    }
68
69
    public function getPercentNumberFormat(): string
70
    {
71
        return static::$percentNumberFormat;
72
    }
73
74
    public function getStylePattern(): IPattern
75
    {
76
        if (null === static::$stylePattern) {
77
            static::$stylePattern = new Rainbow();
78
        }
79
        return static::$stylePattern;
80
    }
81
82
    public function getCharPattern(): IPattern
83
    {
84
        if (null === static::$charPattern) {
85
            static::$charPattern = new Ascii();
86
        }
87
        return static::$charPattern;
88
    }
89
90
    public function getProbeClasses(): Traversable
91
    {
92
        return static::$loopProbes;
93
    }
94
95
    public function getTerminalSettings(): ITerminalSettings
96
    {
97
        return static::$terminalSettings;
98
    }
99
100
    public function getDriverSettings(): IDriverSettings
101
    {
102
        return static::$driverSettings;
103
    }
104
105
    public function getLoopSettings(): ILoopSettings
106
    {
107
        return static::$loopSettings;
108
    }
109
110
    public function getSpinnerSettings(): ISpinnerSettings
111
    {
112
        return static::$spinnerSettings;
113
    }
114
115
    protected function createDefaultsClasses(): IDefaultsClasses
116
    {
117
        return ADefaultsClasses::getInstance($this);
118
    }
119
120
    final public static function getInstance(): IDefaults
121
    {
122
        if (null === self::$objInstance) {
123
            self::$objInstance =
124
                new class () extends ADefaults {
125
                };
126
        }
127
        return self::$objInstance;
128
    }
129
130
    protected function createTerminalSettings(): ITerminalSettings
131
    {
132
        $colorMode = NativeTerminalProbe::getColorMode();
133
        $width = NativeTerminalProbe::getWidth();
134
        $cursor = NativeTerminalProbe::getCursorMode();
135
136
        /** @var ITerminalProbe $terminalProbe */
137
        foreach (static::$terminalProbes as $terminalProbe) {
138
            if ($terminalProbe::isSupported()) {
139
                $colorMode = $terminalProbe::getColorMode();
140
                $width = $terminalProbe::getWidth();
141
            }
142
        }
143
        return ATerminalSettings::getInstance($this, $colorMode, $width, $cursor);
144
    }
145
146
    protected function createDriverSettings(): IDriverSettings
147
    {
148
        return ADriverSettings::getInstance($this);
149
    }
150
151
    protected function createWidgetSettings(): IWidgetSettings
152
    {
153
        return AWidgetSettings::getInstance($this);
154
    }
155
156
    protected function createLoopSettings(): ILoopSettings
157
    {
158
        return ALoopSettings::getInstance($this);
159
    }
160
161
    protected function createSpinnerSettings(): ISpinnerSettings
162
    {
163
        return ASpinnerSettings::getInstance($this);
164
    }
165
}
166