Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
npm module: asynchronous boolean logic and If-Then-Else branching
JavaScript
tag: 0.4.0

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
test
.gitignore
README.md
package.json
predicament.js

README.md

predicament

asynchronous boolean logic and If-Then-Else branching

** note - this documentation may be out of date. I will be updating it shortly. In the mean time, please run the (comprehensive) tests with npm test **

a predicate is a function that returns a boolean value describing some criteria. Consider:

  if (isRegistered(user)) {
    // do stuff
  }

Here, isRegistered is a predicate which takes a user and returns true or false. They're super useful for abstracting and isolating business logic

Predicament helps you normalize these in ways node can use, converting between flags, synchronous predicates, and node-style async predicates.

Installation

    $ npm install predicament

Usage example

    var predicament = require('predicament');
    var asyncify = require('node-asyncify');

    var debugMode = false;
    var checkUserIsAuthorized = function () {
            // seems legit
            return Math.random() > .5;
        }
    }

    var server = require('http').createServer(function (req, res) {
            predicament.If(
                predicament.or(debugMode, asyncify(checkUserIsAuthorized))
            ).Else(function () {
                res.statusCode = 403;
                res.end('unauthorized');
            }
    }).listen(2323);

If Else

or - series, operand B is only evaluated if operand A is false and - series, operand B is only evaluated if operand A is true any - parallel, all operands are evaluated in parallel, and the operation is true whenever the first operand returns true, or false when all operands return false all - parallel, all operands are evaluated in parallel, and the operation is false whenever the first operand returns false, or true when all operands return true


combinator | associativity | flow | boolean operator

or | left-associative | serial | or any | non-associative | parallel | or and | left-associative | parallel | and all | non-associative | parallel | and

    predicament.If(userLoggedIn('capn_blorg'),
        function () {
        console.log('hello his blorgness!')
    }).Else(function (err) {
        if (err) console.err('something borkt');
        console.log('wait a minute - you're not blog! guards! guards!)
    })

License

MIT. (c) 2012 jden - Jason Denizac jason@denizac.org. http://jden.mit-license.org/2012

Something went wrong with that request. Please try again.