Completed
Push — 170-naming-strategies ( 8ec841 )
by
unknown
14:49
created

resolve-name.php ➔ absoluteResolveName()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 5
nc 1
nop 1
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
1
<?php
2
3
namespace League\Plates\Template;
4
5
use League\Plates;
6
7
function absoluteResolveName($file_exists = 'file_exists') {
8
    return function(ResolveNameArgs $args, $next) use ($file_exists) {
9
        if ($file_exists($args->name)) {
10
            return $args->name;
11
        }
12
13
        return $next($args);
14
    };
15
}
16
17
/** appends an extension to the name */
18
function extResolveName($ext = 'phtml') {
19
    return function(ResolveNameArgs $args, $next) use ($ext) {
20
        return $next($args->withName($args->name . '.' . $ext));
21
    };
22
}
23
24
function prefixResolveName($prefix) {
25
    return function(ResolveNameArgs $args, $next) use ($prefix) {
26
        if (strpos($args->name, '/') === 0) {
27
            return $next($args);
28
        }
29
30
        return $next($args->withName(
31
            Plates\Util\joinPath([$prefix, $args->name])
32
        ));
33
    };
34
}
35
36
/** If the template context stores a current directory and  */
37
function relativeResolveName() {
38
    return function(ResolveNameArgs $args, $next) {
39
        $is_relative = (
40
            strpos($args->name, './') === 0
41
            || strpos($args->name, '../') === 0
42
        ) && isset($args->context['current_directory']);
43
44
        if (!$is_relative) {
45
            return $next($args); // nothing to do
46
        }
47
48
        return $next($args->withName(
49
            Plates\Util\joinPath([$args->context['current_directory'], $args->name])
50
        ));
51
    };
52
}
53
54
/** Just return the name as is to be rendered. Expects at this point for the name to be fully built. */
55
function idResolveName() {
56
    return function(ResolveNameArgs $args) {
57
        return $args->name;
58
    };
59
}
60
61
function platesResolveName(array $config = []) {
62
    return Plates\Util\stackGroup(array_filter([
63
        absoluteResolveName(),
64
        relativeResolveName(),
65
        isset($config['ext']) ? extResolveName($config['ext']) : extResolveName(),
66
        isset($config['base_dir']) ? prefixResolveName($config['base_dir']) : null,
67
        idResolveName(),
68
    ]));
69
}
70