function NerdieInterface(parentNerdie, plugin, options) { if (undefined === options) { options = {}; } emitter.call(this); parentNerdie.setMaxListeners(0); this.nerdie = parentNerdie; this.plugin = plugin; myInterface = this; this.nerdie.addListener('init', function (config, loadedPlugins) { myInterface.config = config; if ('function' == typeof plugin.init) { plugin.init(loadedPlugins); } }); plugin.addListener = this.addListener; if (options.db && typeof plugin.gotDb == 'function') { Tiny(dbPath + plugin.constructor.name + '.tiny', function (err, db) { if (err) { console.log("Failed to load database: " + plugin.constructor.name + " -> " + err); return false; } plugin.gotDb(db); return true; }); } }
this.put = function(name, id, data, cb) { var collection = collections[name]; if (!collection) { tiny(name + '.tiny', function(err, collection) { if (err) { log.error(err); } collections[name] = collection; if (cb) { if (!data.id) { data.id = id; } collections[name].set(id, data, function(err) { cb(err); }); } }); } else { if (cb) { if (!data.id) { data.id = id; } collections[name].set(id, data, function(err) { cb(err); }); } } }
this.post = function(name, data, cb) { if (!data.id) { var id = uuid(); } else { id = data.id; } var collection = collections[name]; if (!collection) { tiny(name + '.tiny', function(err, collection) { if (err) { log.error(err); } collections[name] = collection; if (cb) { data.id = id; collections[name].set(id, data, function(err) { cb(err, [{id: id}]); }); } }); } else { if (cb) { data.id = id; collections[name].set(id, data, function(err) { cb(err, [{id: id}]); }); } } }
this.del = function(name, id, cb) { var collection = collections[name]; if (!collection) { tiny(name + '.tiny', function(err, collection) { if (err) { log.error(err); } collections[name] = collection; if (cb) { collections[name].remove(id, function(err) { cb(err); }); } }); } else { if (cb) { collections[name].remove(id, function(err) { cb(err); }); } } }
this.getAll = function(name, query, skip, limit, cb) { // TODO: Implement skip and limit var collection = collections[name]; if (!collection) { tiny(name + '.tiny', function(err, collection) { if (err) { log.error(err); } collections[name] = collection; if (cb) { if (query) { if (isRegexQuery(query)) { collections[name].fetch({ limit: 1 }, function(doc, key) { for (var i in query) { if (doc[i] && query[i] && query[i].$regex && doc[i].toLowerCase() == query[i].$regex.toLowerCase()) { return true; } else { return false; } } }, function(err, results) { cb(err, results); }); } else { collections[name].find(query)(function(err, results) { cb(err, results); }); } } else { cb(null, collections[name]); } } }); } else { if (cb) { if (query) { if (isRegexQuery(query)) { collections[name].fetch({ limit: 1 }, function(doc, key) { for (var i in query) { if (doc[i] && query[i] && query[i].$regex && doc[i].toLowerCase() == query[i].$regex.toLowerCase()) { return true; } else { return false; } } }, function(err, results) { cb(err, results); }); } else { collections[name].find(query)(function(err, results) { cb(err, results); }); } } else { cb(null, collections[name]); } } } }