diff options
author | Etiene Dalcol <Etiene@users.noreply.github.com> | 2018-05-14 11:05:32 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-14 11:05:32 +0100 |
commit | a743818e63fad4d1e2578d54422f491bccfdc66e (patch) | |
tree | 225e9ccc2d881995e8d299093e941ec34a13b970 | |
parent | b48176ea59c485056b07bd6f01aad5c6407c27d9 (diff) | |
parent | f34865745e30cadf458d8a13600869c77bcc3839 (diff) | |
download | valua-a743818e63fad4d1e2578d54422f491bccfdc66e.tar.gz valua-a743818e63fad4d1e2578d54422f491bccfdc66e.tar.bz2 valua-a743818e63fad4d1e2578d54422f491bccfdc66e.zip |
optional() stackable function; changes in tests for better readability
-rw-r--r-- | README.md | 33 | ||||
-rw-r--r-- | valua-test.lua | 86 | ||||
-rw-r--r-- | valua.lua | 17 |
3 files changed, 76 insertions, 60 deletions
@@ -29,43 +29,44 @@ reusable_validation("test!") -- true #### Current validation functions - * alnum() - + * alnum() - Checks if string is alphanumeric. - * boolean() - + * boolean() - Checks if value is a boolean. - * compare(another_value) - + * compare(another_value) - Checks if value is equal to another value. - * contains(substr) - + * contains(substr) - Checks if a string contains a substring. - * date() or date(format) - + * date() or date(format) - Checks if a string is a valid date. Default format is UK (dd/mm/yyyy). Also checks for US and ISO formats. - * email() - + * email() - Checks if a string is a valid email address. - * empty() - + * empty() - Checks if a value is empty. - * integer() - + * integer() - Checks if a number is an integer; - * in_list(list) - + * in_list(list) - Checks if a value is inside an array. * len(min,max) - Checks if a string's length is between min and max. * match(pattern) - Checks if a string matches a given pattern. - * max(n) - + * max(n) - Checks if a number is equal or less than n. - * min(n) - + * min(n) - Checks if a number is equal or greater than n. - * not_empty() - + * not_empty() - Checks if a value is not empty. - * no_white() - + * no_white() - Checks if a string contains no white spaces. - * number() - + * number() - Checks if a value is a number. - * string() - + * string() - Checks if a value is a string. * type(t) - Checks if a value is of type t. - + * optional(t) - +If value is `nil` it would be accepted. If it's not `nil` it would be processed with other chained validation functions as usually done. Copyright (c) 2014 Etiene Dalcol diff --git a/valua-test.lua b/valua-test.lua index c12a1a4..3d78740 100644 --- a/valua-test.lua +++ b/valua-test.lua @@ -17,51 +17,55 @@ 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().number().optional().min(45), {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 @@ -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 @@ -50,7 +54,13 @@ function valua:new(obj) -- __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) @@ -64,6 +74,7 @@ function valua:new(obj) return res,err end obj.funcs = {} + obj.allow_nil = false return obj end -- |