Skip to content

Commit c720fbc

Browse files
committed
Baconize RequestCounter
1 parent d05e805 commit c720fbc

4 files changed

Lines changed: 18 additions & 23 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
},
3131
"dependencies": {
3232
"async": "^0.9.0",
33+
"baconjs": "^0.7.22",
3334
"body-parser": "^1.8.2",
3435
"express": "^4.9.3",
3536
"grunt-env": "^0.4.1",

src/controllers/request-counter.js

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
11
module.exports = RequestCounter;
22

3+
var Bacon = require('baconjs'),
4+
_ = require('lodash');
5+
36
var redis = require('../resources/redis'),
47
ApiResponder = require('../resources/api-responder');
58

69
var NUM_REQS_KEY = 'NUM_REQS';
710

811
RequestCounter.get = function(req, res) {
9-
redis.incr(NUM_REQS_KEY, function(err, newVal) {
10-
var apiResponder = new ApiResponder(res);
11-
if (err) {
12-
apiResponder.sendError(err);
13-
} else {
14-
var data = { num_reqs: newVal };
15-
apiResponder.sendSuccess(data);
16-
}
17-
});
12+
var newNum = Bacon.fromNodeCallback(_.bind(redis.incr, redis), NUM_REQS_KEY).toProperty(),
13+
data = Bacon.combineTemplate({ num_reqs: newNum });
14+
ApiResponder.respond(res, data);
1815
};
1916

2017
function RequestCounter() {}

src/resources/api-responder.js

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@ module.exports = ApiResponder;
22

33
var _ = require('lodash');
44

5-
function ApiResponder(res) {
6-
this.res = res;
7-
this.sendSuccess = function(data) {
8-
this.res.status(200).send(data);
9-
};
10-
11-
this.sendError = function(err) {
12-
this.res.status(500).send(err);
13-
};
14-
}
5+
function ApiResponder() {}
6+
7+
ApiResponder.respond = function(res, stream, redCode) {
8+
stream.onValue(_.bind(res.send, res.status(typeof retCode === 'number' ? retCode : 200)));
9+
stream.onError(_.bind(res.send, res.status(500)));
10+
};
1511

test/request-counter.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,16 @@ after(function(done) {
1717
it('should count the number of requests sent', function(done) {
1818
var url = 'http://' + config.ip + ':' + config.port + '/requestcounter';
1919

20-
async.times(5, function(n, next) {
20+
var numReqs = Math.ceil(Math.random() * 20),
21+
expected = 1;
22+
async.times(numReqs, function(reqIndex, next) {
2123
request(url, function(err, resp, body) {
2224
if (err) next(err);
2325

2426
try {
2527
body = JSON.parse(body);
26-
var found = parseInt(body.num_reqs),
27-
expected = n + 1;
28-
found.should.equal(expected);
28+
parseInt(body.num_reqs).should.equal(expected);
29+
expected += 1;
2930
next();
3031
} catch(e) {
3132
next(e);

0 commit comments

Comments
 (0)