Config.php
1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
/* vim: set shiftwidth=2 expandtab softtabstop=2: */
namespace Boris;
/**
* Config handles loading configuration files for boris
*/
class Config {
private $_searchPaths;
private $_cascade = false;
private $_files = array();
/**
* Create a new Config instance, optionally with an array
* of paths to search for configuration files.
*
* Additionally, if the second, optional boolean argument is
* true, all existing configuration files will be loaded, and
* effectively merged.
*
* @param array $searchPaths
* @param bool $cascade
*/
public function __construct($searchPaths = null, $cascade = false) {
if (is_null($searchPaths)) {
$searchPaths = array();
if ($userHome = getenv('HOME')) {
$searchPaths[] = "{$userHome}/.borisrc";
}
$searchPaths[] = getcwd() . '/.borisrc';
}
$this->_cascade = $cascade;
$this->_searchPaths = $searchPaths;
}
/**
* Searches for configuration files in the available
* search paths, and applies them to the provided
* boris instance.
*
* Returns true if any configuration files were found.
*
* @param Boris\Boris $boris
* @return bool
*/
public function apply(Boris $boris) {
$applied = false;
foreach($this->_searchPaths as $path) {
if (is_readable($path)) {
$this->_loadInIsolation($path, $boris);
$applied = true;
$this->_files[] = $path;
if (!$this->_cascade) {
break;
}
}
}
return $applied;
}
/**
* Returns an array of files that were loaded
* for this Config
*
* @return array
*/
public function loadedFiles() {
return $this->_files;
}
// -- Private Methods
private function _loadInIsolation($path, $boris) {
require $path;
}
}