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

ArrayCollection::override()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 5
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 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