* luci/libs/uvl:
authorJo-Philipp Wich <jow@openwrt.org>
Tue, 4 Nov 2008 23:49:20 +0000 (23:49 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Tue, 4 Nov 2008 23:49:20 +0000 (23:49 +0000)
- recursively check error-tree of option-level dependencies
- mask all non-critical errors when walking error tree

libs/uvl/luasrc/uvl.lua
libs/uvl/luasrc/uvl/errors.lua

index 3b3186e..b34f66b 100644 (file)
@@ -295,7 +295,11 @@ function UVL._validate_option( self, option, nodeps )
                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
+                               if not err:is_all(
+                                       ERR.ERR_OPT_REQUIRED,
+                                       ERR.ERR_DEP_NOTEQUAL,
+                                       ERR.ERR_DEP_NOVALUE
+                               ) then
                                        option:error(err)
                                        return false, option:errors()
                                else
@@ -361,16 +365,22 @@ function UVL._validate_option( self, option, nodeps )
                                        end
                                end
 
-                               v = tonumber(v)
-
+                               local w = tonumber(v)
+                               
                                if option:scheme('minimum') then
-                                       if not v or v < option:scheme('minimum') then
+                                       if not w or w < 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
+                                       if not w or w > option:scheme('maximum') then
+                                               return false, option:error(ERR.OPT_RANGE(option))
+                                       end
+                               end
+
+                               if option:scheme('max_nil') then
+                                       if v and (not w or w > tonumber(option:scheme('max_nil'))) then
                                                return false, option:error(ERR.OPT_RANGE(option))
                                        end
                                end
index a575f40..614100f 100644 (file)
@@ -193,7 +193,11 @@ function error.is_all(self, ...)
        else
                local equal = false
                for _, c in ipairs(self.childs) do
-                       equal = util.contains(codes, c.code)
+                       if c.childs then
+                               equal = c:is_all(...)
+                       else
+                               equal = util.contains(codes, c.code)
+                       end
                end
                return equal
        end