ac-node
Version:
A common module for building Atlassian Connect add-ons
97 lines (81 loc) • 2.34 kB
JavaScript
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;