orion122/diff-finder

View on GitHub
src/output/plain.php

Summary

Maintainability
A
1 hr
Test Coverage
<?php

namespace DiffFinder\output\plain;

use function \Funct\Collection\flattenAll;

function genOutput($AST, $parents = '')
{
    $result = array_map(function ($array) use ($parents) {
        if ($array['type'] === 'nested') {
            return genOutput($array['children'], "$parents{$array['key']}.");
        } else {
            if ($array['type'] === 'changed') {
                return buildLine('changed', $parents . $array['key'], $array['from'], $array['to']);
            } elseif ($array['type'] === 'removed') {
                return buildLine('removed', $parents . $array['key']);
            } elseif ($array['type'] === 'added') {
                if (is_array($array['from'])) {
                    return buildLine('added', $parents . $array['key'], 'complex value');
                } else {
                    return buildLine('added', $parents . $array['key'], $array['from']);
                }
            }
        }
    }, $AST);

    return implode(PHP_EOL, array_filter(flattenAll($result)));
}


function buildLine($changeType, $property, $value1 = '', $value2 = '')
{
    if ($changeType === 'removed') {
        return "Property '$property' was $changeType";
    } elseif ($changeType === 'added') {
        return "Property '$property' was $changeType with value: '$value1'";
    } elseif ($changeType === 'changed') {
        return "Property '$property' was $changeType. From '$value1' to '$value2'";
    }
}