Passed
Push — master ( 48b1ba...935bf2 )
by Luca
03:20 queued 01:33
created

AbstractCompareFilter   A

Complexity

Total Complexity 16

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 16
eloc 35
c 1
b 0
f 1
dl 0
loc 89
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 3 1
B applyComparison() 0 27 8
A parseAsString() 0 18 6
A __construct() 0 5 1
1
<?php
2
3
4
namespace Jackal\Copycat\Filter\ValueFilter;
5
6
7
abstract class AbstractCompareFilter extends AbstractFilter
8
{
9
    const COMPARISON_EQ = '=';
10
    const COMPARISON_GTE = '>=';
11
    const COMPARISON_GT = '>';
12
    const COMPARISON_LTE = '<=';
13
    const COMPARISON_LT = '<';
14
15
    abstract protected function getComparison();
16
17
    /**
18
     * @var int
19
     */
20
    private $comparedValue;
21
22
    /**
23
     * LowerThanFilter constructor.
24
     * @param $fieldName
25
     * @param int $comparedValue
26
     */
27
    public function __construct($fieldName, $comparedValue = 0)
28
    {
29
        parent::__construct($fieldName);
30
31
        $this->comparedValue = $comparedValue;
32
    }
33
34
    /**
35
     * @param $value
36
     * @return bool
37
     */
38
    public function __invoke($value)
39
    {
40
        return $this->applyComparison($value[$this->fieldName], $this->comparedValue,$this->getComparison());
41
    }
42
43
    protected function applyComparison($value1,$value2,$comparison){
44
45
        $value1 = $this->parseAsString($value1);
46
        $value2 = $this->parseAsString($value2);
47
48
        switch ($comparison){
49
            case self::COMPARISON_EQ:{
50
                if($value1 === null and $value2 === ''){
51
                    return true;
52
                }
53
                return $value1 === $value2;
54
            }
55
            case self::COMPARISON_LT:{
56
                return $value1 < $value2;
57
            }
58
            case self::COMPARISON_LTE:{
59
                return $value1 <= $value2;
60
            }
61
            case self::COMPARISON_GT:{
62
                return $value1 > $value2;
63
            }
64
            case self::COMPARISON_GTE:{
65
66
                return $value1 >= $value2;
67
            }
68
            default:{
69
                throw new \RuntimeException('Something went terribly wrong!');
70
            }
71
        }
72
    }
73
74
    /**
75
     * @param mixed $value
76
     * @return string|null
77
     */
78
    protected function parseAsString($value){
79
80
        if($value === null){
81
            return null;
82
        }
83
        if(is_scalar($value)){
84
            return $value;
85
        }
86
87
        if ($value instanceof \DateTime) {
88
            return $value->format('Y-m-d H:i:s');
89
        }
90
91
        if(is_object($value) and method_exists($value,'__toString')){
92
            return (string)$value;
93
        }
94
95
        throw new \RuntimeException('Cannot parse filter value');
96
    }
97
98
99
}