Completed
Push — v4.0-dev ( 6660e2...b14a8f )
by
unknown
11s
created

resolve-name.php ➔ absoluteResolveName()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 5
nc 1
nop 1
dl 0
loc 9
ccs 0
cts 4
cp 0
crap 6
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 4
        return $next($args->withName($args->name . '.' . $ext));
21 4
    };
22
}
23
24
function prefixResolveName($prefix) {
25
    return function(ResolveNameArgs $args, $next) use ($prefix) {
26 8
        if (strpos($args->name, '/') === 0) {
27 4
            return $next($args);
28
        }
29
30 4
        return $next($args->withName(
31 4
            Plates\Util\joinPath([$prefix, $args->name])
32
        ));
33 8
    };
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 8
            strpos($args->name, './') === 0
41 8
            || strpos($args->name, '../') === 0
42 8
        ) && isset($args->context['current_directory']);
43
44 8
        if (!$is_relative) {
45 4
            return $next($args); // nothing to do
46
        }
47
48 4
        return $next($args->withName(
49 4
            Plates\Util\joinPath([$args->context['current_directory'], $args->name])
50
        ));
51 8
    };
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 32
        return $args->name;
58 32
    };
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