spincycle
Version:
A reactive message router and object manager that lets clients subscribe to object property changes on the server
46 lines (39 loc) • 1.3 kB
text/coffeescript
debug = process.env["DEBUG"]
defer = require('node-promise').defer
SpinTag = require('./SpinTag')
class Taginator
q = defer()
Taginator.getTagsFor(ds, type, id).then (existingTags)->
if existingTags.indexOf(tag) == -1
record ={name: tag, modelRef: id, modelType: type}
new SpinTag(record).then (st)->
st.serialize()
q.resolve()
else
q.resolve()
return q
q = defer()
ds.findQuery('SpinTag', {property: 'modelType', value: type, property2: 'modelRef', value2: id}).then (results)->
rv = []
results.forEach (res) -> rv.push res.name
q.resolve(rv)
return q
q = defer()
lookup = {}
rv = []
count = tags.length
tags.forEach (tag)->
ds.findQuery('SpinTag', {property: 'modelType', value: type, property2: 'name', value2: tag}).then (results)->
results.forEach (spintag)->
found = lookup[spintag.modelRef] or 0
found++
lookup[spintag.modelRef] = found
if --count == 0
for k,v of lookup
if v == tags.length then rv.push k
q.resolve(rv)
return q
module.exports = Taginator