mirror of
https://github.com/atlanticbiomedical/biomedjs.git
synced 2025-07-02 00:47:26 -04:00
69 lines
1.5 KiB
JavaScript
69 lines
1.5 KiB
JavaScript
|
|
module.exports = Collection;
|
|
|
|
|
|
var inherits = require('util').inherits,
|
|
EventEmitter = require('events').EventEmitter,
|
|
KeyLock = require('./KeyLock.js'),
|
|
request = require('./request.js');
|
|
|
|
|
|
function Collection(name) {
|
|
this._name = name;
|
|
}
|
|
|
|
inherits(Collection, EventEmitter);
|
|
|
|
Collection.prototype.get = function(key, cb) {
|
|
this._request('get', key, null, function(err, msg) {
|
|
if (err)
|
|
return cb(err);
|
|
else if (!msg.json)
|
|
return cb(null, undefined);
|
|
else
|
|
return cb(null, JSON.parse(msg.json));
|
|
});
|
|
};
|
|
|
|
Collection.prototype.set = function(key, value, cb) {
|
|
var data = { json: JSON.stringify(value) };
|
|
this._request('set', key, data, cb && function(err, msg) {
|
|
return cb(err);
|
|
});
|
|
};
|
|
|
|
Collection.prototype.del = function(key, cb) {
|
|
return this._request('set', key, null, cb && function(err, msg) {
|
|
return cb(err);
|
|
});
|
|
};
|
|
|
|
Collection.prototype.acquire = function(key, cb) {
|
|
var self = this;
|
|
|
|
this._request('acquire', key, null, function(err, msg) {
|
|
if (err)
|
|
return cb(err);
|
|
|
|
var json = msg.json;
|
|
var lock = new KeyLock(self, key, json);
|
|
cb(null, lock, lock.get());
|
|
});
|
|
};
|
|
|
|
Collection.prototype.configure = function(config) {
|
|
var self = this;
|
|
|
|
this._request('configure', null, { config: config }, function(err, msg) {
|
|
if (err)
|
|
self.emit('error', err);
|
|
});
|
|
|
|
return this;
|
|
};
|
|
|
|
// This function clobbers `data` if specified
|
|
Collection.prototype._request = function(method, key, data, cb) {
|
|
request(method, this._name, key, data, cb);
|
|
};
|