diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-03-07 11:54:26 +0000 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-03-07 12:00:09 +0000 |
commit | 7df3e9fa87497bc65b454dca79f6f4fc133fd24b (patch) | |
tree | 219c3b4533f079ffbc9175a9fd35ddb1511943ca /acf/model/init.lua | |
parent | a717300296191677eb4fe6e2ebe76827cde41e77 (diff) | |
download | aconf-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.lua | 29 |
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) |