Update ledgerSelect to throw if ledger arg is unrecognized

This commit is contained in:
Nicholas Dudfield
2015-08-21 14:51:37 +07:00
parent 67672bd389
commit bca7382015
2 changed files with 26 additions and 47 deletions

View File

@@ -1095,30 +1095,17 @@ Remote.prototype.requestUnsubscribe = function(streams, callback) {
/** /**
* Request transaction_entry * Request transaction_entry
* *
* @param {String} transaction hash * @param {Object} options -
* @param {String|Number} ledger hash or sequence * @param {String} [options.transaction] - hash
* @param {String|Number} [options.ledger='validated'] - hash or sequence
* @param [Function] callback * @param [Function] callback
* @return {Request} request * @return {Request} request
*/ */
Remote.prototype.requestTransactionEntry = function(options, callback) { 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'); const request = new Request(this, 'transaction_entry');
request.txHash(options.hash); request.txHash(options.hash);
request.selectLedger(options.ledger, 'validated');
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.callback(callback); request.callback(callback);
return request; return request;
}; };

View File

@@ -1,5 +1,6 @@
'use strict'; 'use strict';
const _ = require('lodash');
const EventEmitter = require('events').EventEmitter; const EventEmitter = require('events').EventEmitter;
const util = require('util'); const util = require('util');
const async = require('async'); const async = require('async');
@@ -75,7 +76,7 @@ Request.prototype.request = function(servers, callback) {
Request.prototype.filter = Request.prototype.filter =
Request.prototype.addFilter = Request.prototype.addFilter =
Request.prototype.broadcast = function(filterFn=Boolean) { Request.prototype.broadcast = function(filterFn = Boolean) {
const self = this; const self = this;
if (!this.requested) { if (!this.requested) {
@@ -88,7 +89,7 @@ Request.prototype.broadcast = function(filterFn=Boolean) {
} }
let lastResponse = new Error('No servers available'); let lastResponse = new Error('No servers available');
let connectTimeouts = { }; const connectTimeouts = { };
const emit = this.emit; const emit = this.emit;
this.emit = function(event, a, b) { this.emit = function(event, a, b) {
@@ -266,26 +267,13 @@ Request.prototype.timeout = function(duration, callback) {
Request.prototype.setServer = function(server) { Request.prototype.setServer = function(server) {
let selected = null; let selected = null;
switch (typeof server) { if (_.isString(server)) {
case 'object': selected = _.find(this.remote._servers, s => s._url === server) || null;
selected = server; } else if (_.isObject(server)) {
break; selected = server;
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;
} }
this.server = selected; this.server = selected;
return this; return this;
}; };
@@ -336,26 +324,30 @@ Request.prototype.ledgerIndex = function(ledger_index) {
/** /**
* Set either ledger_index or ledger_hash based on heuristic * 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 = switch (selected) {
Request.prototype.ledgerSelect = function(ledger) {
switch (ledger) {
case 'current': case 'current':
case 'closed': case 'closed':
case 'validated': case 'validated':
this.message.ledger_index = ledger; this.message.ledger_index = selected;
break; break;
default: default:
if (Number(ledger) && isFinite(Number(ledger))) { if (Number(selected) && isFinite(Number(selected))) {
this.message.ledger_index = Number(ledger); this.message.ledger_index = Number(selected);
} else if (/^[A-F0-9]{64}$/.test(ledger)) { } else if (/^[A-F0-9]{64}$/.test(selected)) {
this.message.ledger_hash = ledger; this.message.ledger_hash = selected;
} else if (selected !== undefined) {
throw new Error('unknown ledger format: ' + selected);
} }
break; break;
} }
return this; return this;
}; };
@@ -535,7 +527,7 @@ Request.prototype.addStream = function(stream, values) {
break; break;
} }
} else if (arguments.length > 1) { } else if (arguments.length > 1) {
for (let arg in arguments) { for (const arg in arguments) {
this.addStream(arguments[arg]); this.addStream(arguments[arg]);
} }
return this; return this;