gluon/package/gluon-web/luasrc/usr/lib/lua/gluon/web/util.lua
2018-01-18 07:49:00 +01:00

98 lines
2.1 KiB
Lua

-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2017 Matthias Schiffer <mschiffer@universe-factory.net>
-- Licensed to the public under the Apache License 2.0.
local io = require "io"
local table = require "table"
local tparser = require "gluon.web.template.parser"
local nixio = require "nixio"
local fs = require "nixio.fs"
local getmetatable, setmetatable = getmetatable, setmetatable
local tostring, pairs = tostring, pairs
module "gluon.web.util"
--
-- Class helper routines
--
-- Instantiates a class
local function _instantiate(class, ...)
local inst = setmetatable({}, {__index = class})
if inst.__init__ then
inst:__init__(...)
end
return inst
end
-- The class object can be instantiated by calling itself.
-- Any class functions or shared parameters can be attached to this object.
-- Attaching a table to the class object makes this table shared between
-- all instances of this class. For object parameters use the __init__ function.
-- Classes can inherit member functions and values from a base class.
-- Class can be instantiated by calling them. All parameters will be passed
-- to the __init__ function of this class - if such a function exists.
-- The __init__ function must be used to set any object parameters that are not shared
-- with other objects of this class. Any return values will be ignored.
function class(base)
return setmetatable({}, {
__call = _instantiate,
__index = base
})
end
function instanceof(object, class)
while object do
if object == class then
return true
end
local mt = getmetatable(object)
object = mt and mt.__index
end
return false
end
--
-- String and data manipulation routines
--
function pcdata(value)
return value and tparser.pcdata(tostring(value))
end
function contains(table, value)
for k, v in pairs(table) do
if value == v then
return k
end
end
return false
end
--
-- System utility functions
--
function exec(command)
local pp = io.popen(command)
local data = pp:read("*a")
pp:close()
return data
end
function uniqueid(bytes)
local rand = fs.readfile("/dev/urandom", bytes)
return nixio.bin.hexlify(rand)
end
function libpath()
return '/lib/gluon/web'
end