* luci/libs/uvl:
- implement host datatype which matches hostname, ip4addr or ip6addr datatype - implement multival flag for options - fix handling of OPT_BADVALUE errors - add multival flag spec to reference scheme
This commit is contained in:
parent
5cf454019c
commit
727e9878fb
5 changed files with 31 additions and 12 deletions
|
@ -296,14 +296,16 @@ function UVL._validate_option( self, option, nodeps )
|
|||
if option:scheme('type') == "reference" or
|
||||
option:scheme('type') == "enum"
|
||||
then
|
||||
if not option:scheme('values') or
|
||||
not option:scheme('values')[val]
|
||||
then
|
||||
return false, option:error( ERR.OPT_BADVALUE(
|
||||
option, luci.util.serialize_data(
|
||||
luci.util.keys(option:scheme('values') or {})
|
||||
)
|
||||
) )
|
||||
local scheme_values = option:scheme('values') or { }
|
||||
local config_values = ( type(val) == "table" and val or { val } )
|
||||
for _, v in ipairs(config_values) do
|
||||
if not scheme_values[v] then
|
||||
return false, option:error( ERR.OPT_BADVALUE(
|
||||
option, { v, luci.util.serialize_data(
|
||||
luci.util.keys(scheme_values)
|
||||
) }
|
||||
) )
|
||||
end
|
||||
end
|
||||
elseif option:scheme('type') == "list" then
|
||||
if type(val) ~= "table" and STRICT_LIST_TYPE then
|
||||
|
@ -1103,7 +1105,11 @@ end
|
|||
--- Get the value of this option.
|
||||
-- @return The associated configuration value
|
||||
function option.value(self)
|
||||
return self:config()
|
||||
local v = self:config()
|
||||
if v and self:scheme('multival') then
|
||||
v = luci.util.split( v, "%s+", nil, true )
|
||||
end
|
||||
return v
|
||||
end
|
||||
|
||||
--- Get the associated section information in scheme.
|
||||
|
|
|
@ -111,6 +111,10 @@ function hostname( val )
|
|||
return false
|
||||
end
|
||||
|
||||
function host( val )
|
||||
return hostname(val) or ipaddr(val)
|
||||
end
|
||||
|
||||
function string( val )
|
||||
return true -- Everything qualifies as valid string
|
||||
end
|
||||
|
|
|
@ -53,7 +53,7 @@ ERRCODES = {
|
|||
|
||||
{ 'OPT_UNKNOWN', 'Option "%i" (%I) not found in scheme' },
|
||||
{ 'OPT_REQUIRED', 'Required option "%i" has no value' },
|
||||
{ 'OPT_BADVALUE', 'Value "%v" of option "%i" is not defined in enum %1' },
|
||||
{ 'OPT_BADVALUE', 'Value "%1" of option "%i" is not defined in enum %2' },
|
||||
{ 'OPT_INVVALUE', 'Value "%v" of given option "%i" does not validate as datatype "%1"' },
|
||||
{ 'OPT_NOTLIST', 'Option "%i" is defined as list but stored as plain value' },
|
||||
{ 'OPT_DATATYPE', 'Option "%i" has unknown datatype "%1"' },
|
||||
|
|
|
@ -15,8 +15,8 @@ config variable
|
|||
option name 'network'
|
||||
option title 'Associated network of this firewall zone'
|
||||
option section 'firewall.zone'
|
||||
# option valueof 'network.interface'
|
||||
# option type 'lazylist'
|
||||
option valueof 'network.interface'
|
||||
option multival true
|
||||
|
||||
config variable
|
||||
option name 'forward'
|
||||
|
|
|
@ -210,6 +210,15 @@ config variable
|
|||
option datatype 'boolean'
|
||||
option required false
|
||||
|
||||
# Variable multiple values flag (schema.@variable.multival)
|
||||
config variable
|
||||
option name 'multival'
|
||||
option title 'Specify whether this variable may contain multiple values separated by space'
|
||||
option section 'schema.variable'
|
||||
option type 'variable'
|
||||
option datatype 'boolean'
|
||||
option required false
|
||||
|
||||
# Variable type (schema.@variable.type)
|
||||
config variable
|
||||
option name 'type'
|
||||
|
|
Loading…
Reference in a new issue