-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.js
145 lines (127 loc) · 2.81 KB
/
config.js
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/**
* Wrapper for configuration arrays. Multiple configuration readers can be
* attached to allow loading configuration from files, database, etc.
*
* @package Johana
* @category Configuration
* @author Johana Team
* @copyright (c) 2011 Johana Team
* @license http://johanaframework.org/license
*/
JohanaConfig = function()
{
/**
* @var Array Configuration readers
*/
var _readers = [];
/**
* Attach a configuration reader. By default, the reader will be added as
* the first used reader. However, if the reader should be used only when
* all other readers fail, use `false` for the second parameter.
*
* config.attach(reader); // Try first
* config.attach(reader, false); // Try last
*
* @param Object ConfigReader instance
* @param Boolean add the reader as the first used object
* @return this
*/
this.attach = function(reader, first)
{
first = first || true;
if (first === true)
{
// Place the log reader at the top of the stack
_readers.unshift(reader);
}
else
{
// Place the reader at the bottom of the stack
_readers.push(reader);
}
return this;
};
/**
* Detach a configuration reader.
*
* config.detach(reader);
*
* @param Object ConfigReader instance
* @return this
*/
this.detach = function(reader)
{
var key = _readers.indexOf(reader);
if (key !== -1)
{
// Remove the writer
delete _readers[key];
}
return this;
};
/**
* Load a configuration group. Searches the readers in order until the
* group is found. If the group does not exist, an empty configuration
* array will be loaded using the first reader.
*
* array = config.load(name);
*
* @param String configuration group name
* @return ConfigReader
* @throws Error
*/
this.load = function(group)
{
for (var reader in _readers)
{
var config = _readers[reader].load(group);
if (config)
{
// Found a reader for this configuration group
return config;
}
}
if (_readers.length === 0)
{
throw new Error('No configuration readers attached');
}
// Load the reader as an empty array
return config.load(group, {});
};
/**
* Copy one configuration group to all of the other readers.
*
* config.copy(name);
*
* @param String configuration group name
* @return this
*/
this.copy = function(group)
{
// Load the configuration group
var config = this.load(group);
// TODO:
return this;
};
};
/**
* @var JohanaConfig Singleton static instance
*/
var _instance = null;
/**
* Get the singleton instance of Config.
*
* config = Config.instance();
*
* @return Config
*/
JohanaConfig.instance = function()
{
if (_instance === null)
{
// Create a new instance
_instance = new Config();
}
return _instance;
};
module.exports = JohanaConfig;