UNPKG

ac-node

Version:

A common module for building Atlassian Connect add-ons

97 lines (81 loc) 2.34 kB
var _ = require('lodash'); var rsvp = require('rsvp'); var Promise = rsvp.Promise; var data = {}; function MemoryStore(scope) { if (!(this instanceof MemoryStore)) { return new MemoryStore(scope); } this._scope = scope; }; MemoryStore.prototype._get = function (key) { return new Promise(function (resolve, reject) { resolve(data[key]); }); }; MemoryStore.prototype.get = function (key) { return this._get(this._key(key)); }; MemoryStore.prototype._set = function (key, value, expiresIn) { return new Promise(function (resolve, reject) { data[key] = value; if (expiresIn) { setTimeout(function () { delete data[key]; }, expiresIn * 1000); } resolve(); }); }; MemoryStore.prototype.set = function (key, value, expiresIn) { return this._set(this._key(key), value, expiresIn); }; MemoryStore.prototype._del = function (key) { return new Promise(function (resolve, reject) { delete data[key]; resolve(); }); }; MemoryStore.prototype.del = function (key) { return this._del(this._key(key)); }; MemoryStore.prototype._all = function (scope, limit, offset) { scope = scope || ''; var prefix = scope + (scope ? ':' : ''); limit = (limit >>> 0) || Number.MAX_VALUE; offset = offset >>> 0; return new Promise(function (resolve, reject) { var keys = _.keys(data).slice(offset, limit); var results = _.object(keys.filter(function (key) { return !prefix || key.indexOf(prefix) === 0; }).map(function (key) { return [key, data[key]]; })); resolve(results); }); }; MemoryStore.prototype.all = function (limit, offset) { return this._all(this._scope, limit, offset); }; MemoryStore.prototype.narrow = function (subscope) { return new MemoryStore(this._key(subscope)); }; MemoryStore.prototype.clear = function () { var self = this; var pattern = new RegExp('^' + (self._scope ? self._scope + ':' : '') + '.*'); return new Promise(function (resolve, reject) { Object.keys(data).forEach(function (key) { if (pattern.test(key)) { delete data[key]; } }); resolve(); }); }; MemoryStore.prototype._key = function (key) { return this._scope ? this._scope + ':' + key : key; } MemoryStore.create = function (config, scope) { return MemoryStore(scope); }; module.exports = MemoryStore;