Skip to content

Commit

Permalink
Merge pull request #67 from jwoudenberg/master
Browse files Browse the repository at this point in the history
Added 'previous' and 'diff' modules
  • Loading branch information
paldepind committed Oct 25, 2015
2 parents 2c3b944 + d83db7a commit e1eb313
Show file tree
Hide file tree
Showing 7 changed files with 106 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[*]
indent_style = space
indent_size = 2
13 changes: 13 additions & 0 deletions module/diff/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# flyd-diff
diff function for Flyd.

Like map, but the mapping function gets the previous and the current value of the stream.

# Usage
```
var velocity = flyd.stream(0);
var acceleration = diff(function (previous, current) {
return current - previous;
}, velocity);
velocity(2)(5)(1);
```
10 changes: 10 additions & 0 deletions module/diff/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
var flyd = require('flyd');

var previous = require('flyd/module/previous');

module.exports = function (diffFunc, s) {
var prevS = previous(s);
return flyd.stream([s, prevS], function (self) {
return diffFunc(prevS(), s());
});
};
28 changes: 28 additions & 0 deletions module/diff/test/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
var assert = require('assert');
var flyd = require('flyd');
var stream = flyd.stream;

var diff = require('../diff.js');

describe('diff', function() {
it('calls the diff function with the previous and new value', function() {
var s = stream(1);
var returnArguments = function () {
return Array.prototype.slice.call(arguments);
}
var d = diff(returnArguments, s);
s(1)(2)(3);
assert.deepEqual(d(), [2, 3]);
});

it('starts streaming after the second value is pushed into the source stream', function() {
var s = stream();
var calls = 0;
flyd.on();
var d = diff(function () { calls += 1; }, s)
s(1);
assert.equal(calls, 0);
s(2);
assert.equal(calls, 1);
});
});
9 changes: 9 additions & 0 deletions module/previous/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# flyd-previous
previous function for Flyd.

Returns a stream that is always one value behind the original stream.

# Usage
```
var previousState = previous(state);
```
18 changes: 18 additions & 0 deletions module/previous/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
var flyd = require('flyd');

module.exports = function (s) {
var previousValue;
return flyd.stream([s], skipFirstCall(function (self) {
self(previousValue);
previousValue = s();
}));
};

function skipFirstCall (func) {
var functionToCall = function () {
functionToCall = func;
}
return function () {
return functionToCall.apply(this, arguments);
}
}
25 changes: 25 additions & 0 deletions module/previous/test/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
var assert = require('assert');
var flyd = require('flyd');
var stream = flyd.stream;

var previous = require('../previous.js');

describe('previous', function() {
it('is always one value behind the source stream', function() {
var s = stream(1);
var p = previous(s);
s(2)(3)(4);
assert.equal(p(), 3);
});

it('starts streaming after the second value is pushed into the source stream', function() {
var s = stream();
var p = previous(s);
var calls = 0;
flyd.on(function () { calls += 1; }, p);
s(1);
assert.equal(calls, 0);
s(2);
assert.equal(calls, 1);
});
});

0 comments on commit e1eb313

Please sign in to comment.