From bca73820151b166361477fb5637d51c7075f25ff Mon Sep 17 00:00:00 2001 From: Nicholas Dudfield Date: Fri, 21 Aug 2015 14:51:37 +0700 Subject: [PATCH] Update ledgerSelect to throw if ledger arg is unrecognized --- src/core/remote.js | 21 ++++-------------- src/core/request.js | 52 +++++++++++++++++++-------------------------- 2 files changed, 26 insertions(+), 47 deletions(-) diff --git a/src/core/remote.js b/src/core/remote.js index dd99c2a9..957dd749 100644 --- a/src/core/remote.js +++ b/src/core/remote.js @@ -1095,30 +1095,17 @@ Remote.prototype.requestUnsubscribe = function(streams, callback) { /** * Request transaction_entry * - * @param {String} transaction hash - * @param {String|Number} ledger hash or sequence + * @param {Object} options - + * @param {String} [options.transaction] - hash + * @param {String|Number} [options.ledger='validated'] - hash or sequence * @param [Function] callback * @return {Request} request */ Remote.prototype.requestTransactionEntry = function(options, callback) { - // If not trusted, need to check proof, maybe talk packet protocol. - // utils.assert(this.trusted); const request = new Request(this, 'transaction_entry'); request.txHash(options.hash); - - switch (typeof options.ledger) { - case 'string': - case 'number': - request.selectLedger(options.ledger); - break; - case 'undefined': - request.ledgerIndex('validated'); - break; - default: - throw new Error('ledger must be a ledger index or hash'); - } - + request.selectLedger(options.ledger, 'validated'); request.callback(callback); return request; }; diff --git a/src/core/request.js b/src/core/request.js index c30d02f1..de6f3677 100644 --- a/src/core/request.js +++ b/src/core/request.js @@ -1,5 +1,6 @@ 'use strict'; +const _ = require('lodash'); const EventEmitter = require('events').EventEmitter; const util = require('util'); const async = require('async'); @@ -75,7 +76,7 @@ Request.prototype.request = function(servers, callback) { Request.prototype.filter = Request.prototype.addFilter = -Request.prototype.broadcast = function(filterFn=Boolean) { +Request.prototype.broadcast = function(filterFn = Boolean) { const self = this; if (!this.requested) { @@ -88,7 +89,7 @@ Request.prototype.broadcast = function(filterFn=Boolean) { } let lastResponse = new Error('No servers available'); - let connectTimeouts = { }; + const connectTimeouts = { }; const emit = this.emit; this.emit = function(event, a, b) { @@ -266,26 +267,13 @@ Request.prototype.timeout = function(duration, callback) { Request.prototype.setServer = function(server) { let selected = null; - switch (typeof server) { - case 'object': - selected = server; - break; - - case 'string': - // Find server by URL - const servers = this.remote._servers; - - for (let i = 0, s; (s = servers[i]); i++) { - if (s._url === server) { - selected = s; - break; - } - } - break; + if (_.isString(server)) { + selected = _.find(this.remote._servers, s => s._url === server) || null; + } else if (_.isObject(server)) { + selected = server; } this.server = selected; - return this; }; @@ -336,26 +324,30 @@ Request.prototype.ledgerIndex = function(ledger_index) { /** * Set either ledger_index or ledger_hash based on heuristic * - * @param {Number|String} ledger identifier + * @param {Number|String} ledger - identifier + * @param {Object} options - + * @param {Number|String} defaultValue - default if `ledger` unspecifed */ +Request.prototype.ledgerSelect = +Request.prototype.selectLedger = function(ledger, defaultValue) { + const selected = ledger || defaultValue; -Request.prototype.selectLedger = -Request.prototype.ledgerSelect = function(ledger) { - switch (ledger) { + switch (selected) { case 'current': case 'closed': case 'validated': - this.message.ledger_index = ledger; + this.message.ledger_index = selected; break; default: - if (Number(ledger) && isFinite(Number(ledger))) { - this.message.ledger_index = Number(ledger); - } else if (/^[A-F0-9]{64}$/.test(ledger)) { - this.message.ledger_hash = ledger; + if (Number(selected) && isFinite(Number(selected))) { + this.message.ledger_index = Number(selected); + } else if (/^[A-F0-9]{64}$/.test(selected)) { + this.message.ledger_hash = selected; + } else if (selected !== undefined) { + throw new Error('unknown ledger format: ' + selected); } break; } - return this; }; @@ -535,7 +527,7 @@ Request.prototype.addStream = function(stream, values) { break; } } else if (arguments.length > 1) { - for (let arg in arguments) { + for (const arg in arguments) { this.addStream(arguments[arg]); } return this;