Skip to content

Commit b2e97d9

Browse files
author
Jordalgo
committed
Add module for merging multiple streams.
1 parent 6b55ad8 commit b2e97d9

File tree

3 files changed

+88
-0
lines changed

3 files changed

+88
-0
lines changed

module/mergeall/README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# flyd-mergeall
2+
Flyd module for merging several streams into one.
3+
4+
__Signature__
5+
6+
`[Stream a] -> Stream a`
7+
8+
__Example__
9+
10+
```javascript
11+
var s1 = flyd.stream();
12+
var s2 = flyd.stream();
13+
var s3 = flyd.stream();
14+
var merged = mergeAll([s1, s2, s3]);
15+
s1(1);
16+
s2(2);
17+
console.log(merged()); // logs 2
18+
```
19+

module/mergeall/index.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var flyd = require('../../lib');
2+
3+
module.exports = function mergeAll(streams) {
4+
var s = flyd.immediate(flyd.combine(function() {
5+
var self = arguments[arguments.length - 2];
6+
if (arguments[arguments.length - 1][0]) {
7+
self(arguments[arguments.length - 1][0]());
8+
return;
9+
}
10+
[].slice.call(arguments, 0, arguments.length - 2)
11+
.some(function(s1) {
12+
if (s1.hasVal) {
13+
self(s1.val);
14+
return true;
15+
}
16+
});
17+
}, streams));
18+
flyd.endsOn(flyd.combine(function() {
19+
return true;
20+
}, streams.map(function(sm) { return sm.end; })), s);
21+
return s;
22+
};
23+

module/mergeall/test/index.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
var assert = require('assert');
2+
var flyd = require('../../../lib');
3+
var stream = flyd.stream;
4+
5+
var mergeAll = require('../index.js');
6+
7+
describe('mergeAll', function() {
8+
it('merges multiple streams', function() {
9+
var s1 = stream();
10+
var s2 = stream();
11+
var s3 = stream();
12+
var merged = mergeAll([s1, s2, s3]);
13+
s1(1);
14+
assert.equal(merged(), 1);
15+
s2(2);
16+
assert.equal(merged(), 2);
17+
s3(3);
18+
assert.equal(merged(), 3);
19+
s2('hello');
20+
assert.equal(merged(), 'hello');
21+
});
22+
it('has initial value', function() {
23+
var s1 = stream(1);
24+
var s2 = stream(2);
25+
var s3 = stream();
26+
var merged = mergeAll([s1, s2, s3]);
27+
assert.equal(merged(), 1);
28+
s3(3);
29+
assert.equal(merged(), 3);
30+
});
31+
it('ends when all the merged streams end', function() {
32+
var s1 = stream();
33+
var s2 = stream();
34+
var s3 = stream();
35+
var merged = mergeAll([s1, s2, s3]);
36+
s1.end(true);
37+
assert.equal(s1.end(), true);
38+
assert.equal(merged.end(), undefined);
39+
s2.end(true);
40+
assert.equal(s2.end(), true);
41+
assert.equal(merged.end(), undefined);
42+
s3.end(true);
43+
assert.equal(s3.end(), true);
44+
assert.equal(merged.end(), true);
45+
});
46+
});

0 commit comments

Comments
 (0)