EloquentProcessor::setBuilder()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 2
c 1
b 0
f 0
dl 0
loc 5
ccs 3
cts 3
cp 1
rs 10
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Noitran\RQL\Processors\Eloquent;
6
7
use Illuminate\Database\Eloquent\Builder;
8
use Illuminate\Database\Eloquent\Model;
9
use Noitran\RQL\Contracts\Expression\ExprInterface;
10
use Noitran\RQL\Contracts\Processor\ProcessorInterface;
11
use Noitran\RQL\Exceptions\ExpressionException;
12
use Noitran\RQL\Processors\FilterSpecResolver;
13
use Noitran\RQL\Queues\ExprQueue;
14
15
/**
16
 * Class EloquentProcessor.
17
 */
18
class EloquentProcessor implements ProcessorInterface
19
{
20
    /**
21
     * @var Builder
22
     */
23
    protected $builder;
24
25
    /**
26
     * @var FilterSpecResolver
27
     */
28
    protected $resolver;
29
30
    /**
31
     * @var array
32
     */
33
    public static $methodMap = [
34
        '$eq' => 'where',
35
        '$notEq' => 'where',
36
        '$lt' => 'where',
37
        '$lte' => 'where',
38
        '$gt' => 'where',
39
        '$gte' => 'where',
40
        '$like' => 'where',
41
        '$in' => 'whereIn',
42
        '$notIn' => 'whereNotIn',
43
        '$between' => 'whereBetween',
44
        '$or' => null,
45
    ];
46
47
    /**
48
     * @var array
49
     */
50
    public static $comparisonMethods = [
51
        '$eq',
52
        '$notEq',
53
        '$lt',
54
        '$lte',
55
        '$gt',
56
        '$gte',
57
        '$like',
58
    ];
59
60
    /**
61
     * @return array
62
     */
63 11
    public static function getMethodMap(): array
64
    {
65 11
        return self::$methodMap;
66
    }
67
68
    /**
69
     * @return array
70
     */
71 12
    public static function getComparisonMethods(): array
72
    {
73 12
        return self::$comparisonMethods;
74
    }
75
76
    /**
77
     * EloquentProcessor constructor.
78
     *
79
     * @param FilterSpecResolver $resolver
80
     */
81 12
    public function __construct(FilterSpecResolver $resolver)
82
    {
83 12
        $this->resolver = $resolver;
84 12
    }
85
86
    /**
87
     * @return Builder|Model
88
     */
89 12
    public function getBuilder()
90
    {
91 12
        return $this->builder;
92
    }
93
94
    /**
95
     * @param Builder $builder
96
     *
97
     * @return EloquentProcessor
98
     */
99 12
    public function setBuilder(Builder $builder): self
100
    {
101 12
        $this->builder = $builder;
102
103 12
        return $this;
104
    }
105
106
    /**
107
     * @param ExprQueue $exprClasses
108
     *
109
     * @throws ExpressionException
110
     *
111
     * @return Builder
112
     */
113 12
    public function process(ExprQueue $exprClasses): Builder
114
    {
115 12
        foreach ($exprClasses as $exprClass) {
116
            /* @var ExprInterface $exprClass */
117 12
            $this->builder = $this->resolver
118 12
                ->resolve($this, $exprClass)
119 12
                ->apply($this, $exprClass);
120
        }
121
122 12
        return $this->builder;
123
    }
124
}
125