carcass-couch
Version:
(Node.js) A simple wrap of cradle plus some stream APIs, in Carcass style.
70 lines (62 loc) • 1.44 kB
text/coffeescript
debug = require('debug')('carcass:couch')
cradle = require('cradle')
carcass = require('carcass')
config = require('carcass-config')
###*
* Represents a CouchDB connection.
###
module.exports = class Couch
###*
* Constructor.
###
constructor: (options) ->
@id(options)
debug('initializing the %s couch.', @id())
###*
* Cache of the connection.
*
* @type {Function}
###
connection: carcass.helpers.accessor('_connection')
###*
* Connect.
*
* @public
###
connect: (done = ->) ->
conn = @connection()
if conn?
done(null, conn)
return @
config = @config() ? {}
debug('%s connecting to CouchDB', @id(), config)
# Connect.
# TODO: really connect and detect connection errors?
conn = new cradle.Connection(config)
# Cache connection.
@connection(conn)
done(null, conn)
return @
###*
* Disconnect.
*
* @public
###
disconnect: ->
# TODO: it's buggy, I guess.
# @connection()?.close()
@connection(null)
return @
###*
* Get a DB instance.
*
* @public
###
getDB: (options) ->
return @configManager().getConsumer('CouchDB', options).couch(@)
###*
* Mixins.
###
carcass.mixable(Couch)
Couch::mixin(carcass.proto.uid)
Couch::mixin(config.proto.consumer)