structr-step

0.0.3 • Public • Published

Structr-step makes asyncronous function chainable

Projects using structr-step

Turn code from this

 
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(err, stat) {
 
            //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(err, content) {
 
                //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(key, next) {
        return this._config[key];
    },
 
    /**
     * sets the vaue in the config
     */
 
    "setValue": function(key, value, next) {
        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...
});

Into This

 
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(err, stats, next) {
 
                if(err) {
                    this._config = {};
                    return nextFn(err);
                }
 
                fs.readFile(this.configFile, next);
            },
 
            //set the config, and finish
            function(err, content, next) {
                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(key, next) {
        next(null, this._config[key]);
    },
 
    /**
     * sets the vaue in the config
     */
 
    "step setValue": function(key, value, next) {
        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(err, value) {
    if(!value) {
        console.log("config value does not exist, saving!");
        config.setValue("name", "craig");
    } else {
        console.log("hello %s!", value);
    }
});
 

Readme

Keywords

none

Package Sidebar

Install

npm i structr-step

Weekly Downloads

2

Version

0.0.3

License

none

Last publish

Collaborators

  • architectd