Skip to content

Commit 6ceba1a

Browse files
Add new node 'children' in Differ
1 parent 14e7b27 commit 6ceba1a

File tree

3 files changed

+44
-24
lines changed

3 files changed

+44
-24
lines changed

src/Differ/Differ.php

+11-8
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,21 @@ function ($acc, $key) use ($tree1, $tree2) {
3434
if (!array_key_exists($key, $tree2)) {
3535
$diff = array_merge($acc, [$key => ['status' => 'remove']]);
3636
$innerContent = sortingFirstFile($tree1[$key], $tree1[$key]);
37-
$diff[$key]['value'] = $innerContent;
37+
$valueName = is_array($innerContent) ? 'children' : 'value';
38+
$diff[$key][$valueName] = $innerContent;
3839
return $diff;
3940
}
4041

4142
if ($tree1[$key] === $tree2[$key]) {
4243
$diff = array_merge($acc, [$key => ['status' => 'unchanged']]);
43-
$diff[$key]['value'] = sortingFirstFile($tree1[$key], $tree1[$key]);
44+
$valueName = is_array(sortingFirstFile($tree1[$key], $tree1[$key])) ? 'children' : 'value';
45+
$diff[$key][$valueName] = sortingFirstFile($tree1[$key], $tree1[$key]);
4446
return $diff;
4547
}
4648

4749
if (is_array($tree1[$key]) && is_array($tree2[$key])) {
4850
$diff = array_merge($acc, [$key => ['status' => 'changed']]);
49-
$diff[$key]['value'] = sortingFirstFile($tree1[$key], $tree2[$key]);
51+
$diff[$key]['children'] = sortingFirstFile($tree1[$key], $tree2[$key]);
5052
} else {
5153
$diff = array_merge($acc, [$key => ['status' => 'remove']]);
5254
$diff[$key]['beforeValue'] = sortingFirstFile($tree1[$key], $tree1[$key]);
@@ -69,11 +71,12 @@ function sortingSecondFile(mixed $tree2, mixed $tree1): mixed
6971
array_keys($tree2),
7072
function ($acc, $key) use ($tree1, $tree2) {
7173
if (!array_key_exists($key, $tree1)) {
72-
return array_merge($acc, [$key => ['value' => getArrayContent($tree2[$key])]]);
74+
$valueName = is_array(getArrayContent($tree2[$key])) ? 'children' : 'value';
75+
return array_merge($acc, [$key => [$valueName => getArrayContent($tree2[$key])]]);
7376
}
7477

7578
if (is_array($tree2[$key]) && is_array($tree1[$key])) {
76-
return array_merge($acc, [$key => ['value' => sortingSecondFile($tree2[$key], $tree1[$key])]]);
79+
return array_merge($acc, [$key => ['children' => sortingSecondFile($tree2[$key], $tree1[$key])]]);
7780
}
7881

7982
return $acc;
@@ -89,7 +92,8 @@ function getArrayContent(mixed $tree): mixed
8992
}
9093

9194
return array_reduce(array_keys($tree), function ($acc, $key) use ($tree) {
92-
return array_merge($acc, [$key => ['value' => getArrayContent($tree[$key])]]);
95+
$valueName = is_array(getArrayContent($tree[$key])) ? 'children' : 'value';
96+
return array_merge($acc, [$key => [$valueName => getArrayContent($tree[$key])]]);
9397
}, []);
9498
}
9599

@@ -103,7 +107,6 @@ function sortArrayByKeysRecursive(array $tree): array
103107
}
104108

105109
$innerContent = sortArrayByKeysRecursive($tree[$key]);
106-
$diffContent[$key] = $innerContent;
107-
return array_merge($acc, $diffContent);
110+
return array_merge($acc, [$key => $innerContent]);
108111
}, []);
109112
}

src/Formatters/Plain.php

