UNPKG

built.io-browserify

Version:

SDK for Built.io Backend which is compatible with Browserify

54 lines (53 loc) 1.93 kB
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; } } }