module("ffluci.util", package.seeall)
--- Lua OO class support emulation
+-- Lua simplified Python-style OO class support emulation
function class(base)
- local clsobj = {}
- local metatable = {__index = clsobj}
+ local class = {}
- function clsobj.new()
- local inst = {}
- setmetatable(inst, metatable)
- return inst
- end
+ local create = function(class, ...)
+ local inst = {}
+ setmetatable(inst, {__index = class})
+
+ if inst.__init__ then
+ inst:__init__(...)
+ end
+
+ return inst
+ end
+
+ local classmeta = {__call = create}
if base then
- setmetatable(clsobj, {__index = base})
+ classmeta.__index = base
end
- return clsobj
+ setmetatable(class, classmeta)
+ return class
end
return data
end
+
-- Runs "command" and returns its output as a array of lines
function execl(command)
local pp = io.popen(command)
return data
end
+
-- Populate obj in the scope of f as key
function extfenv(f, key, obj)
local scope = getfenv(f)
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)
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)