command-line-args
Advanced tools
Comparing version 0.1.0 to 0.2.0
@@ -1,32 +0,46 @@ | ||
var w = require("wodge"); | ||
var w = require("wodge"), | ||
util = require("util"), | ||
Design = require("nature").Design; | ||
module.exports = parse; | ||
module.exports = CliArgs; | ||
/** | ||
docs TODO | ||
*/ | ||
function parse(optionDefinitions, argv){ | ||
function CliArgs(options){ | ||
if (!(this instanceof CliArgs)) return new CliArgs(options); | ||
options.forEach(function(option){ | ||
if (option.options) option.attributes = option.options; | ||
}); | ||
Design.call(this, options); | ||
} | ||
util.inherits(CliArgs, Design); | ||
CliArgs.prototype.parse = function(argv){ | ||
var shortArg = /^-(\w)/, | ||
longArg = /^--(\w+)/, | ||
output = {}, | ||
longArg = /^--([\w-]+)/, | ||
model = this.create(), | ||
defaultValues = [], | ||
self = this, | ||
arg; | ||
argv = argv ? argv.slice(0) : process.argv.slice(2); | ||
function setOutputValue(option, value){ | ||
model[option.name] = value; | ||
} | ||
function setOutput(optionName){ | ||
var option = w.findWhere(optionDefinitions, { name: optionName }) | ||
|| w.findWhere(optionDefinitions, { alias: optionName }); | ||
var option = w.findWhere(self._attributes, { name: optionName }) | ||
|| w.findWhere(self._attributes, { alias: optionName }); | ||
if (option){ | ||
if(option.type === Boolean){ | ||
output[option.name] = true; | ||
setOutputValue(option, true); | ||
} else if (argv.length) { | ||
if (typeof option.type === "function"){ | ||
if (option.type === Array){ | ||
output[option.name] = spliceWhile(argv, /^\w+/); | ||
setOutputValue(option, spliceWhile(argv, /^\w+/)); | ||
} else { | ||
output[option.name] = option.type(argv.shift()); | ||
setOutputValue(option, option.type(argv.shift())); | ||
} | ||
} else { | ||
output[option.name] = argv.shift(); | ||
setOutputValue(option, argv.shift()); | ||
} | ||
@@ -41,11 +55,3 @@ } else { | ||
}; | ||
/* set defaults */ | ||
var optionsWithDefault = optionDefinitions.filter(function(option){ | ||
return option.value; | ||
}); | ||
optionsWithDefault.forEach(function(option){ | ||
output[option.name] = option.value; | ||
}); | ||
while (typeof(arg = argv.shift()) !== "undefined"){ | ||
@@ -60,21 +66,35 @@ if (longArg.test(arg)){ | ||
} | ||
if (defaultValues.length > 0){ | ||
var defaultOption = w.findWhere(optionDefinitions, { defaultOption: true }); | ||
var defaultOption = w.findWhere(this._attributes, { defaultOption: true }); | ||
if (defaultOption){ | ||
if (defaultOption.type === Array){ | ||
if (Array.isArray(output[defaultOption.name])){ | ||
output[defaultOption.name] = output[defaultOption.name].concat(defaultValues); | ||
if (Array.isArray(model[defaultOption.name])){ | ||
model[defaultOption.name] = model[defaultOption.name].concat(defaultValues); | ||
} else { | ||
output[defaultOption.name] = defaultValues; | ||
model[defaultOption.name] = defaultValues; | ||
} | ||
} else { | ||
output[defaultOption.name] = defaultValues[0]; | ||
model[defaultOption.name] = defaultValues[0]; | ||
} | ||
} | ||
} | ||
return output; | ||
} | ||
if (this.groups().length){ | ||
var output = {}; | ||
this.groups().forEach(function(groupName){ | ||
var filter = "return attribute.groups && attribute.groups.indexOf('" + groupName + "') > -1;"; | ||
var optionGroup = w.defined(self.where(filter, model)); | ||
output[groupName] = optionGroup; | ||
}); | ||
return output; | ||
} else { | ||
return w.defined(model); | ||
} | ||
}; | ||
CliArgs.prototype.usage = function(options){ | ||
return ""; | ||
}; | ||
function spliceWhile(array, test){ | ||
@@ -81,0 +101,0 @@ for (var i = 0; i < array.length; i++){ |
{ | ||
"name": "command-line-args", | ||
"version": "0.1.0", | ||
"version": "0.2.0", | ||
"description": "Parse command line options", | ||
@@ -15,4 +15,5 @@ "repository": "https://github.com/75lb/command-line-args.git", | ||
"dependencies": { | ||
"wodge": "~0.6.8" | ||
"nature": "~0.5", | ||
"wodge": "~0.7" | ||
} | ||
} |
var test = require("tap").test; | ||
var parse = require("../lib/command-line-args"); | ||
var cliArgs = require("../lib/command-line-args"); | ||
@@ -18,8 +18,7 @@ var optionDefinitions = [ | ||
function(){ | ||
parse(optionDefinitions, argv) | ||
cliArgs(optionDefinitions).parse(argv); | ||
}, | ||
new Error("Unexpected option: f"), | ||
"throw test" | ||
new Error("Unexpected option: f") | ||
); | ||
t.end(); | ||
}); |
var test = require("tap").test; | ||
var parse = require("../lib/command-line-args"); | ||
var cliArgs = require("../lib/command-line-args"); | ||
@@ -16,3 +16,3 @@ var optionDefinitions = [ | ||
var argv = [ "--verbose" ]; | ||
t.deepEqual(parse(optionDefinitions, argv), { | ||
t.deepEqual(cliArgs(optionDefinitions).parse(argv), { | ||
verbose: true, | ||
@@ -19,0 +19,0 @@ colour: "orange" |
var test = require("tap").test; | ||
var parse = require("../lib/command-line-args"); | ||
var cliArgs = require("../lib/command-line-args"); | ||
@@ -10,3 +10,3 @@ | ||
var argv = [ "file1", "file2" ]; | ||
t.deepEqual(parse(optionDefinitions, argv), { | ||
t.deepEqual(cliArgs(optionDefinitions).parse(argv), { | ||
files: "file1" | ||
@@ -22,3 +22,3 @@ }); | ||
var argv = [ "file1", "file2" ]; | ||
t.deepEqual(parse(optionDefinitions, argv), { | ||
t.deepEqual(cliArgs(optionDefinitions).parse(argv), { | ||
files: [ "file1", "file2" ] | ||
@@ -25,0 +25,0 @@ }); |
var test = require("tap").test; | ||
var parse = require("../lib/command-line-args"); | ||
var cliArgs = require("../lib/command-line-args"); | ||
var optionDefinitions = [ | ||
{ name: "verbose", alias: "v", type: Boolean }, | ||
{ name: "dry", alias: "d", type: Boolean }, | ||
{ name: "colour", alias: "c" }, | ||
{ name: "number", alias: "n", type: Number }, | ||
{ name: "files", defaultOption: true }, | ||
{ name: "colours", type: Array }, | ||
{ name: "tramps", type: Array } | ||
{ name: "tramps", type: Array }, | ||
{ name: "dry-run", type: Boolean } | ||
]; | ||
@@ -16,5 +15,6 @@ | ||
var argv = [ "--verbose" ]; | ||
t.deepEqual(parse(optionDefinitions, argv), { | ||
t.deepEqual(cliArgs(optionDefinitions).parse(argv), { | ||
verbose: true | ||
}); | ||
t.end(); | ||
@@ -25,3 +25,4 @@ }); | ||
var argv = [ "--verbose", "--colour", "red" ]; | ||
t.deepEqual(parse(optionDefinitions, argv), { | ||
cliArgs(optionDefinitions).parse(argv) | ||
t.deepEqual(cliArgs(optionDefinitions).parse(argv), { | ||
verbose: true, | ||
@@ -35,6 +36,7 @@ colour: "red" | ||
var argv = [ "--verbose", "--colour", "red", "--number", "3" ]; | ||
var result = parse(optionDefinitions, argv); | ||
var result = cliArgs(optionDefinitions).parse(argv); | ||
console.dir(result) | ||
t.equal(result.verbose, true); | ||
t.equal(result.colour, "red"); | ||
t.equal(result.number, 3); | ||
t.equal(result.number, 3) | ||
t.end(); | ||
@@ -45,3 +47,3 @@ }); | ||
var argv = [ "--colours", "green", "red", "yellow" ]; | ||
var result = parse(optionDefinitions, argv); | ||
var result = cliArgs(optionDefinitions).parse(argv); | ||
t.deepEqual(result, { | ||
@@ -55,3 +57,3 @@ colours: [ "green", "red", "yellow" ] | ||
var argv = [ "--colours", "green", "red", "yellow", "--tramps", "mike", "colin" ]; | ||
var result = parse(optionDefinitions, argv); | ||
var result = cliArgs(optionDefinitions).parse(argv); | ||
t.deepEqual(result, { | ||
@@ -63,1 +65,10 @@ colours: [ "green", "red", "yellow" ], | ||
}); | ||
test("--this-option", function(t){ | ||
var argv = [ "--dry-run" ]; | ||
var result = cliArgs(optionDefinitions).parse(argv); | ||
t.deepEqual(result, { | ||
"dry-run": true | ||
}); | ||
t.end(); | ||
}); |
var test = require("tap").test; | ||
var parse = require("../lib/command-line-args"); | ||
var cliArgs = require("../lib/command-line-args"); | ||
@@ -14,3 +14,3 @@ var optionDefinitions = [ | ||
var argv = [ "--verbose", "-d", "--colour", "red", "--number", 3 ]; | ||
var result = parse(optionDefinitions, argv); | ||
var result = cliArgs(optionDefinitions).parse(argv); | ||
t.equal(result.verbose, true); | ||
@@ -17,0 +17,0 @@ t.equal(result.dry, true); |
var test = require("tap").test; | ||
var parse = require("../lib/command-line-args"); | ||
var cliArgs = require("../lib/command-line-args"); | ||
var optionDefinitions = [ | ||
{ name: "verbose", alias: "v", type: Boolean }, | ||
{ name: "dry", alias: "d", type: Boolean }, | ||
{ name: "colour", alias: "c" }, | ||
{ name: "number", alias: "n", type: Number }, | ||
{ name: "files", defaultOption: true } | ||
{ name: "files", defaultOption: true }, | ||
{ name: "dry-run", alias: "d", type: Boolean } | ||
]; | ||
@@ -14,3 +14,3 @@ | ||
var argv = [ "-v" ]; | ||
t.deepEqual(parse(optionDefinitions, argv), { | ||
t.deepEqual(cliArgs(optionDefinitions).parse(argv), { | ||
verbose: true | ||
@@ -21,5 +21,13 @@ }); | ||
test("short: one --this-type boolean", function(t){ | ||
var argv = [ "-d" ]; | ||
t.deepEqual(cliArgs(optionDefinitions).parse(argv), { | ||
"dry-run": true | ||
}); | ||
t.end(); | ||
}); | ||
test("short: one boolean, one string", function(t){ | ||
var argv = [ "-v", "-c", "red" ]; | ||
t.deepEqual(parse(optionDefinitions, argv), { | ||
t.deepEqual(cliArgs(optionDefinitions).parse(argv), { | ||
verbose: true, | ||
@@ -26,0 +34,0 @@ colour: "red" |
13180
12
384
2
+ Addednature@~0.5
+ Addedarray-tools@1.8.6(transitive)
+ Addednature@0.5.7(transitive)
+ Addedobject-tools@1.6.7(transitive)
+ Addedtypical@1.0.02.6.1(transitive)
+ Addedwodge@0.7.0(transitive)
- Removedwodge@0.6.11(transitive)
Updatedwodge@~0.7