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); });