built.io-browserify
Version:
SDK for Built.io Backend which is compatible with Browserify
54 lines (53 loc) • 1.93 kB
JavaScript
var R = require('ramda');
/*
This functions are used to create a instance method out of static methods
accepting last argument as object
*/
module.exports = function() {
var metaData = [];
return {
/*
This method is used to collect metaData
param |name| name of the static method to be called when instance method is invoked
param |argsLength| number of arguments the static method takes
*/
define: function(name,argsLength,defaultValues) {
metaData.push({
name : name,
argsLength : argsLength,
defaultValues:defaultValues
})
},
/*
This method iterates over the meta data and creates instance methods
param |moduleExports| Class on which static methods exist
param |returnObj| Object on which instance method would be attached
*/
build: function(moduleExports,returnObj) {
metaData.forEach(function(data) {
if(data.argsLength === 1){
returnObj[data.name] = function(){
return moduleExports[data.name].apply(null,[returnObj]);
}
}else{
var curriedMtd = R.curry(R.nAry(data.argsLength, function() {
var args = Array.prototype.slice.call(arguments, 1, arguments.length);
args.push(arguments[0]);
return moduleExports[data.name].apply(null, args);
}));
curriedMtd = curriedMtd(returnObj); // We fill the instance argument
if(data.defaultValues){
returnObj[data.name] = function(){
var args = Array.prototype.slice.call(arguments, 0);
args = args.concat(data.defaultValues.slice(-(data.argsLength-arguments.length)));
return curriedMtd.apply(null,args);
}
}else{
returnObj[data.name] = curriedMtd;
}
}
})
return returnObj;
}
}
}