]]--
-module( "luci.uvl.dependencies", package.seeall )
+local uvl = require "luci.uvl"
+local ERR = require "luci.uvl.errors".error
+local util = require "luci.util"
+local table = require "table"
+
+local type, unpack = type, unpack
+local ipairs, pairs = ipairs, pairs
+
+module "luci.uvl.dependencies"
+
-local ERR = luci.uvl.errors
function _parse_reference( r, c, s, o )
local ref = { }
}
for v in r:gmatch("[^.]+") do
- table.insert(ref, (v:gsub( "%$(.+)", vars )))
+ ref[#ref+1] = (v:gsub( "%$(.+)", vars ))
end
if #ref < 2 then
function _serialize_dependency( dep, v )
local str
- for k, v in luci.util.spairs( dep,
+ for k, v in util.spairs( dep,
function(a,b)
a = ( type(dep[a]) ~= "boolean" and "_" or "" ) .. a
b = ( type(dep[b]) ~= "boolean" and "_" or "" ) .. b
function check( self, object, nodeps )
- local derr = ERR.DEPENDENCY(object)
+ local derr = ERR('DEPENDENCY', object)
if not self.depseen[object:cid()] then
self.depseen[object:cid()] = true
else
- return false, derr:child(ERR.DEP_RECURSIVE(object))
+ return false, derr:child(ERR('DEP_RECURSIVE', object))
end
if object:scheme('depends') then
local ref = _parse_reference( k, unpack(object.cref) )
if not ref then
- return false, derr:child(ERR.SME_BADDEP(object,k))
+ return false, derr:child(ERR('SME_BADDEP',object,k))
end
- local option = luci.uvl.option( self, object.c, unpack(ref) )
+ local option = uvl.option( self, object.c, unpack(ref) )
valid, err = self:_validate_option( option, true )
if valid then
local depstr = _serialize_dependency( dep, v )
derr:child(
type(v) == "boolean"
- and ERR.DEP_NOVALUE(option, depstr)
- or ERR.DEP_NOTEQUAL(option, {depstr, v})
+ and ERR('DEP_NOVALUE', option, depstr)
+ or ERR('DEP_NOTEQUAL', option, {depstr, v})
)
break
subcondition = false
local depstr = _serialize_dependency( dep, v )
- derr:child(ERR.DEP_NOTVALID(option, depstr):child(err))
+ derr:child(ERR('DEP_NOTVALID', option, depstr):child(err))
break
end
local ok = true
local valid = false
local enum = object:enum()
- local eerr = ERR.DEP_BADENUM(enum)
+ local eerr = ERR('DEP_BADENUM', enum)
for _, dep in ipairs(enum:scheme('enum_depends')[object:value()]) do
local subcondition = true
local ref = _parse_reference( k, unpack(object.cref) )
if not ref then
- return false, derr:child(eerr:child(ERR.SME_BADDEP(enum,k)))
+ return false, derr:child(eerr:child(ERR('SME_BADDEP',enum,k)))
end
local option = luci.uvl.option( self, object.c, unpack(ref) )
local depstr = _serialize_dependency( dep, v )
eerr:child(
type(v) == "boolean"
- and ERR.DEP_NOVALUE(option, depstr)
- or ERR.DEP_NOTEQUAL(option, {depstr, v})
+ and ERR('DEP_NOVALUE', option, depstr)
+ or ERR('DEP_NOTEQUAL', option, {depstr, v})
)
break
subcondition = false
local depstr = _serialize_dependency( dep, v )
- eerr:child(ERR.DEP_NOTVALID(option, depstr):child(err))
+ eerr:child(ERR('DEP_NOTVALID', option, depstr):child(err))
break
end