poseidon-cassandra
Version:
A future wrapper around the node-cassandra-cql driver using Poseidon
95 lines (83 loc) • 2.55 kB
JavaScript
var Cassandra, Driver, Promise;
Cassandra = require('cassandra-driver');
Promise = require('bluebird');
Driver = (function() {
function Driver() {
this._configuration = {};
this._connections = {};
return;
}
Driver.prototype.configure = function(connName, connConfig) {
if (connConfig == null) {
throw new Error('Configuration object required');
}
this._configuration[connName] = connConfig;
};
Driver.prototype.openConnection = function(connName, options) {
var client, _connection;
if (options == null) {
options = {};
}
if (this._configuration[connName] == null) {
return Promise.reject(new Error('Connection not configured'));
}
if (this._connections[connName] != null) {
return this._connections[connName];
}
_connection = Promise.defer();
client = new Cassandra.Client(this._configuration[connName]);
client.connect(function(err) {
if (err != null) {
return _connection.reject(err);
} else {
return _connection.resolve(client);
}
});
return this._connections[connName] = _connection.promise;
};
Driver.prototype.closeConnection = function(connName) {
var _defer,
_this = this;
if (this._connections[connName] == null) {
return Promise.reject(new Error('Connection does not exist'));
}
_defer = Promise.pending();
this._connections[connName].then(function(client) {
return client.shutdown(function(err, result) {
if (err) {
return _defer.reject(err);
}
delete _this._connections[connName];
return _defer.resolve(result);
});
});
return _defer.promise;
};
Driver.prototype.reset = function() {
var connConfig, connName, _connections, _ref;
_connections = [];
_ref = this._configuration;
for (connName in _ref) {
connConfig = _ref[connName];
if (this._connections[connName] != null) {
_connections.push(this.closeConnection(connName));
}
delete this._configuration[connName];
}
return Promise.all(_connections);
};
Driver.prototype.shutdown = function() {
var connConfig, connName, _connections, _ref;
_connections = [];
_ref = this._configuration;
for (connName in _ref) {
connConfig = _ref[connName];
if (this._connections[connName] != null) {
_connections.push(this.closeConnection(connName));
}
}
return Promise.all(_connections);
};
return Driver;
})();
module.exports = Driver;