Skip to content

Commit

Permalink
Jsonrpc - fix singleton pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
kumavis committed Aug 26, 2016
1 parent 35bcace commit 74995bb
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 54 deletions.
2 changes: 1 addition & 1 deletion lib/web3/batch.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ Batch.prototype.execute = function () {
}).forEach(function (result, index) {
if (requests[index].callback) {

if (!Jsonrpc.getInstance().isValidResponse(result)) {
if (!Jsonrpc.isValidResponse(result)) {
return requests[index].callback(errors.InvalidResponse(result));
}

Expand Down
36 changes: 13 additions & 23 deletions lib/web3/jsonrpc.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,13 @@
/** @file jsonrpc.js
* @authors:
* Marek Kotewicz <marek@ethdev.com>
* Aaron Kumavis <aaron@kumavis.me>
* @date 2015
*/

var Jsonrpc = function () {
// singleton pattern
if (arguments.callee._singletonInstance) {
return arguments.callee._singletonInstance;
}
arguments.callee._singletonInstance = this;

this.messageId = 1;
};

/**
* @return {Jsonrpc} singleton
*/
Jsonrpc.getInstance = function () {
var instance = new Jsonrpc();
return instance;
// Initialize Jsonrpc as a simple object with utility functions.
var Jsonrpc = {
messageId: 0
};

/**
Expand All @@ -46,15 +34,18 @@ Jsonrpc.getInstance = function () {
* @param {Array} params, an array of method params, optional
* @returns {Object} valid jsonrpc payload object
*/
Jsonrpc.prototype.toPayload = function (method, params) {
Jsonrpc.toPayload = function (method, params) {
if (!method)
console.error('jsonrpc method should be specified!');

// advance message ID
Jsonrpc.messageId++

return {
jsonrpc: '2.0',
id: Jsonrpc.messageId,
method: method,
params: params || [],
id: this.messageId++
params: params || []
};
};

Expand All @@ -65,7 +56,7 @@ Jsonrpc.prototype.toPayload = function (method, params) {
* @param {Object}
* @returns {Boolean} true if response is valid, otherwise false
*/
Jsonrpc.prototype.isValidResponse = function (response) {
Jsonrpc.isValidResponse = function (response) {
return !!response &&
!response.error &&
response.jsonrpc === '2.0' &&
Expand All @@ -80,10 +71,9 @@ Jsonrpc.prototype.isValidResponse = function (response) {
* @param {Array} messages, an array of objects with method (required) and params (optional) fields
* @returns {Array} batch payload
*/
Jsonrpc.prototype.toBatchPayload = function (messages) {
var self = this;
Jsonrpc.toBatchPayload = function (messages) {
return messages.map(function (message) {
return self.toPayload(message.method, message.params);
return Jsonrpc.toPayload(message.method, message.params);
});
};

Expand Down
14 changes: 7 additions & 7 deletions lib/web3/requestmanager.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,10 @@ RequestManager.prototype.send = function (data) {
return null;
}

var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
var payload = Jsonrpc.toPayload(data.method, data.params);
var result = this.provider.send(payload);

if (!Jsonrpc.getInstance().isValidResponse(result)) {
if (!Jsonrpc.isValidResponse(result)) {
throw errors.InvalidResponse(result);
}

Expand All @@ -76,13 +76,13 @@ RequestManager.prototype.sendAsync = function (data, callback) {
return callback(errors.InvalidProvider());
}

var payload = Jsonrpc.getInstance().toPayload(data.method, data.params);
var payload = Jsonrpc.toPayload(data.method, data.params);
this.provider.sendAsync(payload, function (err, result) {
if (err) {
return callback(err);
}

if (!Jsonrpc.getInstance().isValidResponse(result)) {
if (!Jsonrpc.isValidResponse(result)) {
return callback(errors.InvalidResponse(result));
}

Expand All @@ -102,7 +102,7 @@ RequestManager.prototype.sendBatch = function (data, callback) {
return callback(errors.InvalidProvider());
}

var payload = Jsonrpc.getInstance().toBatchPayload(data);
var payload = Jsonrpc.toBatchPayload(data);

this.provider.sendAsync(payload, function (err, results) {
if (err) {
Expand Down Expand Up @@ -217,7 +217,7 @@ RequestManager.prototype.poll = function () {
return;
}

var payload = Jsonrpc.getInstance().toBatchPayload(pollsData);
var payload = Jsonrpc.toBatchPayload(pollsData);

// map the request id to they poll id
var pollsIdMap = {};
Expand Down Expand Up @@ -250,7 +250,7 @@ RequestManager.prototype.poll = function () {
}).filter(function (result) {
return !!result;
}).filter(function (result) {
var valid = Jsonrpc.getInstance().isValidResponse(result);
var valid = Jsonrpc.isValidResponse(result);
if (!valid) {
result.callback(errors.InvalidResponse(result));
}
Expand Down
6 changes: 2 additions & 4 deletions test/jsonrpc.id.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,11 @@ describe('lib/web3/jsonrpc', function () {
it('should increment the id', function () {

// given
var a = Jsonrpc.getInstance();
var b = Jsonrpc.getInstance();
var method = 'm';

// when
var p1 = a.toPayload(method);
var p2 = b.toPayload(method);
var p1 = Jsonrpc.toPayload(method);
var p2 = Jsonrpc.toPayload(method);

// then
assert.equal(p2.id, p1.id + 1);
Expand Down
21 changes: 10 additions & 11 deletions test/jsonrpc.isValidResponse.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
var assert = require('assert');
var jsonrpc = require('../lib/web3/jsonrpc');
jsonrpc = new jsonrpc();
var Jsonrpc = require('../lib/web3/jsonrpc');

describe('jsonrpc', function () {
describe('isValidResponse', function () {
Expand All @@ -14,7 +13,7 @@ describe('jsonrpc', function () {
};

// when
var valid = jsonrpc.isValidResponse(response);
var valid = Jsonrpc.isValidResponse(response);

// then
assert.equal(valid, true);
Expand All @@ -26,7 +25,7 @@ describe('jsonrpc', function () {
var response = undefined;

// when
var valid = jsonrpc.isValidResponse(response);
var valid = Jsonrpc.isValidResponse(response);

// then
assert.equal(valid, false);
Expand All @@ -41,7 +40,7 @@ describe('jsonrpc', function () {
};

// when
var valid = jsonrpc.isValidResponse(response);
var valid = Jsonrpc.isValidResponse(response);

// then
assert.equal(valid, false);
Expand All @@ -57,7 +56,7 @@ describe('jsonrpc', function () {
};

// when
var valid = jsonrpc.isValidResponse(response);
var valid = Jsonrpc.isValidResponse(response);

// then
assert.equal(valid, false);
Expand All @@ -72,7 +71,7 @@ describe('jsonrpc', function () {
};

// when
var valid = jsonrpc.isValidResponse(response);
var valid = Jsonrpc.isValidResponse(response);

// then
assert.equal(valid, false);
Expand All @@ -88,7 +87,7 @@ describe('jsonrpc', function () {
};

// when
var valid = jsonrpc.isValidResponse(response);
var valid = Jsonrpc.isValidResponse(response);

// then
assert.equal(valid, false);
Expand All @@ -103,7 +102,7 @@ describe('jsonrpc', function () {
};

// when
var valid = jsonrpc.isValidResponse(response);
var valid = Jsonrpc.isValidResponse(response);

// then
assert.equal(valid, false);
Expand All @@ -119,7 +118,7 @@ describe('jsonrpc', function () {
};

// when
var valid = jsonrpc.isValidResponse(response);
var valid = Jsonrpc.isValidResponse(response);

// then
assert.equal(valid, true);
Expand All @@ -135,7 +134,7 @@ describe('jsonrpc', function () {
};

// when
var valid = jsonrpc.isValidResponse(response);
var valid = Jsonrpc.isValidResponse(response);

// then
assert.equal(valid, true);
Expand Down
7 changes: 3 additions & 4 deletions test/jsonrpc.toBatchPayload.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
var assert = require('assert');
var jsonrpc = require('../lib/web3/jsonrpc');
jsonrpc = new jsonrpc();
var Jsonrpc = require('../lib/web3/jsonrpc');

describe('jsonrpc', function () {
describe('toBatchPayload', function () {
Expand All @@ -15,7 +14,7 @@ describe('jsonrpc', function () {
}];

// when
var payload = jsonrpc.toBatchPayload(messages);
var payload = Jsonrpc.toBatchPayload(messages);

// then
assert.equal(payload instanceof Array, true);
Expand All @@ -38,7 +37,7 @@ describe('jsonrpc', function () {
var messages = [];

// when
var payload = jsonrpc.toBatchPayload(messages);
var payload = Jsonrpc.toBatchPayload(messages);

// then
assert.equal(payload instanceof Array, true);
Expand Down
7 changes: 3 additions & 4 deletions test/jsonrpc.toPayload.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
var chai = require('chai');
var assert = chai.assert;
var jsonrpc = require('../lib/web3/jsonrpc');
jsonrpc = new jsonrpc();
var Jsonrpc = require('../lib/web3/jsonrpc');

describe('jsonrpc', function () {
describe('toPayload', function () {
Expand All @@ -11,7 +10,7 @@ describe('jsonrpc', function () {
var method = 'helloworld';

// when
var payload = jsonrpc.toPayload(method);
var payload = Jsonrpc.toPayload(method);

// then
assert.equal(payload.jsonrpc, '2.0');
Expand All @@ -28,7 +27,7 @@ describe('jsonrpc', function () {
var params = [123, 'test'];

// when
var payload = jsonrpc.toPayload(method, params);
var payload = Jsonrpc.toPayload(method, params);

// then
assert.equal(payload.jsonrpc, '2.0');
Expand Down

0 comments on commit 74995bb

Please sign in to comment.