refactor: Move scan and scanMerge to stream module (#1718)

This commit is contained in:
spacejack 2017-03-15 20:22:06 -04:00 committed by Pat Cavit
parent c08b3f3c20
commit 683d85a952
5 changed files with 40 additions and 45 deletions

View file

@ -1,13 +0,0 @@
"use strict"
var combine = require("./stream").combine
module.exports = function (reducer, seed, stream) {
var newStream = combine(function (s) {
return seed = reducer(seed, s._state.value)
}, [stream])
if (newStream._state.state === 0) newStream(seed)
return newStream
}

View file

@ -1,25 +0,0 @@
"use strict"
var combine = require("./stream").combine
module.exports = function(tuples, seed) {
var streams = tuples.map(function(tuple) {
var stream = tuple[0]
if (stream._state.state === 0) stream(undefined)
return stream
})
var newStream = combine(function() {
var changed = arguments[arguments.length - 1]
streams.forEach(function(stream, idx) {
if (changed.indexOf(stream) > -1) {
seed = tuples[idx][1](seed, stream._state.value)
}
})
return seed
}, streams)
return newStream
}

View file

@ -109,13 +109,48 @@ function merge(streams) {
return streams.map(function(s) {return s()})
}, streams)
}
function scan(reducer, seed, stream) {
var newStream = combine(function (s) {
return seed = reducer(seed, s._state.value)
}, [stream])
if (newStream._state.state === 0) newStream(seed)
return newStream
}
function scanMerge(tuples, seed) {
var streams = tuples.map(function(tuple) {
var stream = tuple[0]
if (stream._state.state === 0) stream(undefined)
return stream
})
var newStream = combine(function() {
var changed = arguments[arguments.length - 1]
streams.forEach(function(stream, idx) {
if (changed.indexOf(stream) > -1) {
seed = tuples[idx][1](seed, stream._state.value)
}
})
return seed
}, streams)
return newStream
}
createStream["fantasy-land/of"] = createStream
createStream.merge = merge
createStream.combine = combine
createStream.scan = scan
createStream.scanMerge = scanMerge
createStream.HALT = HALT
if (typeof module !== "undefined") module["exports"] = createStream
else if (typeof window.m === "function" && !("stream" in window.m)) window.m.stream = createStream
else window.m = {stream : createStream}
}());
}());

View file

@ -2,12 +2,11 @@
var o = require("../../ospec/ospec")
var stream = require("../stream")
var scan = require("../scan")
o.spec("scan", function() {
o("defaults to seed", function() {
var parent = stream()
var child = scan(function(out, p) {
var child = stream.scan(function(out, p) {
return out - p
}, 123, parent)
o(child()).equals(123)
@ -15,7 +14,7 @@ o.spec("scan", function() {
o("accumulates values as expected", function() {
var parent = stream()
var child = scan(function(arr, p) {
var child = stream.scan(function(arr, p) {
return arr.concat(p)
}, [], parent)

View file

@ -2,14 +2,13 @@
var o = require("../../ospec/ospec")
var stream = require("../stream")
var scanMerge = require("../scanMerge")
o.spec("scanMerge", function() {
o("defaults to seed", function() {
var parent1 = stream()
var parent2 = stream()
var child = scanMerge([
var child = stream.scanMerge([
[parent1, function(out, p1) {
return out + p1
}],
@ -25,7 +24,7 @@ o.spec("scanMerge", function() {
var parent1 = stream()
var parent2 = stream()
var child = scanMerge([
var child = stream.scanMerge([
[parent1, function(out, p1) {
return out + p1
}],