Passed
Push — master ( 6137ca...01151b )
by Kevin
02:21
created

ComparisonNormalizer::classMethodMap()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 11
c 1
b 0
f 1
nc 1
nop 0
dl 0
loc 13
ccs 2
cts 2
cp 1
crap 1
rs 9.9
1
<?php
2
3
namespace Zenstruck\Porpaginas\Doctrine\DBAL\Specification\Normalizer;
4
5
use Doctrine\DBAL\Connection;
6
use Zenstruck\Porpaginas\Doctrine\DBAL\Specification\DBALContext;
7
use Zenstruck\Porpaginas\Specification\Filter\Comparison;
8
use Zenstruck\Porpaginas\Specification\Filter\Equal;
9
use Zenstruck\Porpaginas\Specification\Filter\GreaterThan;
10
use Zenstruck\Porpaginas\Specification\Filter\GreaterThanOrEqual;
11
use Zenstruck\Porpaginas\Specification\Filter\In;
12
use Zenstruck\Porpaginas\Specification\Filter\LessThan;
13
use Zenstruck\Porpaginas\Specification\Filter\LessThanOrEqual;
14
use Zenstruck\Porpaginas\Specification\Filter\Like;
15
use Zenstruck\Porpaginas\Specification\Filter\NotEqual;
16
use Zenstruck\Porpaginas\Specification\Filter\NotIn;
17
use Zenstruck\Porpaginas\Specification\Filter\NotLike;
18
use Zenstruck\Porpaginas\Specification\Normalizer;
19
use Zenstruck\Porpaginas\Specification\Normalizer\ClassMethodMap;
20
21
/**
22
 * @author Kevin Bond <[email protected]>
23
 */
24
final class ComparisonNormalizer implements Normalizer
25
{
26
    use DBALNormalizer, ClassMethodMap;
27
28
    /**
29
     * @param Comparison  $specification
30
     * @param DBALContext $context
31
     */
32 31
    public function normalize($specification, $context): string
33
    {
34 31
        $parameter = \sprintf('comparison_%d', \count($context->qb()->getParameters()));
35
36 31
        $context->qb()->setParameter(
37 31
            $parameter,
38 31
            $specification->value(),
39 31
            \is_array($specification->value()) ? Connection::PARAM_STR_ARRAY : null
40
        );
41
42 31
        return $context->qb()->expr()->{self::methodFor($specification)}(
43 31
            $specification->field(),
44 31
            ":{$parameter}"
45
        );
46
    }
47
48 34
    protected static function classMethodMap(): array
49
    {
50
        return [
51 34
            Equal::class => 'eq',
52
            NotEqual::class => 'neq',
53
            GreaterThan::class => 'gt',
54
            GreaterThanOrEqual::class => 'gte',
55
            LessThan::class => 'lt',
56
            LessThanOrEqual::class => 'lte',
57
            Like::class => 'like',
58
            NotLike::class => 'notLike',
59
            In::class => 'in',
60
            NotIn::class => 'notIn',
61
        ];
62
    }
63
}
64