From decd2040fa6b6301d49157ca14750a910ae54998 Mon Sep 17 00:00:00 2001 From: mpeterv Date: Fri, 30 Oct 2015 15:18:24 +0300 Subject: [PATCH] Add actions for arguments --- spec/actions_spec.lua | 24 ++++++++++++++++++++++++ src/argparse.lua | 3 ++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/spec/actions_spec.lua b/spec/actions_spec.lua index 034eee4..e48ba3e 100644 --- a/spec/actions_spec.lua +++ b/spec/actions_spec.lua @@ -2,6 +2,30 @@ local Parser = require "argparse" getmetatable(Parser()).error = function(_, msg) error(msg) end describe("actions", function() + it("for arguments are called", function() + local parser = Parser() + local foo + parser:argument("foo"):action(function(_, _, passed_foo) + foo = passed_foo + end) + local baz + parser:argument("baz"):args("*"):action(function(_, _, passed_baz) + baz = passed_baz + end) + + parser:parse{"a"} + assert.equals("a", foo) + assert.same({}, baz) + + parser:parse{"b", "c"} + assert.equals("b", foo) + assert.same({"c"}, baz) + + parser:parse{"d", "e", "f"} + assert.equals("d", foo) + assert.same({"e", "f"}, baz) + end) + it("for options are called", function() local action1 = spy.new(function(_, _, arg) assert.equal("nowhere", arg) diff --git a/src/argparse.lua b/src/argparse.lua index 7e762bb..5f032f6 100644 --- a/src/argparse.lua +++ b/src/argparse.lua @@ -256,7 +256,8 @@ local Argument = class({ typechecked("target", "string"), typechecked("defmode", "string"), typechecked("show_default", "boolean"), - typechecked("argname", "string", "table") + typechecked("argname", "string", "table"), + typechecked("action", "function") }) local Option = class({