* 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:
Jo-Philipp Wich 2008-09-03 21:49:13 +00:00
parent 5cf454019c
commit 727e9878fb
5 changed files with 31 additions and 12 deletions

View file

@ -296,14 +296,16 @@ function UVL._validate_option( self, option, nodeps )
if option:scheme('type') == "reference" or if option:scheme('type') == "reference" or
option:scheme('type') == "enum" option:scheme('type') == "enum"
then then
if not option:scheme('values') or local scheme_values = option:scheme('values') or { }
not option:scheme('values')[val] local config_values = ( type(val) == "table" and val or { val } )
then for _, v in ipairs(config_values) do
return false, option:error( ERR.OPT_BADVALUE( if not scheme_values[v] then
option, luci.util.serialize_data( return false, option:error( ERR.OPT_BADVALUE(
luci.util.keys(option:scheme('values') or {}) option, { v, luci.util.serialize_data(
) luci.util.keys(scheme_values)
) ) ) }
) )
end
end end
elseif option:scheme('type') == "list" then elseif option:scheme('type') == "list" then
if type(val) ~= "table" and STRICT_LIST_TYPE then if type(val) ~= "table" and STRICT_LIST_TYPE then
@ -1103,7 +1105,11 @@ end
--- Get the value of this option. --- Get the value of this option.
-- @return The associated configuration value -- @return The associated configuration value
function option.value(self) 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 end
--- Get the associated section information in scheme. --- Get the associated section information in scheme.

View file

@ -111,6 +111,10 @@ function hostname( val )
return false return false
end end
function host( val )
return hostname(val) or ipaddr(val)
end
function string( val ) function string( val )
return true -- Everything qualifies as valid string return true -- Everything qualifies as valid string
end end

View file

@ -53,7 +53,7 @@ ERRCODES = {
{ 'OPT_UNKNOWN', 'Option "%i" (%I) not found in scheme' }, { 'OPT_UNKNOWN', 'Option "%i" (%I) not found in scheme' },
{ 'OPT_REQUIRED', 'Required option "%i" has no value' }, { '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_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_NOTLIST', 'Option "%i" is defined as list but stored as plain value' },
{ 'OPT_DATATYPE', 'Option "%i" has unknown datatype "%1"' }, { 'OPT_DATATYPE', 'Option "%i" has unknown datatype "%1"' },

View file

@ -15,8 +15,8 @@ config variable
option name 'network' option name 'network'
option title 'Associated network of this firewall zone' option title 'Associated network of this firewall zone'
option section 'firewall.zone' option section 'firewall.zone'
# option valueof 'network.interface' option valueof 'network.interface'
# option type 'lazylist' option multival true
config variable config variable
option name 'forward' option name 'forward'

View file

@ -210,6 +210,15 @@ config variable
option datatype 'boolean' option datatype 'boolean'
option required false 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) # Variable type (schema.@variable.type)
config variable config variable
option name 'type' option name 'type'