premise

1.0.0 • Public • Published

premise.js

IMO javascript's saving grace is its built in asynchronousity with the ability to pass around functions.

get('something', function doThisAfterGettingSomething(data) {
  // Do stuff with data
});

but this creates a stylistic problem:

get('something', function(data) {
  var values = map(data, function(item) {
    return map(item.posts, function(otherItem) {
      return // finally return the thing you wanted
    });
  });
  // do something with values
});

This is also commonly referred to as callback hell. http://callbackhell.com

What if there was a way to simplify logical predicates?

Examples

get('posts', function(posts) {
  var stickyPosts = _.select(posts, premise('sticky'));
});

But wait there's more!

You can do use any javascript operator sequence || && + - / * < > <= >= == !=

var recentPosts = _.select(posts, premise('pinned').or('timestamp').gt(new Date('2016-1-1')))

// Say you have a date range filter
var visiblePosts = _.select(posts, premise('date').gt(startDate).or('date').lt(endDate));

// Maybe you want to translate values
var percentages = _.map([ 0.3213, 0.5123, 0.7735 ], premise.mul(100));
//=> [32.13, 51.23, 77.35]

Nesting

var sortedPostsPremise = premise('selected').and(premise('pinned').or('date'));
// logically equivalent to function(obj) { return obj.selected && (obj.pinned || obj.date) }

Usage

predicate(attribute)

predicate returns a matcher object, on which you can call any of the chain functions and, or, gt, lt, gte, lte, eq, ne, add, sub, mult, div, strictEq, strictNeq

More to come. Enjoy!

Dependencies (0)

    Dev Dependencies (1)

    Package Sidebar

    Install

    npm i premise

    Weekly Downloads

    1

    Version

    1.0.0

    License

    ISC

    Last publish

    Collaborators

    • bwheeler96