Passed
Push — main ( 24b6e6...7c0850 )
by Alexandra
02:38
created

ReceivedMap   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Test Coverage

Coverage 94.44%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 17
dl 0
loc 52
ccs 17
cts 18
cp 0.9444
rs 10
c 1
b 0
f 1
wmc 9

3 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 13 3
A cleanAndFlatten() 0 3 1
A serializeMixedType() 0 17 5
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AHJ\ApprovalTests;
6
7
final class ReceivedMap
8
{
9 11
    public function create(array $input, array $output): string
10
    {
11 11
        $received = [];
12
13 11
        foreach ($input as $inputKey => $inputValue) {
14 11
            $received[$inputKey] = '[' . $this->serializeMixedType($inputValue) . '] -> ';
15
        }
16
17 11
        foreach ($output as $outputKey => $outputValue) {
18 11
            $received[$outputKey] = $received[$outputKey] . '[' . $this->serializeMixedType($outputValue) . ']';
19
        }
20
21 11
        return $this->cleanAndFlatten($received);
22
    }
23
24 11
    private function serializeMixedType($inputValue, string $currentConcatenations = ''): string
25
    {
26 11
        $concatenations = '';
27
28 11
        if ('string' === gettype($inputValue)) {
29
            return $currentConcatenations . $inputValue;
30
        }
31
32 11
        foreach ($inputValue as $item) {
33 11
            if ('array' === gettype($item) || 'object' === gettype($item)) {
34 6
                $concatenations .= '[' . $this->serializeMixedType($item, $concatenations) . ']';
35
            } else {
36 11
                $concatenations .= $item . ', ';
37
            }
38
        }
39
40 11
        return $concatenations;
41
    }
42
43
    /**
44
     * @param array $received
45
     *                        Example:
46
     *                        [
47
     *                        [0] => '[foo, 0, [bar, 10, ]] -> [foo, 10, [bar, 60, ]]',
48
     *                        [1] => '[foo, 10, [bar, 100, ]] -> [foo, 100, [bar, 600, ]]'
49
     *                        ]
50
     *
51
     * @return string
52
     *                Example:
53
     *                '[foo, 0, [bar, 10]] -> [foo, 10, [bar, 60]]
54
     *                [foo, 10, [bar, 100]] -> [foo, 100, [bar, 600]]'
55
     */
56 11
    private function cleanAndFlatten(array $received): string
57
    {
58 11
        return str_replace(', ]', ']', implode("\n", $received));
59
    }
60
}
61