UNPKG

jdb

Version:

A database that hacks.

166 lines (163 loc) 4.19 kB
// Generated by CoffeeScript 1.7.1 JDB.Jdb = (function() { function Jdb(options) { var Q, ego, fs, k, self, v; fs = require('fs'); Q = require('q'); self = { exec: function(opts) { var deferred, err, is_rolled_back, is_sent, jdb; if (ego.opts.promise) { deferred = Q.defer(); } if (!opts.command) { return; } is_sent = false; is_rolled_back = false; jdb = { send: function(data) { if (is_sent) { return; } else { is_sent = true; } if (typeof opts.callback === "function") { opts.callback(null, data); } if (ego.opts.promise) { return deferred.resolve(data); } }, save: function(data) { if (is_rolled_back) { return; } return ego.db_file.write("(" + opts.command + ")(jdb, " + (JSON.stringify(opts.data)) + ");\n", function() { return jdb.send(data); }); }, rollback: function() { ego.load_data(); return is_rolled_back = true; } }; Object.defineProperty(jdb, 'doc', { get: function() { return ego.doc; }, set: function() { return console.error(">> Error: 'jdb.doc' is readonly."); } }); try { opts.command(jdb, opts.data); } catch (_error) { err = _error; jdb.rollback(); if (opts.callback) { opts.callback(err); } else { if (ego.opts.promise) { deferred.reject(err); } } } if (ego.opts.promise) { return deferred.promise; } }, compact_db_file: function(callback) { var err, error; try { fs.writeFileSync(ego.opts.db_path, "var jdb = {\n doc: " + (JSON.stringify(ego.doc)) + ",\n send: function () {},\n save: function () {},\n rollback: function () {}\n};\n"); } catch (_error) { err = _error; error = err; } if (callback) { return callback(error); } else if (error) { throw error; } } }; ego = { opts: { db_path: 'jdb.db', compact_db_file: true, promise: false, error: null }, doc: {}, db_file: null, init: function() { ego.init_options(); ego.init_db_file(); return ego.db_file = fs.createWriteStream(ego.opts.db_path, { flags: 'a', encoding: 'utf8' }); }, init_options: function() { var k, v, _ref, _results; if (!options) { return; } _ref = ego.opts; _results = []; for (k in _ref) { v = _ref[k]; if (options[k] !== void 0) { _results.push(ego.opts[k] = options[k]); } else { _results.push(void 0); } } return _results; }, init_db_file: function() { if (fs.existsSync(ego.opts.db_path)) { ego.load_data(); if (ego.opts.compact_db_file) { return self.compact_db_file(); } } else { return self.compact_db_file(); } }, load_data: function() { var err, error, str; str = fs.readFileSync(ego.opts.db_path, 'utf8'); try { eval(str); if (typeof jdb.doc === 'object') { ego.doc = jdb.doc; } } catch (_error) { err = _error; error = err; } if (ego.opts.error) { return ego.opts.error(error); } else if (error) { throw error; } } }; for (k in self) { v = self[k]; this[k] = v; } self = this; for (k in ego) { v = ego[k]; if (typeof v === 'function') { v.bind(self); } } ego.init(); return self; } return Jdb; })();