Simple RxJS Data Routing and manipulation
Nohting more to say...
by Trever Shick
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/rxjs/2.3.14/rx.all.js"></script>
<div id="console-log"></div>
CSS
body {
background-color:black;
color: white;
}
.console-line
{
font-family: monospace;
margin: 2px;
white-space: nowrap;
margin:0;
padding:2px;
}
JavaScript
var consoleLine = "<p class=\"console-line\"></p>";
console = {
log: function (text, obj) {
var objText = obj ? JSON.stringify(obj) : "";
$("#console-log").append($(consoleLine).html(text + " " + objText));
},
reset: function() { $("#console-log").html(""); }
};
console.reset();
var results = new Rx.Subject();
var badges = new Rx.Subject();
badges.subscribe(
function(data) {
console.log("badges->", data);
}
);
results.subscribe(
function(data) {console.log("results->", data);}
);
var p = $.ajax({dataType: "jsonp",
url: "http://stg.api.bazaarvoice.com/data/reviews.json?apiversion=5.4&passkey=kuy3zj9pr3n7i0wxajrzj04xo"}).promise();
// subject is an observer, so take the promise and link it to the subject
var individualResultObs = Rx.Observable.fromPromise(p)
.pluck('Results')
.flatMap(Rx.helpers.identity);
individualResultObs.pluck('Badges')
.groupBy(function(x){ return x.top25Contributor.Id; })
.flatMap(function(group) { return group.count(); })
.subscribe(badges);
individualResultObs
.filter(function(r) { return r.IsRecommended; })
.subscribe(function(x) { console.log("recommended:", x); });
individualResultObs
.filter(function(r) { return ! r.IsRecommended; })
.subscribe(function(x) { console.log("not recommended:", x); });