* Splitted up value validation code from ffluci.http.formvalue to ffluci.util.validate

This commit is contained in:
Steven Barth 2008-03-20 17:30:33 +00:00
parent f989f6ee00
commit e8b87fffb9
2 changed files with 32 additions and 34 deletions

View file

@ -54,43 +54,18 @@ function request_redirect(category, module, action)
redirect(pattern:format(category, module, action))
end
-- Form validation function:
-- Gets a form variable "key".
-- If it does not exist: return "default"
-- If cast_number is true and "key" is not a number: return "default"
-- If valid is a table and "key" is not in it: return "default"
-- If valid is a function and returns nil: return "default"
-- Else return the value of "key"
--
-- Examples:
-- Get a form variable "foo" and return "bar" if it is not set
-- = formvalue("foo", "bar")
--
-- Get "foo" and make sure it is either "bar" or "baz"
-- = formvalue("foo", nil, nil, {"bar", "baz"})
--
-- Get "foo", make sure its a number and below 10 else return 5
-- = formvalue("foo", 5, true, function(a) return a < 10 and a or nil end)
function formvalue(key, default, cast_number, valid, table)
table = table or formvalues()
-- Gets form value from key
function formvalue(key, default)
local c = formvalues()
if table[key] == nil then
return default
else
local value = table[key]
value = cast_number and tonumber(value) or not cast_number and nil
if type(valid) == "function" then
value = valid(value)
elseif type(valid) == "table" then
if not ffluci.util.contains(valid, value) then
value = nil
end
for match in key:gmatch("%w+") do
c = c[match]
if c == nil then
return default
end
return value or default
end
return c
end

View file

@ -141,6 +141,29 @@ function updfenv(f, extscope)
end
-- Validates a variable
function validate(value, cast_number, cast_int, valid)
if cast_number or cast_int then
value = tonumber(value)
end
if cast_int and not(value % 1 == 0) then
value = nil
end
if type(valid) == "function" then
value = valid(value)
elseif type(valid) == "table" then
if not ffluci.util.contains(valid, value) then
value = nil
end
end
return value
end
-- Returns the filename of the calling script
function __file__()
return debug.getinfo(2, 'S').source:sub(2)