Passed
Push — master ( 2f6942...d6d802 )
by Chris
28:11
created

AbstractArrayDriver   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Test Coverage

Coverage 93.33%

Importance

Changes 0
Metric Value
wmc 14
eloc 24
dl 0
loc 66
ccs 28
cts 30
cp 0.9333
rs 10
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A maybeRemoveItem() 0 9 2
A contains() 0 5 2
A arrayContains() 0 3 1
A remove() 0 5 2
A fetch() 0 3 1
A deleteObjectIfLocated() 0 11 2
A arrayContainsObject() 0 9 3
1
<?php
2
3
namespace WebTheory\Collection\Access\Abstracts;
4
5
use WebTheory\Collection\Contracts\ArrayDriverInterface;
6
use WebTheory\Collection\Contracts\ObjectComparatorInterface;
7
8
abstract class AbstractArrayDriver implements ArrayDriverInterface
9
{
10
    protected ObjectComparatorInterface $objectComparator;
11
12 309
    public function __construct(ObjectComparatorInterface $objectComparator)
13
    {
14 309
        $this->objectComparator = $objectComparator;
15
    }
16
17 69
    public function fetch(array $array, $item)
18
    {
19 69
        return $array[$item];
20
    }
21
22 9
    public function remove(array &$array, $item): bool
23
    {
24 9
        return is_object($item)
25 6
            ? $this->deleteObjectIfLocated($array, $item)
26 9
            : $this->maybeRemoveItem($array, $item);
27
    }
28
29 24
    public function contains(array $array, $item): bool
30
    {
31 24
        return is_object($item)
32 6
            ? $this->arrayContainsObject($array, $item)
33 24
            : $this->arrayContains($array, $item);
34
    }
35
36 3
    protected function maybeRemoveItem(array &$array, $item): bool
37
    {
38 3
        if (isset($array[$item])) {
39 3
            unset($array[$item]);
40
41 3
            return true;
42
        }
43
44
        return false;
45
    }
46
47 12
    protected function arrayContains(array $array, $item): bool
48
    {
49 12
        return isset($array[$item]);
50
    }
51
52 309
    protected function arrayContainsObject(array $array, object $object): bool
53
    {
54 309
        foreach ($array as $item) {
55 309
            if ($this->objectComparator->matches($item, $object)) {
56 11
                return true;
57
            }
58
        }
59
60 309
        return false;
61
    }
62
63 6
    protected function deleteObjectIfLocated(array &$array, object $object): bool
64
    {
65 6
        $position = array_search($object, $array, true);
66
67 6
        if ($position === false) {
68
            return false;
69
        }
70
71 6
        unset($array[$position]);
72
73 6
        return true;
74
    }
75
}
76