Skip to content

Commit

Permalink
fixes #78 : Add UnitTests for modules
Browse files Browse the repository at this point in the history
Making adjustments to settings module to enable unit testing
  • Loading branch information
remie committed Sep 16, 2015
1 parent 6e4042c commit 4e3c5cb
Showing 1 changed file with 61 additions and 43 deletions.
104 changes: 61 additions & 43 deletions lib/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,53 +10,71 @@ var EventEmitter = require('events').EventEmitter;

// ------------------------------------------------------------------------------------------ Module definition

module.exports = (function() {
module.exports = function(opt) {
return new Settings(opt);
}

var self = new EventEmitter();
function Settings(opt) {
this.options = opt || {};

self.get = function(next) {
fs.readFile('./settings.json', 'utf8', function(err, content) {
if(err) {
next(err, {});
} else {
try {
var config = nconf.get();
var settings = JSON.parse(content);
var output = _.assign(config, settings);

if(!path.isAbsolute(output.localstoragepath)) {
output.localstoragepath = path.resolve(nconf.get('basedir'), output.localstoragepath);
}

next(null, output);
} catch(err) {
next(err, {});
}
}
});
if(_.isString(this.options)) {
this.options = {
path: this.options
}
} else if(_.isObject(this.options)) {
this.options = _.assign({
path: './settings.json',
encoding: 'utf-8'
}, opt);
} else {
throw "Invalid options provided";
}
};

self.push = function(settings, next) {
var current = {};
settings = _.pick(settings, _.identity);
Settings.prototype = new EventEmitter;

fs.readFile('./settings.json', 'utf8', function(err, content) {
if(err) {
next(err);
} else {
try {
var current = JSON.parse(content);
var output = _.assign(current, settings);
fs.writeFile('./settings.json', JSON.stringify(output), function(err) {
self.emit('settings.push', err, output);
next(err);
});
} catch(err) {
next(err);
Settings.prototype.get = function(next) {
var self = this;
fs.readFile(self.options.path, self.options.encoding, function(err, content) {
if(err) {
next(err, {});
} else {
try {
var config = nconf.get();
var settings = JSON.parse(content);
var output = _.assign(config, settings);

if(!path.isAbsolute(output.localstoragepath)) {
output.localstoragepath = path.resolve(nconf.get('basedir'), output.localstoragepath);
}
};
});
}

return self;
})();
next(null, output);
} catch(err) {
next(err, {});
}
}
});
};

Settings.prototype.push = function(settings, next) {
var self = this;
var current = {};
settings = _.pick(settings, _.identity);

fs.readFile(self.options.path, self.options.encoding, function(err, content) {
if(err) {
next(err);
} else {
try {
var current = JSON.parse(content);
var output = _.assign(current, settings);
fs.writeFile(self.options.path, JSON.stringify(output), self.options.encoding, function(err) {
self.emit('settings.push', err, output);
next(err);
});
} catch(err) {
next(err);
}
};
});
};

0 comments on commit 4e3c5cb

Please sign in to comment.