structr-step

 
var structr = require("structr"),
fs = require("fs");
 
var Config = structr({
 
/**
 */
 
"__construct"function(file) {
this.configFile = file;
 
},
/**
 * loads the config file
 */
 
"load"function(next) {
 
var self = this;
 
//make sure the confg file exists 
fs.stat(this.configFile, function(errstat) {
 
//if it doesn't exist, then set the config to an object, and 
//skip the rest 
if(err) {
self._config = {};
return next();
}
 
//otherwise load it 
fs.readFile(self.configFile, function(errcontent) {
 
//and set the config 
next(null, self._config = JSON.parse(content));
})
 
});
},
 
/**
 * returns the value in a config. This is blocked until
 * the config has been loaded
 */
 
"getValue"function(keynext) {
return this._config[key];
},
 
/**
 * sets the vaue in the config
 */
 
"setValue"function(keyvaluenext) {
this._config[key] = value;
this.save();
next();
},
 
/**
 * saves the config
 */
 
"step save"function(next) {
fs.writeFile(this.configFile, JSON.stringify(this._config), next);
}
});
 
 
 
var config = new Config(__dirname + "/cache.json");
config.load(function(err) {
if(err) return;
var value = config.getValue("name");
//do stuff... 
});
 
var structr = require("structr"),
fs = require("fs");
 
//mix into structr 
structr.mixin(require("../"));
 
 
 
var Config = structr({
 
/**
 */
 
"__construct"function(file) {
this.configFile = file;
 
//load the config before any methods can be 
//called 
this.load();
},
/**
 * loads the config file
 */
 
"step load"function(nextFn) {
this.step(
 
//make sure the confg file exists 
function(next) {
fs.stat(this.configFile, next);
},
 
//if it doesn't exist, then set the config to an object, and 
//skip the rest. Otherwise load it. 
function(errstatsnext) {
 
if(err) {
this._config = {};
return nextFn(err);
}
 
fs.readFile(this.configFile, next);
},
 
//set the config, and finish 
function(errcontentnext) {
next(null, this._config = JSON.parse(content));
},
 
//continue onto any other function called in this config 
nextFn
);
},
 
/**
 * returns the value in a config. This is blocked until
 * the config has been loaded
 */
 
"step getValue"function(keynext) {
next(null, this._config[key]);
},
 
/**
 * sets the vaue in the config
 */
 
"step setValue"function(keyvaluenext) {
this._config[key] = value;
this.save();
next();
},
 
/**
 * saves the config
 */
 
"step save"function(next) {
fs.writeFile(this.configFile, JSON.stringify(this._config), next);
}
});
 
 
 
var config = new Config(__dirname + "/cache.json");
config.getValue("name", function(errvalue) {
if(!value) {
console.log("config value does not exist, saving!");
config.setValue("name", "craig");
} else {
console.log("hello %s!", value);
}
});