Skip to content

Commit

Permalink
Merge a5ebacd into b48176e
Browse files Browse the repository at this point in the history
  • Loading branch information
d9k committed May 4, 2018
2 parents b48176e + a5ebacd commit ae0ef37
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 44 deletions.
85 changes: 44 additions & 41 deletions valua-test.lua
Expand Up @@ -17,51 +17,54 @@ local function check(val_test, test_value, expected, n)
end

local test_values = {
"test string!",
"hey",
"",
nil,
true,
42,
1337,
'26/10/1980',
'10-26-1980',
'29.02.2014',
'29/02/2016',
'a@a.com',
'asd123',
5.7,
{},
{3,46},
"<script>alert('boohoo@email.com XSS');</script>",
"test-123_maria.2@newdomain.wow.movie",
"10/06/1980 10:32:10"
[1] = "test string!",
[2] = "hey",
[3] = "",
[4] = nil,
[5] = true,
[6] = 42,
[7] = 1337,
[8] = '26/10/1980',
[9] = '10-26-1980',
[10] = '29.02.2014',
[11] = '29/02/2016',
[12] = 'a@a.com',
[13] = 'asd123',
[14] = 5.7,
[15] = {},
[16] = {3,46},
[17] = "<script>alert('boohoo@email.com XSS');</script>",
[18] = "test-123_maria.2@newdomain.wow.movie",
[19] = "10/06/1980 10:32:10"
}

local tests = {
{v:new().type("string").len(3,5),{1,false}},
{v:new().type("string").len(3,5), {1,false}},
{v:new().type("number").len(3,5), {1,false}},
{v:new().type("table").empty(),{15,true,16,false,1,false}},
{v:new().not_empty(),{2,true,3,false,4,false,16,true,5,true,6,true}},
{v:new().len(2,10),{2,true}},
{v:new().type("number"),{2,false}},
{v:new().empty(),{3,true,4,true,5,false,6,false}},
{v:new().boolean(),{1,false,5,true}},
{v:new().compare("hey"),{1,false,2,true}},
{v:new().number().min(45),{2,false,6,false,7,true}},
{v:new().number().max(1009),{7,false,6,true}},
{v:new().date(),{9,false,10,false,11,true,8,true}},
{v:new().date('us'),{8,false,9,true}},
{v:new().email(),{13,false,12,true,17,false,18,true}},
{v:new().in_list({"hey",42}),{12,false,6,true,2,true}},
{v:new().match("^%d+%p%d+%p%d%d%d%d$"),{1,false,8,true}},
{v:new().alnum(),{8,false,13,true}},
{v:new().integer(),{14,false,6,true}},
{v:new().string(),{14,false,1,true}},
{v:new().string().alnum(),{6,false}},
{v:new().contains(" "),{2,false,1,true}},
{v:new().no_white(),{1,false,2,true}},
{v:new().datetime(),{19,true,9,false}}
{v:new().type("table").empty(), {15,true, 16,false, 1,false}},
-- require('mobdebug').start('127.0.0.1')
{v:new().not_empty(), {2,true, 3,false, 4,false, 16,true, 5,true, 6,true}},
{v:new().len(2,10), {2,true}},
{v:new().type("number"), {2,false}},
{v:new().empty(), {3,true, 4,true, 5,false, 6,false}},
{v:new().boolean(), {1,false, 5,true}},
{v:new().compare("hey"), {1,false, 2,true}},
{v:new().number().min(45), {2,false, 6,false, 7,true, 4,false}},
{v:new().number().max(1009), {7,false, 6,true}},
{v:new().date(), {9,false, 10,false, 11,true, 8,true}},
{v:new().date('us'), {8,false, 9,true}},
{v:new().email(), {13,false, 12,true, 17,false, 18,true}},
{v:new().in_list({"hey",42}), {12,false, 6,true, 2,true}},
{v:new().match("^%d+%p%d+%p%d%d%d%d$"), {1,false, 8,true}},
{v:new().alnum(), {8,false, 13,true}},
{v:new().integer(), {14,false, 6,true,}},
{v:new().string(), {14,false, 1,true, 4,false}},
{v:new().string().alnum(), {6,false}},
{v:new().contains(" "), {2,false, 1,true}},
{v:new().no_white(), {1,false, 2,true}},
{v:new().datetime(), {19,true, 9,false}},
{v:new().number().min(45).optional(), {2,false, 6,false, 7,true, 4,true}},
{v:new().string().optional(), {14,false, 1,true, 4,true}},
}

for n,t in ipairs(tests) do
Expand Down
17 changes: 14 additions & 3 deletions valua.lua
Expand Up @@ -41,16 +41,26 @@ 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

-- __call will run only when the value is validated
self.__call = function(t,value)
local res = true
local fres, err
local err = nil
local fres

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)
Expand All @@ -64,6 +74,7 @@ function valua:new(obj)
return res,err
end
obj.funcs = {}
obj.allow_nil = false
return obj
end
--
Expand Down

0 comments on commit ae0ef37

Please sign in to comment.