datapumps
Version:
Node.js ETL (Extract, Transform, Load) toolkit for easy data import, export or transfer between systems.
78 lines (60 loc) • 2.06 kB
text/coffeescript
EventEmitter = require('events').EventEmitter
Promise = require('bluebird')
Pump = require('./Pump')
Buffer = require('./Buffer')
class Group extends EventEmitter
: 0
: 1
: 2
constructor: ->
= {}
= {}
= Group.STOPPED
addPump: (name, pump = null) ->
throw new Error 'Pump already exists' if [name]?
[name] = pump ? new Pump
[name].on 'end', => (name)
[name]
pumpEnded: (name) ->
end = true
for name, pump of
end = false if !pump.isEnded()
return if !end
= Group.ENDED
'end'
pump: (name) ->
throw new Error "Pump #{name} does not exist" if ![name]?
[name]
start: ->
throw new Error 'Group already started' if != Group.STOPPED
= Group.STARTED
do pump.start for name, pump of
@
isEnded: ->
== Group.ENDED
whenFinished: ->
return new Promise (resolve) =>
'end', ->
resolve()
createBuffer: (options = {}) ->
new Buffer options
expose: (exposedName, bufferPath) ->
throw new Error 'Already exposed a buffer with that name' if [exposedName]?
[exposedName] = (bufferPath)
_getBufferByPath: (bufferPath) ->
items = bufferPath.split('/')
throw new Error 'bufferPath format must be <pumpName>/<bufferName>' if items.length > 2
[ pumpName, bufferName ] = items
(pumpName).buffer(bufferName ? 'output')
buffer: (name = 'output') ->
throw new Error "No such buffer: #{name}" if ![name]
[name]
setInputPump: (pumpName) ->
= (pumpName)
from: (buffer = null) ->
throw new Error 'Input pump is not set, use .setInputPump to set it' if !?
.from buffer
@
process: ->
throw new Error 'Cannot call .process() on a group: data in a group is transformed by its pumps.'
module.exports = Group