summaryrefslogtreecommitdiffstats
path: root/acf/model/init.lua
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-03-07 11:54:26 +0000
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-03-07 12:00:09 +0000
commit7df3e9fa87497bc65b454dca79f6f4fc133fd24b (patch)
tree219c3b4533f079ffbc9175a9fd35ddb1511943ca /acf/model/init.lua
parenta717300296191677eb4fe6e2ebe76827cde41e77 (diff)
downloadaconf-7df3e9fa87497bc65b454dca79f6f4fc133fd24b.tar.bz2
aconf-7df3e9fa87497bc65b454dca79f6f4fc133fd24b.tar.xz
moved range field to generic model library
corrected some errors in validation logic
Diffstat (limited to 'acf/model/init.lua')
-rw-r--r--acf/model/init.lua29
1 files changed, 27 insertions, 2 deletions
diff --git a/acf/model/init.lua b/acf/model/init.lua
index 202c0e0..f333886 100644
--- a/acf/model/init.lua
+++ b/acf/model/init.lua
@@ -10,7 +10,7 @@ local Field = fld.Field
local model = require('acf.model.model')
new = model.new
-to_field = model.to_field
+local to_field = model.to_field
node = require('acf.model.node')
@@ -22,6 +22,9 @@ local pth = require('acf.path')
local map = require('acf.util').map
+require 'stringy'
+
+
-- TODO object-specific actions
-- TODO access control
@@ -43,6 +46,7 @@ function String:init(params)
end
function String:validate(txn, path, value)
+ super(self, String):validate(txn, path, value)
if self['max-length'] and string.len(value) > self['max-length'] then
error('Maximum length exceeded: '..value)
end
@@ -63,13 +67,18 @@ function Number:init(params)
end
function Number:_validate(txn, path, value)
- return tonumber(super(self, Number):_validate(txn, path, value))
+ return super(self, Number):_validate(
+ txn,
+ path,
+ value and tonumber(value) or value
+ )
end
Integer = class(Number)
function Integer:validate(txn, path, value)
+ super(self, Integer):validate(txn, path, value)
if math.floor(value) ~= value then error('Not an integer: '..value) end
end
@@ -83,6 +92,22 @@ function Boolean:init(params)
end
+Range = class(String)
+
+function Range:init(params)
+ super(self, Range):init(params)
+ if not self.type then self.type = Integer end
+end
+
+function Range:validate(txn, path, value)
+ local comps = stringy.split(value, '-')
+ if #comps > 2 then error('Invalid range') end
+ for _, v in ipairs(comps) do
+ to_field(self.type):_validate(txn, path, v)
+ end
+end
+
+
Reference = class(Field)
function Reference:init(params)