Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Library of functional helper functions
JavaScript
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
test
.gitignore
.travis.yml
LICENSE
README.md
index.js
monotonic.js
objectify.js
package.json
selector.js
transform.js

README.md

defunct

Library of functional helper functions

build status

Installation

This module is installed via npm:

$ npm install defunct

Example Usage

var d = require('defunct');
it('should be able to multiply', function(t) {
  var mul = d.mul(10);
  t.equal(mul(5), 50, 'multiply')
  t.end();
});

it('should be able to divide', function(t) {
  var div = d.div(10);
  t.equal(div(50), 5, 'divide')
  t.end();
});

it('should be able to add', function(t) {
  var add = d.add(10);
  t.equal(add(50), 60, 'add')
  t.end();
});

it('should be able to subtract', function(t) {
  var sub = d.sub(10);
  t.equal(sub(50), 40, 'subtract')
  t.end();
});

it('should be able to return a constant function', 2, function(t) {
  var c = d.constant('my constant');
  t.equal(c('hello'), 'my constant', 'constant 1');
  t.equal(c('world'), 'my constant', 'constant 2');
  t.end();
});

it('should be able to select (string path)', function(t) {
  var locator = d.selector('my.property');
  var data = {
    my: {
      property: 42
    }
  };
  t.equal(locator(data), 42, 'simple selector');

  var data2 = {
    my: {
      property: {
        a: 'nested',
        o: 'object'
      }
    }
  };
  t.deepEqual(locator(data2), { a: 'nested', o: 'object' }, 'nested selector');

  t.end();
});

it('should be able to select (array path)', function(t) {
  var locator = d.selector(['my', 'property']);
  var data = {
    my: {
      property: 42
    }
  };
  t.equal(locator(data), 42, 'simple selector');

  var data2 = {
    my: {
      property: {
        a: 'nested',
        o: 'object'
      }
    }
  };
  t.deepEqual(locator(data2), { a: 'nested', o: 'object' }, 'nested selector');

  t.end();
});

it('should be able to ensure monotonic sequences', function(t) {
  var monotonic = d.monotonic();
  var last = -Infinity;
  t.equal(monotonic(1000), 1000, 'simple case');
  t.equal(monotonic(1001), 1001, 'no conflicts');

  var last = 1001, x;
  for (var i = 0; i < 5; i++) {
    x = monotonic(1001);
    t.ok(x > last, 'multiple conflicts');
    last = x;
  }

  for (var i = 0; i < 5; i++) {
    x = monotonic(1001 + i + 1);
    t.ok(x > last, 'no more conflicts');
    last = x;
  }

  t.end();
});

it('should fallback to normal monotonic timestamp with no args', function(t) {
  var monotonic = d.monotonic();
  var last = -Infinity, x;
  for (var i = 0; i < 10; i++) {
    var now = Date.now();
    x = monotonic();
    t.ok(x >= now, 'gte current time');
    t.ok(x > last, 'should have no conflicts');
    last = x;
  }
  t.end();
});
Something went wrong with that request. Please try again.