diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2008-09-03 21:49:13 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2008-09-03 21:49:13 +0000 |
commit | 727e9878fb00f545c0cd1b0130e789a5764eee3b (patch) | |
tree | 38d6c03b8018e3587232c06410a9286e3d4c5f3c /libs/uvl/luasrc | |
parent | 5cf454019c535ee25c22e8df693c65a509bce316 (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
Diffstat (limited to 'libs/uvl/luasrc')
-rw-r--r-- | libs/uvl/luasrc/uvl.lua | 24 | ||||
-rw-r--r-- | libs/uvl/luasrc/uvl/datatypes.lua | 4 | ||||
-rw-r--r-- | libs/uvl/luasrc/uvl/errors.lua | 2 |
3 files changed, 20 insertions, 10 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"' }, |