Completed
Push — v4.0-dev ( b01e70...dabe54 )
by
unknown
01:56
created

util.php ➔ joinPath()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 6
nc 1
nop 2
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
1
<?php
2
3
namespace League\Plates\Util;
4
5
use League\Plates\Exception\ComposeException;
6
7
function id($multi = false) {
8
    if ($multi) {
9
        return function(...$args) {
10
            return $args;
11
        };
12
    } else {
13
        return function($arg) {
14
            return $arg;
15
        };
16
    }
17
}
18
19
/** stack a set of functions into each other and returns the stacked func */
20
function stack(array $funcs) {
21
    return array_reduce(array_reverse($funcs), function($next, $func) {
22
        return function(...$args) use ($next, $func) {
23
            $args[] = $next;
24
            return $func(...$args);
25
        };
26
    }, function() {
27
        throw new ComposeException('No handler was able to return a result.');
28
    });
29
}
30
31
function stackGroup(array $funcs) {
32
    return function(...$args) use ($funcs) {
33
        $next = end($args);
34
        $args = array_slice($args, 0, -1);
35
        $funcs[] = $next;
36
        $next = stack($funcs);
37
        return $next(...$args);
38
    };
39
}
40
41
function compose(array $funcs, $multi = false) {
42
    if (!$multi) {
43
        return function($arg) use ($funcs) {
44
            return array_reduce($funcs, function($acc, $func) {
45
                return $func($acc);
46
            }, $arg);
47
        };
48
    }
49
50
    return function(...$args) use ($funcs) {
51
        return array_reduce($funcs, function($acc, $func) {
52
            return $func(...$acc);
53
        }, $args);
54
    };
55
}
56
57
58
function joinPath(array $parts, $sep = DIRECTORY_SEPARTOR) {
59
    return array_reduce($parts, function($acc, $part) use ($sep) {
60
        if ($acc === null) {
61
            return rtrim($part, $sep);
62
        }
63
64
        return $acc . $sep . ltrim($part, $sep);
65
    }, null);
66
}
67