Completed
Push — master ( 9ba96c...1063f7 )
by Jorge
02:41
created

ArrayCollection   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 103
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 11
eloc 24
dl 0
loc 103
ccs 29
cts 29
cp 1
rs 10
c 0
b 0
f 0

9 Methods

Rating   Name   Duplication   Size   Complexity  
A contains() 0 3 1
A offsetUnset() 0 3 1
A addElement() 0 3 1
A offsetExists() 0 3 1
A offsetGet() 0 3 1
A offsetSet() 0 8 2
A removeElement() 0 11 2
A getInteractorProxies() 0 7 1
A override() 0 5 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace CCT\Component\Collections;
6
7
use CCT\Component\Collections\Interactors\ArrayAggregator;
8
use CCT\Component\Collections\Interactors\ArraySegregator;
9
use CCT\Component\Collections\Interactors\ArraySorter;
10
use CCT\Component\Collections\Interactors\ArrayInspector;
11
use CCT\Component\Collections\Traits\InteractorProxyTrait;
12
use CCT\Component\Collections\Traits\ParameterCollectionTrait;
13
14
/**
15
 * @method ArraySorter sorter()
16
 * @method ArrayInspector inspector()
17
 * @method ArrayAggregator aggregator()
18
 * @method ArraySegregator segregator()
19
 */
20
class ArrayCollection extends Collection implements ParameterCollectionInterface, ArrayCollectionInterface
21
{
22
    use ParameterCollectionTrait;
23
    use InteractorProxyTrait;
24
25
    /**
26
     * {@inheritdoc}
27
     */
28 13
    protected function getInteractorProxies(): array
29
    {
30
        return [
31 13
            ArrayAggregator::class,
32
            ArraySegregator::class,
33
            ArrayInspector::class,
34
            ArraySorter::class
35
        ];
36
    }
37
38
    /**
39
     * Required by interface ArrayAccess.
40
     *
41
     * {@inheritdoc}
42
     */
43 1
    public function offsetExists($offset)
44
    {
45 1
        return $this->has($offset);
46
    }
47
48
    /**
49
     * Required by interface ArrayAccess.
50
     *
51
     * {@inheritdoc}
52
     */
53 1
    public function offsetGet($offset)
54
    {
55 1
        return $this->get($offset);
56
    }
57
58
    /**
59
     * Required by interface ArrayAccess.
60
     *
61
     * {@inheritdoc}
62
     */
63 1
    public function offsetSet($offset, $value)
64
    {
65 1
        if (!isset($offset)) {
66 1
            $this->addElement($value);
67 1
            return;
68
        }
69
70 1
        $this->set($offset, $value);
71 1
    }
72
73
    /**
74
     * Required by interface ArrayAccess.
75
     *
76
     * {@inheritdoc}
77
     */
78 2
    public function offsetUnset($offset)
79
    {
80 2
        $this->remove($offset);
81 2
    }
82
83
    /**
84
     * {@inheritdoc}
85
     */
86 4
    public function addElement($element): void
87
    {
88 4
        $this->elements[] = $element;
89 4
    }
90
91
    /**
92
     * {@inheritdoc}
93
     */
94 2
    public function removeElement($element): bool
95
    {
96 2
        $key = $this->inspector()->indexOf($element);
97
98 2
        if ($key === false) {
99 1
            return false;
100
        }
101
102 1
        unset($this->elements[$key]);
103
104 1
        return true;
105
    }
106
107
    /**
108
     * {@inheritdoc}
109
     */
110 1
    public function contains($element): bool
111
    {
112 1
        return in_array($element, $this->elements, true);
113
    }
114
115
    /**
116
     * {@inheritdoc}
117
     */
118 11
    public function override(array $elements): ArrayCollectionInterface
119
    {
120 11
        $this->elements = $elements;
121
122 11
        return $this;
123
    }
124
}
125