X-Git-Url: http://git.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=src%2Fffluci%2Futil.lua;h=38f33a20d46f224cddf049d7ffab548c1d8bfb9e;hp=07cbb8000cea6835b702be39fb399ffbe411656b;hb=06a385370c630a2e57412caf3a67ac77cc0e1b49;hpb=3f5de3273c9e103b4909802e339db06fe0b53312 diff --git a/src/ffluci/util.lua b/src/ffluci/util.lua index 07cbb8000c..38f33a20d4 100644 --- a/src/ffluci/util.lua +++ b/src/ffluci/util.lua @@ -26,6 +26,36 @@ limitations under the License. module("ffluci.util", package.seeall) + +-- Lua simplified Python-style OO class support emulation +function class(base) + local class = {} + + local create = function(class, ...) + local inst = {} + setmetatable(inst, {__index = class}) + + if inst.__init__ then + local stat, err = pcall(inst.__init__, inst, ...) + if not stat then + error(err) + end + end + + return inst + end + + local classmeta = {__call = create} + + if base then + classmeta.__index = base + end + + setmetatable(class, classmeta) + return class +end + + -- Checks whether a table has an object "value" in it function contains(table, value) for k,v in pairs(table) do @@ -57,45 +87,97 @@ end -- Runs "command" and returns its output -function exec(command, return_array) +function exec(command) local pp = io.popen(command) - local data = nil + local data = pp:read("*a") + pp:close() - if return_array then - local line = "" - data = {} - - while true do - line = pp:read() - if (line == nil) then break end - table.insert(data, line) - end - pp:close() - else - data = pp:read("*a") - pp:close() - end + return data +end + + +-- Runs "command" and returns its output as a array of lines +function execl(command) + local pp = io.popen(command) + local line = "" + local data = {} + + while true do + line = pp:read() + if (line == nil) then break end + table.insert(data, line) + end + pp:close() return data end + -- Populate obj in the scope of f as key function extfenv(f, key, obj) local scope = getfenv(f) scope[key] = obj - setfenv(f, scope) 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 + + +-- Resets the scope of f doing a shallow copy of its scope into a new table +function resfenv(f) + local scope = getfenv(f) + setfenv(f, {}) + updfenv(f, scope) +end + + +-- Returns the Haserl unique sessionid +function sessionid() + return ENV.SESSIONID +end + -- Updates the scope of f with "extscope" function updfenv(f, extscope) local scope = getfenv(f) for k, v in pairs(extscope) do scope[k] = v end - 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 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)