From 61caf6974a4c7b7453a1b3b5fe2e4995f72d0f53 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Fri, 3 Jun 2016 15:41:14 -0400 Subject: [PATCH] cli: parse json params --- lib/cli/main.js | 4 +++- lib/utils.js | 13 +++++++++++++ test/utils.unit.js | 18 ++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/lib/cli/main.js b/lib/cli/main.js index 86ef3053..5e0e13cc 100644 --- a/lib/cli/main.js +++ b/lib/cli/main.js @@ -3,6 +3,7 @@ var program = require('commander'); var path = require('path'); var bitcorenode = require('..'); +var utils = require('../utils'); function main(servicesPath, additionalServices) { /* jshint maxstatements: 100 */ @@ -124,7 +125,8 @@ function main(servicesPath, additionalServices) { program .command('call [params...]') .description('Call an API method') - .action(function(method, params) { + .action(function(method, paramsArg) { + var params = utils.parseParamsWithJSON(paramsArg); var configInfo = findConfig(process.cwd()); if (!configInfo) { configInfo = defaultConfig(); diff --git a/lib/utils.js b/lib/utils.js index cae2a5fe..b4b3af7a 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -26,4 +26,17 @@ if (!utils.isAbsolutePath) { utils.isAbsolutePath = require('path-is-absolute'); } +utils.parseParamsWithJSON = function parseParamsWithJSON(paramsArg) { + var params = paramsArg.map(function(paramArg) { + var param; + try { + param = JSON.parse(paramArg); + } catch(err) { + param = paramArg; + } + return param; + }); + return params; +}; + module.exports = utils; diff --git a/test/utils.unit.js b/test/utils.unit.js index 96bc7b6c..ff166b83 100644 --- a/test/utils.unit.js +++ b/test/utils.unit.js @@ -130,4 +130,22 @@ describe('Utils', function() { }); + describe('#parseParamsWithJSON', function() { + it('will parse object', function() { + var paramsArg = ['3CMNFxN1oHBc4R1EpboAL5yzHGgE611Xou', '{"start": 100, "end": 1}']; + var params = utils.parseParamsWithJSON(paramsArg); + params.should.deep.equal(['3CMNFxN1oHBc4R1EpboAL5yzHGgE611Xou', {start: 100, end: 1}]); + }); + it('will parse array', function() { + var paramsArg = ['3CMNFxN1oHBc4R1EpboAL5yzHGgE611Xou', '[0, 1]']; + var params = utils.parseParamsWithJSON(paramsArg); + params.should.deep.equal(['3CMNFxN1oHBc4R1EpboAL5yzHGgE611Xou', [0, 1]]); + }); + it('will parse numbers', function() { + var paramsArg = ['3', 0, 'b', '0', 0x12, '0.0001']; + var params = utils.parseParamsWithJSON(paramsArg); + params.should.deep.equal([3, 0, 'b', 0, 0x12, 0.0001]); + }); + }); + });