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

ComparisonNormalizer   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 32
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 18
c 1
b 0
f 1
dl 0
loc 32
ccs 8
cts 8
cp 1
rs 10
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A normalize() 0 8 1
A classMethodMap() 0 13 1
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