SimilarTo   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 42
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

Changes 0
Metric Value
wmc 5
lcom 0
cbo 1
dl 0
loc 42
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A compare() 0 6 2
A getNumericComparator() 0 6 1
A getObjectComparator() 0 10 2
1
<?php
2
3
namespace PhpGitHooks\Module\Tests\Infrastructure\UnitTestCase;
4
5
use ReflectionClass;
6
7
class SimilarTo
8
{
9
    /**
10
     * @param $class
11
     *
12
     * @return \Mockery\Matcher\Closure
13
     */
14
    public function compare($class)
15
    {
16
        $comparator = is_object($class) ? $this->getObjectComparator($class) : $this->getNumericComparator($class);
17
18
        return \Mockery::on($comparator);
19
    }
20
21
    /**
22
     * @param float $classA
23
     *
24
     * @return \Closure
25
     */
26
    private function getNumericComparator($classA)
27
    {
28
        return function ($classB) use ($classA) {
29
            return round($classA, 3) === round($classB, 3);
30
        };
31
    }
32
33
    /**
34
     * @param object $classA
35
     *
36
     * @return \Closure
37
     */
38
    private function getObjectComparator($classA)
39
    {
40
        return function ($classB) use ($classA) {
41
42
            $propertiesA = (new ReflectionClass($classA))->getProperties();
43
            $propertiesB = (new ReflectionClass($classB))->getProperties();
44
45
            return !(get_class($classA) !== get_class($classB)) || ($propertiesA != $propertiesB);
46
        };
47
    }
48
}
49