CriterionFilter   A
last analyzed

Complexity

Total Complexity 1

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 1
eloc 27
c 1
b 0
f 0
dl 0
loc 45
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A filter() 0 15 1
1
<?php
2
/**
3
 * This file is part of the ArrayQuery package.
4
 *
5
 * (c) Mauro Cassani<https://github.com/mauretto78>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
11
namespace ArrayQuery\Filters;
12
13
use ArrayQuery\Constants;
14
use ArrayQuery\Filters\Criterion\FilterInterface;
15
16
class CriterionFilter extends AbstractFilter
17
{
18
    /**
19
     * @var array
20
     */
21
    public static $operatorsMap = [
22
        '=' => 'EqualsFilter',
23
        '>' => 'GreaterThanFilter',
24
        '>=' => 'GreaterThanEqualsFilter',
25
        '<' => 'LessThanFilter',
26
        '<=' => 'LessThanEqualsFilter',
27
        '!=' => 'NotEqualsFilter',
28
        'ARRAY_MATCH' => 'ArrayMatchFilter',
29
        'CONTAINS' => 'ContainsFilter',
30
        'ENDS_WITH' => 'EndsWithFilter',
31
        'EQUALS_DATE' => 'EqualsDateFilter',
32
        'GT_DATE' => 'GreaterThanDateFilter',
33
        'GTE_DATE' => 'GreaterThanEqualsDateFilter',
34
        'IN_ARRAY' => 'InArrayFilter',
35
        'IN_ARRAY_INVERSED' => 'InArrayInversedFilter',
36
        'LT_DATE' => 'LessThanDateFilter',
37
        'LTE_DATE' => 'LessThanEqualsDateFilter',
38
        'STARTS_WITH' => 'StartsWithFilter',
39
    ];
40
41
    /**
42
     * @param $criterion
43
     * @param $element
44
     * @return mixed
45
     */
46
    public static function filter($criterion, $element)
47
    {
48
        $key = explode(Constants::ALIAS_DELIMITER, $criterion['key']);
49
        $valueToCompare = $criterion['value'];
50
        $operator = $criterion['operator'];
51
        $dateFormat = $criterion['date_format'];
52
53
        $value = self::getArrayElementValueFromKey($key[0], $element);
54
55
        $filterClass = 'ArrayQuery\\Filters\\Criterion\\'.self::$operatorsMap[$operator];
56
57
        /** @var FilterInterface $filter */
58
        $filter = new $filterClass();
59
60
        return $filter->match($value, $valueToCompare, $dateFormat);
61
    }
62
}
63