aboutsummaryrefslogtreecommitdiff
path: root/valua.lua
diff options
context:
space:
mode:
authord9k <d9k@ya.ru>2018-05-04 14:52:13 +0300
committerd9k <d9k@ya.ru>2018-05-04 14:52:13 +0300
commit9ffa698e15deed8acbd04507371e7c0e666f1bf1 (patch)
treeb84437b05f7c60c7dddbad65552152ab1bc871d7 /valua.lua
parent0d66254547c657eb0158d362d62bbaaa3456dda9 (diff)
downloadvalua-9ffa698e15deed8acbd04507371e7c0e666f1bf1.tar.gz
valua-9ffa698e15deed8acbd04507371e7c0e666f1bf1.tar.bz2
valua-9ffa698e15deed8acbd04507371e7c0e666f1bf1.zip
Added stackable function `optional()`. ref https://github.com/sailorproject/valua/issues/10
Diffstat (limited to 'valua.lua')
-rw-r--r--valua.lua14
1 files changed, 12 insertions, 2 deletions
diff --git a/valua.lua b/valua.lua
index 6e1c6e4..11d4741 100644
--- a/valua.lua
+++ b/valua.lua
@@ -41,8 +41,12 @@ function valua:new(obj)
--saves a function named _<index> with its args in a funcs table, to be used later when validating
return function(...)
local args = pack(...)
- local f = function(value) return valua['_'..k](value, unpack(args, 1, args.n)) end
- tinsert(t.funcs,f)
+ if k == 'optional' then
+ obj.allow_nil = true
+ else
+ local f = function(value) return valua['_'..k](value, unpack(args, 1, args.n)) end
+ tinsert(t.funcs,f)
+ end
return t
end
end
@@ -51,6 +55,11 @@ function valua:new(obj)
self.__call = function(t,value)
local res = true
local fres, err
+
+ if value == nil and t.allow_nil then
+ return res, err
+ end
+
-- iterates through all chained validations funcs that were packed, passing the value to be validated
for _,f in ipairs(t.funcs) do
fres,err = f(value)
@@ -64,6 +73,7 @@ function valua:new(obj)
return res,err
end
obj.funcs = {}
+ obj.allow_nil = false
return obj
end
--