Passed
Pull Request — master (#1)
by Zing
08:22 queued 04:05
created

WithFilters::applyFilters()   A

Complexity

Conditions 3
Paths 1

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 7
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 12
ccs 7
cts 7
cp 1
crap 3
rs 10
1
<?php
2
3
namespace Zing\QueryBuilder\Concerns;
4
5
use Zing\QueryBuilder\Filter;
6
7
trait WithFilters
8
{
9
    protected $filters;
10
11 16
    public function enableFilters($filters)
12
    {
13 16
        $filters = is_array($filters) ? $filters : func_get_args();
14 16
        $this->filters = $this->formatFilters($filters);
15 16
        $this->applyFilters();
16
17 16
        return $this;
18
    }
19
20
    /**
21
     * 自定义过滤器逻辑.
22
     *
23
     * @param \Zing\QueryBuilder\Filter[]|mixed $filters
24
     *
25
     * @return $this
26
     *
27
     * @deprecated use enableFilters instead
28
     */
29 1
    public function addFilters($filters): self
30
    {
31 1
        return $this->enableFilters(is_array($filters) ? $filters : func_get_args());
32
    }
33
34 16
    protected function formatFilters($filters)
35
    {
36
        return collect($filters)->map(function ($filter) {
37 16
            if ($filter instanceof Filter) {
38 15
                return $filter;
39
            }
40
41 1
            return Filter::exact($filter);
42 16
        });
43
    }
44
45 16
    protected function applyFilters()
46
    {
47
        $this->filters->each(function (Filter $filter) {
48 16
            if ($this->isRequestedFilter($filter)) {
49 15
                $filter->filter($this, $this->getFilterValue($filter));
50
51 15
                return;
52
            }
53 1
            if ($filter->hasDefault()) {
54 1
                $filter->filter($this, $filter->getDefault());
55
56 1
                return;
57
            }
58 16
        });
59 16
    }
60
61 16
    protected function isRequestedFilter(Filter $filter)
62
    {
63 16
        return $this->request->has($filter->getProperty());
64
    }
65
66 15
    protected function getFilterValue(Filter $filter)
67
    {
68 15
        return $this->request->input($filter->getProperty());
69
    }
70
}
71