* luci/libs/uvl:

- implement aliasing in luci.uvl.read_scheme()
	- fixed wrong enum definition in reference scheme
	- fixed boolean() datatype validator to actually accept "true" and "false" literals
	- extend uvl cli to validate schemes against the reference scheme (incomplete)
This commit is contained in:
Jo-Philipp Wich 2008-09-04 00:56:13 +00:00
parent 34ab619ee3
commit 19e22598fd
4 changed files with 38 additions and 14 deletions

View file

@ -351,7 +351,8 @@ end
-- This is normally done on demand, so you don't have to call this function
-- by yourself.
-- @param scheme Name of the scheme to parse
function UVL.read_scheme( self, scheme )
-- @param alias Create an alias for the loaded scheme
function UVL.read_scheme( self, scheme, alias )
local so = luci.uvl.scheme( self, scheme )
@ -375,7 +376,9 @@ function UVL.read_scheme( self, scheme )
table.insert( schemes, sd )
end
return self:_read_scheme_parts( so, schemes )
local ok, err = self:_read_scheme_parts( so, schemes )
if ok and alias then self.packages[alias] = self.packages[scheme] end
return ok, err
else
return false, so:error(ERR.SME_FIND(so, self.schemedir))
end

View file

@ -22,9 +22,9 @@ require("luci.util")
function boolean( val )
if val == "1" or val == "yes" or val == "on" then
if val == "1" or val == "yes" or val == "on" or val == "true" then
return true
elseif val == "0" or val == "no" or val == "off" then
elseif val == "0" or val == "no" or val == "off" or val == "false" then
return true
end

View file

@ -305,8 +305,8 @@ config section
# Enum value (schema.@enum.value)
config variable
option name 'name'
option title 'Name of the defined variable'
option name 'value'
option title 'Value of the defined enum value'
option section 'schema.enum'
option type 'variable'
option datatype 'string'

View file

@ -149,9 +149,9 @@ $Id$
Usage:
uvl --help
uvl [--silent] [--schemedir=DIR]
[--no-strict-sections] [--no-strict-options] [--no-strict-validators]
[--no-strict-lists] {verify|genspec} config[.section[.option]]
uvl [--silent] [--schemedir=DIR] [--configdir=DIR] [--no-strict-sections] \
[--no-strict-options] [--no-strict-validators] [--no-strict-lists] \
{verify|verify-scheme|genspec} config[.section[.option]]
Options:
--help
@ -163,6 +163,9 @@ Options:
--schemedir=DIR
Use DIR as scheme directory.
--configdir=DIR
Use DIR as config directory.
--no-strict-sections
Don't treat sections found in config but not in scheme as error.
@ -179,11 +182,14 @@ Actions:
verify
Validate given configuration, section or option.
verify-scheme
Validate given scheme against the reference meta scheme.
genspec
Generate a scheme skeleton from given configuration.
]=])
os.exit(255)
elseif arguments[1] == "verify" then
elseif arguments[1] == "verify" or arguments[1] == "verify-scheme" then
luci.uvl.STRICT_UNKNOWN_SECTIONS =
( not options['no-strict-sections'] and true or false )
luci.uvl.STRICT_UNKNOWN_OPTIONS =
@ -194,18 +200,33 @@ elseif arguments[1] == "verify" then
( not options['no-strict-lists'] and true or false )
local uvl = luci.uvl.UVL(
type(options.schemedir) == "string" and options.schemedir or nil
type(options.schemedir) == "string" and options.schemedir
)
local cso = luci.util.split( arguments[2], "." )
local ok, err = uvl:validate( unpack(cso) )
local ok, err
if arguments[1] == "verify-scheme" then
uvl:read_scheme( 'schema', cso[1] )
local uci = uvl.uci.cursor(
type(options.configdir) == "string"
and options.configdir or uvl.schemedir .. '/default'
)
ok, err = uvl:validate_config( cso[1], uci:get_all(cso[1]) )
if err then err.code = luci.uvl.errors.ERR_SCHEME end
else
ok, err = uvl:validate( unpack(cso) )
end
if ok then
if not options.silent then
print( string.format(
'%s "%s" validates fine!',
( #cso == 1 and "Config" or
( #cso == 2 and "Section" or "Option" ) ),
( arguments[1] == "verify-scheme" and "Scheme" or
( #cso == 1 and "Config" or
( #cso == 2 and "Section" or "Option" ) ) ),
table.concat(cso, ".")
) )
end