starmapjs
Version:
Starmap makes client-side Waterline/Sails easy!
55 lines (47 loc) • 1.51 kB
JavaScript
var _ = require('lodash');
/**
* Converts the model name to a path
*
* TODO: this might not be neccessary
*
* @param {string} name
* @returns {string}
*/
exports.resolveName = function(name) {
var prefixIndex = name.indexOf('/'), prefix = '';
if (prefixIndex !== -1) {
prefix = name.substring(0, prefixIndex) + '/';
name = name.substring(prefixIndex + 1);
}
return '/' + prefix + name;
};
var requestId = 0;
function promisifySocket(fName) {
return function(io, url, additional) {
var rid = requestId++;
return (new Promise(function(resolve, reject) {
io.socket[fName](url, additional, function (response) {
if (response.error) reject(response.error);
else if (_.isString(response)) reject(new Error(response));
else resolve(response);
});
}));
}
}
exports.socketGet = promisifySocket("get");
exports.socketPost = promisifySocket("post");
exports.socketPut = promisifySocket("put");
exports.socketDelete = promisifySocket("delete");
exports.defineProperties = (function() {
if (Object.defineProperties) return Object.defineProperties;
return function(base, obj) {
_.extend(base, _.mapValues(obj, function(val) {
return val.value;
}));
}
}());
exports.createCalculateProperty = function(func, subProps) {
return _.merge({
__precalc: func
}, subProps);
};