Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added 'previous' and 'diff' modules #67

Merged
merged 2 commits into from
Oct 25, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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);
});
});