you may not use this file except in compliance with the License.
You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ http://www.apache.org/licenses/LICENSE-2.0
$Id$
end
elseif option:scheme() then
+ if not nodeps then
+ local ok, err = dependencies.check( self, option )
+ if not ok then
+ if not err:is_all(ERR.ERR_DEP_NOTEQUAL,ERR.ERR_DEP_NOVALUE) then
+ option:error(err)
+ return false, option:errors()
+ else
+ return true
+ end
+ end
+ end
+
if option:scheme('required') and not option:value() then
return false, option:error(ERR.OPT_REQUIRED(option))
end
end
- if not nodeps then
- local ok, err = dependencies.check( self, option )
- if not ok then
- option:error(err)
+ val = ( type(val) == "table" and val or { val } )
+ for _, v in ipairs(val) do
+ if option:scheme('minlength') then
+ if #v < option:scheme('minlength') then
+ return false, option:error(ERR.OPT_RANGE(option))
+ end
+ end
+
+ if option:scheme('maxlength') then
+ if #v > option:scheme('maxlength') then
+ return false, option:error(ERR.OPT_RANGE(option))
+ end
+ end
+
+ v = tonumber(v)
+
+ if option:scheme('minimum') then
+ if not v or v < option:scheme('minimum') then
+ return false, option:error(ERR.OPT_RANGE(option))
+ end
+ end
+
+ if option:scheme('maximum') then
+ if not v or v > option:scheme('maximum') then
+ return false, option:error(ERR.OPT_RANGE(option))
+ end
end
end
end
s.named = s.named or false
end
-
- -- Step 2: get all variables
+-- Step 2: get all variables
function UVL._parse_var(self, scheme, k, v)
local ok, err = _req( TYPE_OPTION, k, v, { "name", "section" } )
if err then error(scheme:error(err)) end
t.valueof = type(v2) == "table" and v2 or {v2}
elseif k == "required" then
t[k] = _bool(v2)
+ elseif k == "minlength" or k == "maxlength" or
+ k == "minimum" or k == "maximum"
+ then
+ t[k] = tonumber(v2)
else
t[k] = t[k] or v2
end
local c = self.c
if c and c[r[2]] and c[r[2]]['.anonymous'] and c[r[2]]['.index'] then
r[2] = '@' .. c[r[2]]['.type'] ..
- '[' .. tostring(c[r[2]]['.index']) .. ']'
+ '[' .. tostring(c[r[2]]['.index']) .. ']'
end
return table.concat( r, '.' )
end
local util = require "luci.util"
local string = require "string"
-local ipairs, error, type = ipairs, error, type
+local ipairs, error, type = ipairs, error, type
local tonumber, unpack = tonumber, unpack
{ 'OPT_NOTLIST', 'Option "%i" is defined as list but stored as plain value' },
{ 'OPT_DATATYPE', 'Option "%i" has unknown datatype "%1"' },
{ 'OPT_NOTFOUND', 'Option "%p.%s.%o" not found in config' },
+ { 'OPT_RANGE', 'Option "%p.%s.%o" is not within the specified range' },
{ 'DEP_NOTEQUAL', 'Dependency (%1) failed:\nOption "%i" is not eqal "%2"' },
{ 'DEP_NOVALUE', 'Dependency (%1) failed:\nOption "%i" has no value' },
end
return false
end
+
+function error.is_all(self, ...)
+ local codes = { ... }
+
+ if util.contains(codes, self.code) then
+ return true
+ else
+ local equal = false
+ for _, c in ipairs(self.childs) do
+ equal = util.contains(codes, c.code)
+ end
+ return equal
+ end
+end
option type 'variable'
option datatype 'string'
option required false
+
+# Variable minimum length (schema.@variable.minlength)
+config variable
+ option name 'minlength'
+ option title 'Minimum length of this variable'
+ option section 'schema.variable'
+ option type 'variable'
+ option datatype 'uint'
+ option required false
+
+# Variable maximum length (schema.@variable.minlength)
+config variable
+ option name 'maxlength'
+ option title 'Maximum length of this variable'
+ option section 'schema.variable'
+ option type 'variable'
+ option datatype 'uint'
+ option required false
+
+# Variable minimum value (schema.@variable.minlength)
+config variable
+ option name 'minimum'
+ option title 'Minimum value of this variable'
+ option section 'schema.variable'
+ option type 'variable'
+ option datatype 'integer'
+ option required false
+
+# Variable maximum value (schema.@variable.minlength)
+config variable
+ option name 'maximum'
+ option title 'Maximum value of this variable'
+ option section 'schema.variable'
+ option type 'variable'
+ option datatype 'integer'
+ option required false
# Variable validators (schema.@variable.validator)
config variable