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\ORM\Specification\Normalizer;
4
5
use Zenstruck\Porpaginas\Doctrine\ORM\Specification\ORMContext;
6
use Zenstruck\Porpaginas\Specification\Filter\Comparison;
7
use Zenstruck\Porpaginas\Specification\Filter\Equal;
8
use Zenstruck\Porpaginas\Specification\Filter\GreaterThan;
9
use Zenstruck\Porpaginas\Specification\Filter\GreaterThanOrEqual;
10
use Zenstruck\Porpaginas\Specification\Filter\In;
11
use Zenstruck\Porpaginas\Specification\Filter\LessThan;
12
use Zenstruck\Porpaginas\Specification\Filter\LessThanOrEqual;
13
use Zenstruck\Porpaginas\Specification\Filter\Like;
14
use Zenstruck\Porpaginas\Specification\Filter\NotEqual;
15
use Zenstruck\Porpaginas\Specification\Filter\NotIn;
16
use Zenstruck\Porpaginas\Specification\Filter\NotLike;
17
use Zenstruck\Porpaginas\Specification\Normalizer;
18
use Zenstruck\Porpaginas\Specification\Normalizer\ClassMethodMap;
19
20
/**
21
 * @author Kevin Bond <[email protected]>
22
 */
23
final class ComparisonNormalizer implements Normalizer
24
{
25
    use ORMNormalizer, ClassMethodMap;
26
27
    /**
28
     * @param Comparison $specification
29
     * @param ORMContext $context
30
     */
31 31
    public function normalize($specification, $context): string
32
    {
33 31
        $parameter = \sprintf('comparison_%d', $context->qb()->getParameters()->count());
34 31
        $context->qb()->setParameter($parameter, $specification->value());
35
36 31
        return $context->qb()->expr()->{self::methodFor($specification)}(
37 31
            "{$context->alias()}.{$specification->field()}",
38 31
            ":{$parameter}"
39
        );
40
    }
41
42 34
    protected static function classMethodMap(): array
43
    {
44
        return [
45 34
            Equal::class => 'eq',
46
            NotEqual::class => 'neq',
47
            GreaterThan::class => 'gt',
48
            GreaterThanOrEqual::class => 'gte',
49
            LessThan::class => 'lt',
50
            LessThanOrEqual::class => 'lte',
51
            Like::class => 'like',
52
            NotLike::class => 'notLike',
53
            In::class => 'in',
54
            NotIn::class => 'notIn',
55
        ];
56
    }
57
}
58