Aggregate   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 42
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 10
c 1
b 0
f 0
dl 0
loc 42
ccs 14
cts 14
cp 1
rs 10
wmc 7

4 Methods

Rating   Name   Duplication   Size   Complexity  
A accept() 0 3 1
A __construct() 0 4 2
A addVisitor() 0 3 1
A visit() 0 8 3
1
<?php declare(strict_types = 1);
2
3
namespace Apicart\FQL\Generator\Common;
4
5
use Apicart\FQL\Value\AbstractNode;
6
use RuntimeException;
7
8
final class Aggregate extends AbstractVisitor
9
{
10
11
    /**
12
     * @var AbstractVisitor[]
13
     */
14
    private $visitors = [];
15
16
17
    /**
18
     * Construct from the optional array of $visitors.
19
     *
20
     * @param AbstractVisitor[] $visitors
21
     */
22 137
    public function __construct(array $visitors = [])
23
    {
24 137
        foreach ($visitors as $visitor) {
25 135
            $this->addVisitor($visitor);
26
        }
27 137
    }
28
29
30 135
    public function addVisitor(AbstractVisitor $visitor): void
31
    {
32 135
        $this->visitors[] = $visitor;
33 135
    }
34
35
36 1
    public function accept(AbstractNode $node): bool
37
    {
38 1
        return true;
39
    }
40
41
42 136
    public function visit(AbstractNode $node, ?AbstractVisitor $subVisitor = null, ?array $options = null): string
43
    {
44 136
        foreach ($this->visitors as $visitor) {
45 135
            if ($visitor->accept($node)) {
46 135
                return $visitor->visit($node, $this, $options);
47
            }
48
        }
49 1
        throw new RuntimeException('No visitor available for ' . get_class($node));
50
    }
51
52
}
53