summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2008-09-03 21:49:13 +0000
committerJo-Philipp Wich <jow@openwrt.org>2008-09-03 21:49:13 +0000
commit727e9878fb00f545c0cd1b0130e789a5764eee3b (patch)
tree38d6c03b8018e3587232c06410a9286e3d4c5f3c
parent5cf454019c535ee25c22e8df693c65a509bce316 (diff)
* 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
-rw-r--r--libs/uvl/luasrc/uvl.lua24
-rw-r--r--libs/uvl/luasrc/uvl/datatypes.lua4
-rw-r--r--libs/uvl/luasrc/uvl/errors.lua2
-rw-r--r--libs/uvl/root/lib/uci/schema/default/firewall4
-rw-r--r--libs/uvl/root/lib/uci/schema/meta/schema9
5 files changed, 31 insertions, 12 deletions
diff --git a/libs/uvl/luasrc/uvl.lua b/libs/uvl/luasrc/uvl.lua
index 908cfd7bd..007a37dbc 100644
--- a/libs/uvl/luasrc/uvl.lua
+++ b/libs/uvl/luasrc/uvl.lua
@@ -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.
diff --git a/libs/uvl/luasrc/uvl/datatypes.lua b/libs/uvl/luasrc/uvl/datatypes.lua
index 3dfe37dbe..ce18d47ed 100644
--- a/libs/uvl/luasrc/uvl/datatypes.lua
+++ b/libs/uvl/luasrc/uvl/datatypes.lua
@@ -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
diff --git a/libs/uvl/luasrc/uvl/errors.lua b/libs/uvl/luasrc/uvl/errors.lua
index 2ababaa61..c53a4abe0 100644
--- a/libs/uvl/luasrc/uvl/errors.lua
+++ b/libs/uvl/luasrc/uvl/errors.lua
@@ -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"' },
diff --git a/libs/uvl/root/lib/uci/schema/default/firewall b/libs/uvl/root/lib/uci/schema/default/firewall
index dc488d40f..e421b1103 100644
--- a/libs/uvl/root/lib/uci/schema/default/firewall
+++ b/libs/uvl/root/lib/uci/schema/default/firewall
@@ -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'
diff --git a/libs/uvl/root/lib/uci/schema/meta/schema b/libs/uvl/root/lib/uci/schema/meta/schema
index 906812454..1d673d350 100644
--- a/libs/uvl/root/lib/uci/schema/meta/schema
+++ b/libs/uvl/root/lib/uci/schema/meta/schema
@@ -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'