+21-6
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,18 @@ function ($acc, $key) use ($tree, $path, $depth) {
1414
$keyData = $tree[$key];
1515
$status = $tree[$key]['status'] ?? 'add';
1616
$newPath = $depth === 1 ? $key : "{$path}.{$key}";
17+
$resultString = $acc;
18+
1719
$addMarker = ADD_MARKER;
1820
$removeMarker = REMOVE_MARKER;
1921
$updatedMarker = UPDATED_MARKER;
20-
$resultString = $acc;
2122

22-
if (array_key_exists('value', $keyData)) {
23-
$value = getString($keyData['value']);
23+
if ($status === 'unchanged') {
24+
return $resultString;
25+
}
26+
27+
if (array_key_exists('children', $keyData)) {
28+
$value = getString($keyData['children']);
2429

2530
if ($status === 'add') {
2631
$string = "Property '{$newPath}' was {$addMarker} with value: {$value}\n";
@@ -32,12 +37,22 @@ function ($acc, $key) use ($tree, $path, $depth) {
3237
return "{$resultString}{$string}";
3338
}
3439

35-
if (is_array($keyData['value'])) {
36-
$string = plain($keyData['value'], $newPath, $depth + 1);
40+
$string = plain($keyData['children'], $newPath, $depth + 1);
41+
return "{$resultString}{$string}";
42+
}
43+
44+
if (array_key_exists('value', $keyData)) {
45+
$value = getString($keyData['value']);
46+
47+
if ($status === 'add') {
48+
$string = "Property '{$newPath}' was {$addMarker} with value: {$value}\n";
3749
return "{$resultString}{$string}";
3850
}
3951

40-
return $resultString;
52+
if ($status === 'remove') {
53+
$string = "Property '{$newPath}' was {$removeMarker}\n";
54+
return "{$resultString}{$string}";
55+
}
4156
}
4257

4358
$beforeValue = getString($keyData['beforeValue']);

src/Formatters/Stylish.php

+12-10
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,26 @@ function ($acc, $key) use ($tree, $replacer, $spacesCount, $depth) {
3030
$indentationCount = $spacesCount * $depth - 2;
3131
$indentation = str_repeat($replacer, $indentationCount);
3232

33-
if (array_key_exists('value', $keyData)) {
34-
$value = $keyData['value'];
35-
36-
if (!is_array($value)) {
37-
$string = getStylishString($status, $key, $value, $indentation);
38-
return "{$resultString}{$string}";
39-
}
33+
if (array_key_exists('children', $keyData)) {
34+
$value = $keyData['children'];
4035

4136
if ($status === ADD_MARKER) {
4237
$innerContent = getArrayContent($value, $replacer, $spacesCount, $depth + 1);
4338
$string = getStylishInnerContent($status, $key, $innerContent, $indentation);
4439
return "{$resultString}{$string}";
4540
}
4641

47-
$innerContent = getStylish($keyData['value'], $replacer, $spacesCount, $depth + 1);
42+
$innerContent = getStylish($value, $replacer, $spacesCount, $depth + 1);
4843
$string = getStylishInnerContent($status, $key, $innerContent, $indentation);
4944
return "{$resultString}{$string}";
5045
}
5146

47+
if (array_key_exists('value', $keyData)) {
48+
$value = $keyData['value'];
49+
$string = getStylishString($status, $key, $value, $indentation);
50+
return "{$resultString}{$string}";
51+
}
52+
5253
$data = [
5354
'indentation' => $indentation,
5455
'replacer' => $replacer,
@@ -79,16 +80,17 @@ function ($acc, $key) use ($tree, $replacer, $spacesCount, $depth) {
7980
function getArrayContent(array $tree, string $replacer, int $spacesCount, int $depth): string
8081
{
8182
return array_reduce(array_keys($tree), function ($acc, $key) use ($tree, $replacer, $spacesCount, $depth) {
82-
$value = $tree[$key]['value'];
8383
$indentationCount = $spacesCount * $depth - 2;
8484
$indentation = str_repeat($replacer, $indentationCount);
8585
$resultString = $acc;
8686

87-
if (!is_array($value)) {
87+
if (array_key_exists('value', $tree[$key])) {
88+
$value = $tree[$key]['value'];
8889
$string = getStylishString(UNCHANGED_MARKER, $key, $value, $indentation);
8990
return "{$resultString}{$string}";
9091
}
9192

93+
$value = $tree[$key]['children'];
9294
$innerContent = getArrayContent($value, $replacer, $spacesCount, $depth + 1);
9395
return getStylishInnerContent(UNCHANGED_MARKER, $key, $innerContent, $indentation);
9496
}, '');

0 commit comments

Comments
 (0)