UNPKG

cache-storage

Version:

[ABANDONED] Advanced cache storage for node js

166 lines (144 loc) 4.66 kB
// Generated by CoffeeScript 1.6.3 (function() { var RedisStorage, Storage, assert, redis, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; Storage = require('./Storage'); redis = require('redis'); assert = require('assert'); RedisStorage = (function(_super) { __extends(RedisStorage, _super); RedisStorage.META_KEY = '__redis__storage__meta__key__'; RedisStorage.prototype.client = null; function RedisStorage() { if (typeof window !== 'undefined') { throw new Error('FileStorage: Can not use this storage in browser'); } this.client = redis.createClient(); } RedisStorage.prototype.selectDatabase = function(database, fn) { return this.client.SELECT(database, fn); }; RedisStorage.prototype._read = function(name, fn, defaults) { var _this = this; if (defaults == null) { defaults = null; } return this.client.GET(name, function(err, data) { if (err) { return fn(err, null); } else if (data === null) { if (defaults === null) { return fn(null, null); } else { return _this._write(name, defaults, function(err) { if (err) { return fn(err, null); } else { return _this._read(name, function(err, data) { if (err) { return fn(err, null); } else { return fn(null, data); } }); } }); } } else { return fn(null, JSON.parse(data)); } }); }; RedisStorage.prototype._write = function(name, data, fn) { return this.client.SET(name, JSON.stringify(data), function(err) { if (err) { return fn(err); } else { return fn(null); } }); }; RedisStorage.prototype._remove = function(name, fn) { return this.client.DEL(name, fn); }; RedisStorage.prototype._removeAll = function(fn) { return this.client.FLUSHDB(fn); }; RedisStorage.prototype.getMeta = function(fn) { return this._read(RedisStorage.META_KEY, fn, {}); }; RedisStorage.prototype.read = function(key, fn) { var _this = this; return this._read(key, function(err, data) { if (err) { return fn(err, null); } else if (data === null) { return fn(null, null); } else { return _this.findMeta(key, function(err, meta) { if (err) { return fn(err, null); } else { return _this.verify(meta, function(err, state) { if (err) { return fn(err, null); } else if (state) { return fn(null, data); } else { return _this.remove(key, function() { return fn(null, null); }); } }); } }); } }); }; RedisStorage.prototype.write = function(key, data, dependencies, fn) { var _this = this; if (dependencies == null) { dependencies = {}; } return this._write(key, data, function(err) { if (err) { return fn(err); } else { return _this.getMeta(function(err, meta) { if (err) { return fn(err); } else { meta[key] = dependencies; return _this._write(RedisStorage.META_KEY, meta, fn); } }); } }); }; RedisStorage.prototype.remove = function(key, fn) { var _this = this; return this.getMeta(function(err, meta) { if (err) { return fn(err); } else { if (typeof meta[key] !== 'undefined') { delete meta[key]; } return _this._remove(key, function(err) { if (err) { return fn(err); } else { return _this._write(RedisStorage.META_KEY, meta, fn); } }); } }); }; RedisStorage.prototype.removeAll = function(fn) { return this._removeAll(fn); }; return RedisStorage; })(Storage); module.exports = RedisStorage; }).call(this);