Fixed new UVL options
[project/luci.git] / libs / uvl / luasrc / uvl.lua
index f7943d8..28924a3 100644 (file)
@@ -334,12 +334,41 @@ function UVL._validate_option( self, option, nodeps )
                                        return false, option:error(ERR.OPT_DATATYPE(option, dt))
                                end
                        end
-               end
+                       
+                       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
 
-               if not nodeps then
-                       local ok, err = dependencies.check( self, option )
-                       if not ok then
-                               option:error(err)
+                       if not nodeps then
+                               local ok, err = dependencies.check( self, option )
+                               if not ok then
+                                       option:error(err)
+                               end
                        end
                end
 
@@ -582,6 +611,9 @@ function UVL._parse_var(self, scheme, k, v)
                                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
@@ -633,8 +665,10 @@ function UVL._parse_enum(self, scheme, k, v)
 
        if not t.values then
                t.values = { [v.value] = v.title or v.value }
+               t.valuelist = { {value = v.value, title = v.title} }
        else
                t.values[v.value] = v.title or v.value
+               t.valuelist[#t.valuelist + 1] = {value = v.value, title = v.title}
        end
 
        if not t.enum_depends then
@@ -848,7 +882,7 @@ function uvlitem.config(self, opt)
                if #self.cref >= 3 then
                        c = c and c[self.cref[3]] or nil
                end
-       end     
+       end
 
        if c and opt then
                return c[opt]
@@ -912,7 +946,7 @@ function uvlitem._loadconf(self, co, c)
                if err then
                        self:error(ERR.UCILOAD(self, err))
                end
-               
+
                self._configcache = co
        end
        return co