Passed
Push — master ( 200d88...9b81d7 )
by Alec
02:43 queued 15s
created

getStyleFrameCollectionRenderer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 0
dl 0
loc 5
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
// 20.03.23
5
namespace AlecRabbit\Spinner\Core\A;
6
7
use AlecRabbit\Spinner\Contract\IAnsiStyleConverter;
8
use AlecRabbit\Spinner\Contract\IFrameCollectionRenderer;
9
use AlecRabbit\Spinner\Contract\IPattern;
10
use AlecRabbit\Spinner\Core\CharFrameCollectionRenderer;
11
use AlecRabbit\Spinner\Core\Defaults\Contract\IDefaults;
12
use AlecRabbit\Spinner\Core\FrameRenderer;
0 ignored issues
show
Bug introduced by
The type AlecRabbit\Spinner\Core\FrameRenderer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
13
use AlecRabbit\Spinner\Core\Pattern\Contract\IStylePattern;
14
use AlecRabbit\Spinner\Core\Revolver\Contract\IFrameRevolver;
15
use AlecRabbit\Spinner\Core\Revolver\Contract\IFrameRevolverBuilder;
16
use AlecRabbit\Spinner\Core\Revolver\FrameCollectionRevolver;
17
use AlecRabbit\Spinner\Core\StyleFrameCollectionRenderer;
18
use AlecRabbit\Spinner\Core\StyleFrameRenderer;
19
use AlecRabbit\Spinner\Core\Widget\A\ARevolverBuilder;
20
use AlecRabbit\Spinner\Exception\DomainException;
21
22
abstract class AFrameRevolverBuilder extends ARevolverBuilder implements IFrameRevolverBuilder
23
{
24
    protected ?IPattern $pattern = null;
25
26
    public function __construct(
27
        IDefaults $defaults,
28
        protected IAnsiStyleConverter $colorConverter,
29
    ) {
30
        parent::__construct($defaults);
31
    }
32
33
34
    public function withPattern(IPattern $pattern): static
35
    {
36
        $clone = clone $this;
37
        $clone->pattern = $pattern;
38
        return $clone;
39
    }
40
41
    public function build(): IFrameRevolver
42
    {
43
        self::assertPattern($this->pattern);
44
45
        $colorMode = $this->defaults->getTerminalSettings()->getStyleMode();
0 ignored issues
show
Unused Code introduced by
The assignment to $colorMode is dead and can be removed.
Loading history...
46
47
        if ($this->pattern instanceof IStylePattern) {
48
            return
49
                new FrameCollectionRevolver(
50
                    $this->getStyleFrameCollectionRenderer()
51
                        ->pattern($this->pattern)
52
                        ->render(),
53
                    $this->pattern->getInterval()
54
                );
55
        }
56
        return
57
            new FrameCollectionRevolver(
58
                $this->getCharFrameCollectionRenderer()
59
                    ->pattern($this->pattern)
60
                    ->render(),
61
                $this->pattern->getInterval()
62
            );
63
    }
64
65
    /**
66
     * @throws DomainException
67
     */
68
    protected static function assertPattern(?IPattern $pattern): void
69
    {
70
        if (null === $pattern) {
71
            throw new DomainException('Pattern is not set.');
72
        }
73
    }
74
75
    private function getStyleFrameCollectionRenderer(): IFrameCollectionRenderer
76
    {
77
        return
78
            new StyleFrameCollectionRenderer(
79
                new StyleFrameRenderer($this->colorConverter),
80
            );
81
    }
82
83
    private function getCharFrameCollectionRenderer(): CharFrameCollectionRenderer
84
    {
85
        return
86
            new CharFrameCollectionRenderer();
87
    }
88
}