Passed
Push — master ( 44542b...077e9d )
by Tomáš
03:58
created

Range::visit()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 13
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2.0116

Importance

Changes 0
Metric Value
cc 2
eloc 6
nc 2
nop 3
dl 0
loc 13
ccs 6
cts 7
cp 0.8571
crap 2.0116
rs 10
c 0
b 0
f 0
1
<?php declare(strict_types = 1);
2
3
namespace Apicart\FQL\Generator\SQL;
4
5
use Apicart\FQL\Generator\Common\AbstractVisitor;
6
use Apicart\FQL\Generator\SQL\Resolver\AbstractFilterResolver;
7
use Apicart\FQL\Token\Node\Term;
8
use Apicart\FQL\Token\Token\Range as RangeToken;
9
use Apicart\FQL\Value\AbstractNode;
10
use LogicException;
11
12
final class Range extends AbstractVisitor
13
{
14
15
    /**
16
     * @var AbstractFilterResolver
17
     */
18
    private $filterResolver;
19
20
21 1
    public function __construct(AbstractFilterResolver $filterResolver)
22
    {
23 1
        $this->filterResolver = $filterResolver;
24 1
    }
25
26
27 1
    public function accept(AbstractNode $node): bool
28
    {
29 1
        return $node instanceof Term && $node->getToken() instanceof RangeToken;
30
    }
31
32
33 1
    public function visit(AbstractNode $node, ?AbstractVisitor $subVisitor = null, ?array $options = null): string
34
    {
35
        /** @var Term $termNode */
36 1
        $termNode = $node;
37
        /** @var RangeToken $token */
38 1
        $token = $termNode->getToken();
39
40 1
        $domain = $token->getDomain();
41 1
        if ($domain === '') {
42
            throw new LogicException('Missing required domain');
43
        }
44
45 1
        return '(' . $this->filterResolver->resolve($domain, $token) . ')';
46
    }
47
48
}
49