spincycle
Version:
A reactive message router and object manager that lets clients subscribe to object property changes on the server
97 lines (84 loc) • 2.27 kB
JavaScript
// Generated by CoffeeScript 1.9.3
(function() {
var SpinTag, Taginator, debug, defer;
debug = process.env["DEBUG"];
defer = require('node-promise').defer;
SpinTag = require('./SpinTag');
Taginator = (function() {
function Taginator() {}
Taginator.setTag = function(ds, type, id, tag) {
var q;
q = defer();
Taginator.getTagsFor(ds, type, id).then(function(existingTags) {
var record;
if (existingTags.indexOf(tag) === -1) {
record = {
name: tag,
modelRef: id,
modelType: type
};
return new SpinTag(record).then(function(st) {
st.serialize();
return q.resolve();
});
} else {
return q.resolve();
}
});
return q;
};
Taginator.getTagsFor = function(ds, type, id) {
var q;
q = defer();
ds.findQuery('SpinTag', {
property: 'modelType',
value: type,
property2: 'modelRef',
value2: id
}).then(function(results) {
var rv;
rv = [];
results.forEach(function(res) {
return rv.push(res.name);
});
return q.resolve(rv);
});
return q;
};
Taginator.searchForTags = function(ds, type, tags) {
var count, lookup, q, rv;
q = defer();
lookup = {};
rv = [];
count = tags.length;
tags.forEach(function(tag) {
return ds.findQuery('SpinTag', {
property: 'modelType',
value: type,
property2: 'name',
value2: tag
}).then(function(results) {
return results.forEach(function(spintag) {
var found, k, v;
found = lookup[spintag.modelRef] || 0;
found++;
lookup[spintag.modelRef] = found;
if (--count === 0) {
for (k in lookup) {
v = lookup[k];
if (v === tags.length) {
rv.push(k);
}
}
return q.resolve(rv);
}
});
});
});
return q;
};
return Taginator;
})();
module.exports = Taginator;
}).call(this);
//# sourceMappingURL=Taginator.js.map