Test Failed
Branch add-cache (cab8ca)
by Michael
02:14
created

Priority::merge()   C

Complexity

Conditions 7
Paths 8

Size

Total Lines 34
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 7

Importance

Changes 0
Metric Value
dl 0
loc 34
ccs 14
cts 14
cp 1
rs 6.7272
c 0
b 0
f 0
cc 7
eloc 16
nc 8
nop 2
crap 7
1
<?php
2
3
namespace micmania1\config\MergeStrategy;
4
5
use micmania1\config\ConfigCollectionInterface;
6
use micmania1\config\ConfigCollection;
7
8
class Priority
9
{
10 16
    public function merge(array $mine, ConfigCollectionInterface $theirs) {
11 16
        foreach ($mine as $key => $item) {
12
            if(!isset($item['value'])) {
13 16
                continue;
14 11
            }
15 11
16
            if(!isset($item['metadata'])) {
17
                $item['metadata'] = [];
18
            }
19 11
20
            // If the item doesn't exist in theirs, we can just set it and continue.
21
            if(!$theirs->exists($key)) {
22 11
                $theirs->set($key, $item['value']);
23 11
                continue;
24
            }
25
26 11
            /** @var ConfigItemInterface **/
27 2
            $theirsValue = $theirs->get($key);
28 2
29
            // Get the two values for comparison
30
            $lessImportantValue = $theirsValue;
31 11
            $newValue = $item['value'];
32 16
33
            // If its an array and the key already esists, we can use array_merge
34 16
            if (is_array($newValue) && is_array($lessImportantValue)) {
35
                $newValue = array_merge($lessImportantValue, $newValue);
36
            }
37
38
            // The key is not set or the value is to be overwritten
39
            $theirs->set($key, $newValue, $item['metadata']);
40
        }
41
42
        return $theirs;
43
    }
44
}
45