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

CharFrameCollectionRenderer   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 32
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 10
c 0
b 0
f 0
dl 0
loc 32
rs 10
wmc 7

4 Methods

Rating   Name   Duplication   Size   Complexity  
A generateFrames() 0 14 4
A createFrame() 0 3 1
A render() 0 3 1
A __construct() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
6
namespace AlecRabbit\Spinner\Extras\Render;
7
8
use AlecRabbit\Spinner\Contract\IFrame;
9
use AlecRabbit\Spinner\Contract\Pattern\IPattern;
10
use AlecRabbit\Spinner\Core\Contract\IFrameCollection;
11
use AlecRabbit\Spinner\Core\FrameCollection;
12
use AlecRabbit\Spinner\Extras\Contract\ICharFrameRenderer;
13
use AlecRabbit\Spinner\Extras\Render\Contract\ICharFrameCollectionRenderer;
14
use Stringable;
15
use Traversable;
16
17
final class CharFrameCollectionRenderer implements ICharFrameCollectionRenderer
18
{
19
    public function __construct(
20
        protected ICharFrameRenderer $frameRenderer,
21
    ) {
22
    }
23
24
    public function render(IPattern $pattern): IFrameCollection
25
    {
26
        return new FrameCollection($this->generateFrames($pattern));
27
    }
28
29
    private function generateFrames(IPattern $pattern): Traversable
30
    {
31
        /** @var IFrame|Stringable|string $entry */
32
        foreach ($pattern->getEntries() as $entry) {
0 ignored issues
show
Bug introduced by
The method getEntries() does not exist on AlecRabbit\Spinner\Contract\Pattern\IPattern. It seems like you code against a sub-type of AlecRabbit\Spinner\Contract\Pattern\IPattern such as AlecRabbit\Spinner\Core\...\Contract\IStylePattern or AlecRabbit\Spinner\Core\...n\Contract\ICharPattern or AlecRabbit\Spinner\Extra...re\A\AProceduralPattern or AlecRabbit\Spinner\Core\Pattern\A\AStylePattern or AlecRabbit\Spinner\Core\Pattern\A\ACharPattern or AlecRabbit\Spinner\Core\...n\Style\A\AStylePattern or AlecRabbit\Spinner\Core\Pattern\NoStylePattern or AlecRabbit\Spinner\Core\Pattern\NoCharPattern. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

32
        foreach ($pattern->/** @scrutinizer ignore-call */ getEntries() as $entry) {
Loading history...
33
            if ($entry instanceof IFrame) {
34
                yield $entry;
35
                continue;
36
            }
37
38
            if ($entry instanceof Stringable) {
39
                $entry = (string)$entry;
40
            }
41
42
            yield $this->createFrame($entry);
43
        }
44
    }
45
46
    private function createFrame(string $entry): IFrame
47
    {
48
        return $this->frameRenderer->render($entry);
49
    }
50
}
51