Sha256: 38adc958b4f9fa8d5e8fef582fd3afd636d2a3117b3766a8855cfd23947e6596

Contents?: true

Size: 1.99 KB

Versions: 26

Compression:

Stored size: 1.99 KB

Contents

//
// vargs.js
//
//   variable argument handling for functions taking a callback
//
// usage:
//   
//   var Args = new("vargs").Constructor;
//
//   function (/* [arg1, arg2, ...][,callback] */) {
//       var args = new(Args)(arguments);
//       
//       args.first;    // first argument
//       args.last;     // last argument before callback
//       args.callback; // callback argument, or an empty function
//       args.all;      // all arguments except callback
//       args.length;   // number of arguments, not including callback
//       
//       args.callbackGiven() // returns true or false
//       args.at(-1)          // last argument, including callback
//       args.array           // all arguments, including callback
//   }
//
exports.Constructor = function Vargs(arguments) {
    this.array = Array.prototype.slice.call(arguments);
    this.__defineGetter__('length', function () {
        if (this.callbackGiven()) {
            return this.array.length - 1;
        } else {
            return this.array.length;
        }
    });
    this.__defineGetter__('all', function () {
        if (this.callbackGiven()) {
            return this.array.slice(0, -1);
        } else {
            return this.array;
        }
    });
    this.__defineGetter__('last', function () {
        if (typeof(this.at(-1)) === 'function') {
            return this.at(-2);
        } else {
            return this.at(-1);
        }
    });
    this.__defineGetter__('first', function () {
        return this.array[0];
    });
    this.callback = this.callbackGiven() ? this.at(-1)
                                         : function () {};
};

exports.Constructor.prototype = {
    callbackGiven: function () {
        return typeof(this.at(-1)) === 'function';
    },
    at: function (n) {
        if (n < 0) {
            return this.array[this.array.length + n];
        } else {
            return this.array[n];
        }
    }
};

exports.Constructor.last = function (args) {
    return args[args.length - 1];
};

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
vulcan-0.8.2 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.8.1 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.8.0 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.7.2 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.7.1 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.7.0 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.6.1 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.6.0 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.5.0 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.4.0 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.3.0 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.2.5 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.2.4 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.2.3 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.2.2 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.2.1 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.2.0 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.1.6 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.1.5 server/node_modules/cradle/node_modules/vargs/lib/vargs.js
vulcan-0.1.4 server/node_modules/cradle/node_modules/vargs/lib/vargs.js