Skip to content

Neamar/rarity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rarity

Sometime, you need to control the arity of your callbacks.

1 - Slice arguments

Did you ever find yourself writing shitty code such as this one:

someShittyFunction(function(err, uselessArgument, anotherUselessArgument) {
    cb(err);
});

To minimize the quantity of arguments sent over to your next function (async.waterfall anyone?)

rarity allow you to easily control this behavior:

// Generate a wrapper function around cb, only forwarding the first parameter.
someShittyFunction(rarity(1, cb));

Documentation

rarity(maxNumberOfArgumentsToForward, cb)

Without rarity

var async = require('async');

async.waterfall([
    function callShittyLib(cb) {
        someShittyFunction(cb);
    },
    function handleResults(result, uselessArgument, anotherUselessArgument, cb) {
        // When writing your function, you need to check the documentation regarding the number of arguments you'll receive.
        // Boring.
        stuff();
        cb();
    }
], process.exit);

With rarity

var async = require('async');
var rarity = require('rarity');

async.waterfall([
    function callShittyLib(cb) {
        // Slice after the two first arguments
        someShittyFunction(rarity(2, cb));
    },
    function handleResults(result, cb) {
        stuff();
        cb();
    }
], process.exit);

2 - Pad arguments

When using some shitty-backported lib, for instance factory-lady, you'll need to pad your queries with a first additional argument representing a fake error, making it compatible with all the node ecosystem.

The following code:

someShittyFunction(function(result) {
    cb(null, result);
});

Now becomes:

// Wraps cb with a new function, sending null as the first argument.
someShittyFunction(rarity.pad([null], cb));

Documentation

rarity.pad(arrayOfArgumentsToPad, cb)

3 - Carry arguments

Here is some cumbersome code:

function(cb) {
    var aVar = 1;
    someFunction(function(err, result) {
        cb(err, aVar, result);
    })
}

This is shitty to write. Here is some improved version:

function(cb) {
    var aVar = 1;
    someFunction(rarity.carry([aVar], cb));
}

Arguments passed in the array will be carried between the first argument of the original callback (the error) and all the others.

Documentation

rarity.carry(arrayOfArgumentsToAddBetweenErrorAndOriginal, cb)

Installation

npm install rarity

You're done. Now go write some shitty code.

Why the shitty name?

rarity is short for reduce arity. Also, arity was already created on npm.