diff --git a/spec/convert_spec.lua b/spec/convert_spec.lua index 4caa8a1..4fdb80b 100644 --- a/spec/convert_spec.lua +++ b/spec/convert_spec.lua @@ -12,6 +12,25 @@ describe("tests related to converters", function() assert.same({numbers = {1, 2, 500}}, args) end) + it("accepts false", function() + local function toboolean(x) + if x == "true" then + return true + elseif x == "false" then + return false + end + end + + local parser = Parser() + parser:argument "booleans" { + convert = toboolean, + args = "+" + } + + local args = parser:parse{"true", "false"} + assert.same({booleans = {true, false}}, args) + end) + it("raises an error when it can't convert", function() local parser = Parser() parser:argument "numbers" { diff --git a/src/argparse.lua b/src/argparse.lua index 8dd8eaf..25c7cb8 100644 --- a/src/argparse.lua +++ b/src/argparse.lua @@ -509,11 +509,11 @@ function Parser:_parse(args, errhandler) local function convert(element, data) if element._convert then local ok, err = element._convert(data) - - return assert_(ok, "%s", err or "malformed argument '" .. data .. "'") - else - return data + assert_(ok ~= nil, "%s", err or "malformed argument '" .. data .. "'") + data = ok end + + return data end local invoke, pass, close