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

AFrameRevolverBuilder   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 35
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 17
c 0
b 0
f 0
dl 0
loc 35
rs 10
wmc 5

3 Methods

Rating   Name   Duplication   Size   Complexity  
A withPattern() 0 5 1
A assertPattern() 0 4 2
A build() 0 14 2
1
<?php
2
3
declare(strict_types=1);
4
// 20.03.23
5
namespace AlecRabbit\Spinner\Core\A;
6
7
use AlecRabbit\Spinner\Core\FrameRenderer;
8
use AlecRabbit\Spinner\Core\Pattern\Contract\IPattern;
9
use AlecRabbit\Spinner\Core\Pattern\Contract\IStylePattern;
10
use AlecRabbit\Spinner\Core\Revolver\Contract\IFrameRevolver;
11
use AlecRabbit\Spinner\Core\Revolver\Contract\IFrameRevolverBuilder;
12
use AlecRabbit\Spinner\Core\Revolver\FrameCollectionRevolver;
13
use AlecRabbit\Spinner\Core\StyleFrameRenderer;
14
use AlecRabbit\Spinner\Core\Widget\A\ARevolverBuilder;
15
use AlecRabbit\Spinner\Exception\DomainException;
16
17
abstract class AFrameRevolverBuilder extends ARevolverBuilder implements IFrameRevolverBuilder
18
{
19
    protected ?IPattern $pattern = null;
20
21
    public function withPattern(IPattern $pattern): static
22
    {
23
        $clone = clone $this;
24
        $clone->pattern = $pattern;
25
        return $clone;
26
    }
27
28
    public function build(): IFrameRevolver
29
    {
30
        self::assertPattern($this->pattern);
31
        if ($this->pattern instanceof IStylePattern) {
32
            return
33
                new FrameCollectionRevolver(
34
                    (new StyleFrameRenderer($this->pattern))->render(),
35
                    $this->pattern->getInterval()
36
                );
37
        }
38
        return
39
            new FrameCollectionRevolver(
40
                (new FrameRenderer($this->pattern))->render(),
41
                $this->pattern->getInterval()
42
            );
43
    }
44
45
    /**
46
     * @throws DomainException
47
     */
48
    protected static function assertPattern(?IPattern $pattern): void
49
    {
50
        if (null === $pattern) {
51
            throw new DomainException('Pattern is not set.');
52
        }
53
    }
54
}