memory.js | |
---|---|
/*
* memory.js: Simple memory storage engine for nconf configuration(s)
*
* (C) 2011, Charlie Robbins
*
*/
var common = require('../common'); | |
function Memory (options)@options {Object} Options for this instanceConstructor function for the Memory nconf store which maintains
a nested json structure based on key delimiters e.g. | var Memory = exports.Memory = function (options) {
options = options || {};
this.type = 'memory';
this.store = {};
this.mtimes = {};
this.readOnly = false;
this.loadFrom = options.loadFrom || null;
if (this.loadFrom) {
this.store = common.loadFilesSync(this.loadFrom);
}
}; |
function get (key)@key {string} Key to retrieve for this instance.Retrieves the value for the specified key (if any). | Memory.prototype.get = function (key) {
var target = this.store,
path = common.path(key); |
Scope into the object to get the appropriate nested context | while (path.length > 0) {
key = path.shift();
if (!(target && key in target)) {
return;
}
target = target[key];
if (path.length === 0) {
return target;
}
}
}; |
function set (key, value)@key {string} Key to set in this instance@value {literal|Object} Value for the specified keySets the | Memory.prototype.set = function (key, value) {
if (this.readOnly) {
return false;
}
var target = this.store,
path = common.path(key);
|
Update the | this.mtimes[key] = Date.now();
|
Scope into the object to get the appropriate nested context | while (path.length > 1) {
key = path.shift();
if (!target[key] || typeof target[key] !== 'object') {
target[key] = {};
}
target = target[key];
}
|
Set the specified value in the nested JSON structure | key = path.shift();
target[key] = value;
return true;
}; |
function clear (key)@key {string} Key to remove from this instanceRemoves the value for the specified | Memory.prototype.clear = function (key) {
if (this.readOnly) {
return false;
}
var target = this.store,
path = common.path(key);
|
Remove the key from the set of | delete this.mtimes[key];
|
Scope into the object to get the appropriate nested context | while (path.length > 1) {
key = path.shift();
if (!target[key]) {
return;
}
target = target[key];
}
|
Delete the key from the nested JSON structure | key = path.shift();
delete target[key];
return true;
}; |
function merge (key, value)@key {string} Key to merge the value into@value {literal|Object} Value to merge into the keyMerges the properties in | Memory.prototype.merge = function (key, value) {
if (this.readOnly) {
return false;
}
|
If the key is not an | if (typeof value !== 'object' || Array.isArray(value)) {
return this.set(key, value);
}
var self = this,
target = this.store,
path = common.path(key),
fullKey = key;
|
Update the | this.mtimes[key] = Date.now();
|
Scope into the object to get the appropriate nested context | while (path.length > 1) {
key = path.shift();
if (!target[key]) {
target[key] = {};
}
target = target[key];
} |
Set the specified value in the nested JSON structure | key = path.shift();
|
If the current value at the key target is not an | if (typeof target[key] !== 'object' || Array.isArray(target[key])) {
target[key] = value;
return true;
}
return Object.keys(value).every(function (nested) {
return self.merge(fullKey + ':' + nested, value[nested]);
});
}; |
function reset (callback)Clears all keys associated with this instance. | Memory.prototype.reset = function () {
if (this.readOnly) {
return false;
}
this.mtimes = {};
this.store = {};
return true;
};
|