From 4fb2991fb2cf93847fd839b5a9d79f903c2b64fb Mon Sep 17 00:00:00 2001 From: mpeterv Date: Sat, 31 Oct 2015 19:30:55 +0300 Subject: [PATCH] Add 'concat' action --- spec/actions_spec.lua | 5 +++-- src/argparse.lua | 10 ++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/spec/actions_spec.lua b/spec/actions_spec.lua index 4128dae..a03536e 100644 --- a/spec/actions_spec.lua +++ b/spec/actions_spec.lua @@ -100,9 +100,10 @@ describe("actions", function() local parser = Parser() parser:flag("--no-foo"):target("foo"):action("store_false") parser:flag("--no-bar"):target("bar"):action("store_false") + parser:option("--things"):args("+"):count("*"):action("concat") - local args = parser:parse{"--no-foo"} - assert.same({foo = false}, args) + local args = parser:parse{"--things", "a", "b", "--no-foo", "--things", "c", "d"} + assert.same({foo = false, things = {"a", "b", "c", "d"}}, args) end) it("for options allow setting initial stored value", function() diff --git a/src/argparse.lua b/src/argparse.lua index 1d4a44c..decfa17 100644 --- a/src/argparse.lua +++ b/src/argparse.lua @@ -375,6 +375,16 @@ function actions.append(result, target, argument, overwrite) end end +function actions.concat(result, target, arguments, overwrite) + if overwrite then + error("'concat' action can't handle too many invocations") + end + + for _, argument in ipairs(arguments) do + table.insert(result[target], argument) + end +end + function Argument:_get_action() local action, init