Sha256: a1900acff34ad1e889c8f9c548a5ad053438d143bfbca8396baecc1d3292b12a
Contents?: true
Size: 1.86 KB
Versions: 7
Compression:
Stored size: 1.86 KB
Contents
/* --- script: Class.Macros.js description: A few functions that simplify definition of everyday methods with common logic license: MIT-style license. requires: - Core/Options - Core/Events - Core/Class.Extras provides: [Macro, Class.hasParent] ... */ Class.hasParent = function(klass) { var caller = klass.$caller; return !!(caller && caller.$owner.parent && caller.$owner.parent.prototype[caller.$name]); }; Macro = {}; /* Make stackable function what executes it's parent before itself */ Macro.onion = function(callback) { return function() { if (!this.parent.apply(this, arguments)) return; return callback.apply(this, arguments) !== false; }; }; /* Make getter-function with cache. Returned function alculates values on first call, after return this[name]. To reset cache use: delete this[name]; */ Macro.getter = function(name, callback) { return function() { if (!this[name]) this[name] = callback.apply(this, arguments); return this[name]; }; }; /* Make function that runs it's parent if it exists, and runs itself if does not */ Macro.defaults = function(callback) { return function() { if (Class.hasParent(this)) { return this.parent.apply(this, arguments); } else { return callback.apply(this, arguments); } }; }; /* Make function what returns property 'name' of passed argument */ Macro.map = function(name) { return function(item) { return item[name]; }; }; /* Make function Macro.map but diference that Macro.proc calls 'name' method */ Macro.proc = function(name, args) { return function(item) { return item[name].apply(item, args || arguments); }; }; /* Make function what call method 'method' of property this[name] with passed arguments */ Macro.delegate = function(name, method) { return function() { if (this[name]) return this[name][method].apply(this[name], arguments); }; };
Version data entries
7 entries across 7 versions & 1 rubygems