* Splitted up value validation code from ffluci.http.formvalue to ffluci.util.validate
[project/luci.git] / src / ffluci / util.lua
index 6e0d867..12031ff 100644 (file)
@@ -92,6 +92,7 @@ function exec(command)
        return data
 end
 
+
 -- Runs "command" and returns its output as a array of lines
 function execl(command)
        local pp   = io.popen(command)  
@@ -108,6 +109,7 @@ function execl(command)
        return data
 end
 
+
 -- Populate obj in the scope of f as key 
 function extfenv(f, key, obj)
        local scope = getfenv(f)
@@ -116,6 +118,19 @@ function extfenv(f, key, obj)
 end
 
 
+-- Checks whether an object is an instanceof class
+function instanceof(object, class)
+       local meta = getmetatable(object)
+    while meta and meta.__index do 
+       if meta.__index == class then
+               return true
+       end
+        meta = getmetatable(meta.__index)
+    end
+    return false       
+end
+
+
 -- Updates the scope of f with "extscope"
 function updfenv(f, extscope)
        local scope = getfenv(f)
@@ -125,6 +140,30 @@ function updfenv(f, extscope)
        setfenv(f, scope)
 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)