poseidon-mongo
Version:
A future wrapper around the Node Native MongoDB driver using Poseidon.
59 lines (48 loc) • 2.08 kB
text/coffeescript
###
Driver
======
The `Driver` class maintains multiple database connection configurations.
It also caches open database connections for quick access as **Promise promises** for
easy access and reuse.
###
{MongoClient} = require 'mongodb'
Database = require './database'
Promise = require 'bluebird'
_ = require 'lodash'
connect = Promise.promisify(MongoClient.connect, MongoClient)
class Driver
constructor: () ->
= {}
= {}
return
configure: (connName, connConfig) ->
throw new Error('Configuration object required') unless connConfig?
throw new Error('Invalid authentication credentials') unless not connConfig.auth? or /.+:.+/.test connConfig.auth
[connName] = _.defaults connConfig, hosts: ['localhost:27017'], auth: null, database: 'default', options: null
return
openConnection: (connName) ->
return Promise.reject new Error('Connection not configured') unless [connName]?
if [connName]? then return [connName]
config = [connName]
if config.auth? then authString = "#{config.auth}@"
else authString = ''
url = "mongodb://#{authString}#{config.hosts.join(',')}/#{config.database}?#{if config.authSource then 'authSource='+config.authSource else ''}"
[connName] = connect(url, config.options)
closeConnection: (connName) ->
return Promise.reject new Error('Connection does not exist') unless [connName]?
[connName]
.then (db) =>
delete [connName]
db.close(true)
reset: () ->
_connections = []
for connName, connConfig of
if [connName]? then _connections.push()
delete [connName]
Promise.all(_connections)
shutdown: () ->
_connections = []
for connName, connConfig of
if [connName]? then _connections.push
Promise.all _connections
module.exports = Driver