Completed
Pull Request — master (#3)
by Iacovos
02:50
created

FilenameResolver::addDirectory()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Softius\ResourcesResolver;
4
5
class FilenameResolver
6
{
7
    const DEFAULT_DIRECTORY_SEPARATOR = DIRECTORY_SEPARATOR;
8
9
    /**
10
     * @var bool
11
     */
12
    private $directory_separator;
13
14
    /**
15
     * @var array
16
     */
17
    private $dirs;
18
19
    /**
20
     * @var bool
21
     */
22
    private $use_include_path;
23
24
    /**
25
     * @var string
26
     */
27
    private $extension;
28
29
    /**
30
     * FilePathResolver constructor.
31
     *
32
     * @param null $directories
33
     * @param null $directory_separator
34
     */
35 5
    public function __construct($directories = null, $directory_separator = null)
36
    {
37 5
        $this->directory_separator = ($directory_separator === null) ? self::DEFAULT_DIRECTORY_SEPARATOR : $this->directory_separator;
38
39 5
        $this->dirs = [];
40 5
        if (is_string($directories)) {
41 3
            $this->addDirectory($directories);
42 5
        } elseif (is_array($directories)) {
43 1
            $this->addDirectories($directories);
44 1
        }
45
46 5
        $this->useIncludePath(false);
47 5
    }
48
49
    /**
50
     * @param array $directories
51
     */
52 1
    public function addDirectories($directories)
53
    {
54 1
        $this->dirs = array_merge($this->dirs, $directories);
55 1
    }
56
57
    /**
58
     * @param string $directory
59
     */
60 3
    public function addDirectory($directory)
61
    {
62 3
        array_push($this->dirs, $directory);
63 3
    }
64
65
    /**
66
     * @param bool $use
67
     */
68 5
    public function useIncludePath($use)
69
    {
70 5
        $this->use_include_path = $use;
71 5
    }
72
73
    /**
74
     * @param $extension
75
     */
76 1
    public function setExtension($extension)
77
    {
78 1
        $this->extension = $extension;
79 1
    }
80
81
    /**
82
     * @param string $in
83
     * @return null|string
84
     * @throws \Exception
85
     */
86 5
    public function resolve($in)
87
    {
88 5
        $partial_path = $in;
89
90 5
        $dirs = $this->dirs;
91 5
        if ($this->use_include_path) {
92 1
            $dirs = array_merge($dirs, explode(PATH_SEPARATOR, get_include_path()));
93 1
        }
94
95 5
        foreach ($dirs as $dir) {
96 5
            $path = $dir.DIRECTORY_SEPARATOR.$partial_path;
97 5
            if ($this->extension !== null) {
98 1
                $path = $path.'.'.$this->extension;
99 1
            }
100
101 5
            if (file_exists($path)) {
102 4
                return realpath($path);
103
            }
104 2
        }
105
106
        // @todo throw an exception instead
107 1
        throw new \Exception(sprintf('Could not resolve %s to a filename', $in));
108
    }
109
}
110