pad.js |
|
Generated by CoffeeScript 1.9.1 |
(function() {
module.exports = (function() {
var GPREFIX, PPREFIX, UPREFIX, common, cuid, ld, pad, storage;
ld = require('lodash');
cuid = require('cuid');
common = require('./common.js');
storage = require('../storage.js');
PPREFIX = storage.DBPREFIX.PAD;
UPREFIX = storage.DBPREFIX.USER;
GPREFIX = storage.DBPREFIX.GROUP;
pad = {};
pad.fn = {};
pad.fn.assignProps = function(params) {
var isValidVisib, p, u, v, vVal;
p = params;
u = {
name: p.name,
group: p.group
};
if (p.visibility === 'restricted' && ld.isArray(p.users)) {
u.users = ld.filter(p.users, ld.isString);
} else {
u.users = [];
}
vVal = ['restricted', 'private', 'public'];
v = p.visibility;
isValidVisib = ld.isString(v) && ld.includes(vVal, v);
u.visibility = isValidVisib ? v : null;
u.password = ld.isString(p.password) ? p.password : null;
u.readonly = ld.isBoolean(p.readonly) ? p.readonly : null;
return u;
};
pad.fn.checkSet = function(p, callback) {
var keys;
keys = ld.map(p.users, function(v) {
return UPREFIX + v;
});
keys.push(GPREFIX + p.group);
return common.checkMultiExist(keys, function(err, res) {
var e;
if (err) {
return callback(err);
}
e = 'pad group or at least one of the users are not found';
if (!res) {
return callback(new Error(e));
}
return pad.fn.set(p, callback);
});
};
pad.fn.indexGroups = function(del, pad, callback) {
var _set;
_set = function(g) {
return storage.db.set(GPREFIX + g._id, g, function(err) {
if (err) {
return callback(err);
}
return callback(null);
});
};
return storage.db.get(GPREFIX + pad.group, function(err, g) {
if (err) {
return callback(err);
}
if (del) {
ld.pull(g.pads, pad._id);
return _set(g);
} else {
if (!ld.includes(g.pads, pad._id)) {
g.pads.push(pad._id);
return _set(g);
} else {
return callback(null);
}
}
});
};
pad.fn.set = function(p, callback) {
return storage.db.set(PPREFIX + p._id, p, function(err) {
if (err) {
return callback(err);
}
return pad.fn.indexGroups(false, p, function(err) {
if (err) {
return callback(err);
}
return callback(null, p);
});
});
};
pad.get = ld.partial(common.getDel, false, PPREFIX);
pad.set = function(params, callback) {
var p;
common.addSetInit(params, callback, ['name', 'group']);
p = pad.fn.assignProps(params);
if (params._id) {
p._id = params._id;
return common.checkExistence(PPREFIX + p._id, function(err, res) {
if (err) {
return callback(err);
}
if (!res) {
return callback(new Error('pad does not exist'));
}
return pad.fn.checkSet(p, callback);
});
} else {
p._id = cuid();
return pad.fn.checkSet(p, callback);
}
};
pad.del = function(key, callback) {
if (!ld.isFunction(callback)) {
throw new TypeError('callback must be a function');
}
return common.getDel(true, PPREFIX, key, function(err, p) {
if (err) {
return callback(err);
}
return pad.fn.indexGroups(true, p, callback);
});
};
return pad;
})();
}).call(this);
|