atomicrecord
Version:
Super lightweight node.js ActiveRecord ORM layer for FoundationDB
67 lines (51 loc) • 1.3 kB
text/coffeescript
{EventEmitter} = require('events')
fdb = require('fdboost')()
db = fdb.open()
save = (tr, list, callback) ->
len = list.length
saved = 0
cb = (err) ->
if (err)
callback(err)
else
list.emit('recordsaved', record)
saved++
callback(null) if saved is len
record.save(tr, cb) for record in list._records
return
transactionalSave = fdb.transactional(save)
module.exports = class AtomicList extends EventEmitter
constructor: (recordsOrSize) ->
super()
if (recordsOrSize instanceof Array)
= new Array(recordsOrSize.length)
[i] = record for record, i in recordsOrSize
else if (typeof(recordsOrSize) is 'number')
= new Array(recordsOrSize)
else
= [] if is null
_records: null
add: (record) ->
.push(record)
save: (tr, callback) ->
if (typeof(tr) is 'function')
callback = tr
tr = null
fdb.future.create (futureCb) =>
len =
complete = (err) =>
if (err)
futureCb(err)
else
futureCb(null, len)
transactionalSave(tr || db, @, complete)
return
, callback
return
Object.defineProperty @::, 'length',
get: ->
.length
set: (val) ->
.length = val