summaryrefslogtreecommitdiffstats
path: root/aconf/model
diff options
context:
space:
mode:
Diffstat (limited to 'aconf/model')
-rw-r--r--aconf/model/field.lua16
-rw-r--r--aconf/model/net.lua13
-rw-r--r--aconf/model/time.lua10
3 files changed, 23 insertions, 16 deletions
diff --git a/aconf/model/field.lua b/aconf/model/field.lua
index ca6bc1d..f5382c4 100644
--- a/aconf/model/field.lua
+++ b/aconf/model/field.lua
@@ -1,5 +1,5 @@
--[[
-Copyright (c) 2012-2014 Kaarle Ritvanen
+Copyright (c) 2012-2015 Kaarle Ritvanen
See LICENSE file for license details
--]]
@@ -174,7 +174,12 @@ function M.Field:_compute(context)
return self.compute(context.parent, context.txn)
end
-function M.Field:_load(context) return context.txn:get(context.addr) end
+function M.Field:_load(context)
+ local value = context.txn:get(context.addr)
+ if value ~= nil then return self:decode(context, value) end
+end
+
+function M.Field:decode(context, value) return value end
function M.Field:_validate(context, value)
if value == nil then
@@ -220,7 +225,12 @@ function M.Field:save(context, value)
else self:_save(context, self:_validate(context, value)) end
end
-function M.Field:_save(context, value) context.txn:set(context.addr, value) end
+function M.Field:_save(context, value)
+ if value ~= nil then value = self:encode(context, value) end
+ context.txn:set(context.addr, value)
+end
+
+function M.Field:encode(context, value) return value end
function M.Field:validate_saved(context)
if self:_editable(context) then self:save(context, self:load(context)) end
diff --git a/aconf/model/net.lua b/aconf/model/net.lua
index 48a419a..268e60e 100644
--- a/aconf/model/net.lua
+++ b/aconf/model/net.lua
@@ -54,23 +54,22 @@ function BaseIPAddress:split(context, value)
return comps[1], mask
end
-function BaseIPAddress:_load(context)
- local res = super(self, BaseIPAddress):_load(context)
+function BaseIPAddress:decode(context, value)
local maddr = self:abs_mask_addr(context)
- if res and maddr then
- return res..'/'..(self:mask2cidr(context.txn:get(maddr)) or self.length)
+ if value and maddr then
+ return value..'/'..(self:mask2cidr(context.txn:get(maddr)) or self.length)
end
- return res
+ return value
end
-function BaseIPAddress:_save(context, value)
+function BaseIPAddress:encode(context, value)
local maddr = self:abs_mask_addr(context)
if maddr then
local cidr
if value then value, cidr = self:split(context, value) end
context.txn:set(maddr, cidr and self:cidr2mask(cidr))
end
- super(self, BaseIPAddress):_save(context, value)
+ return value
end
diff --git a/aconf/model/time.lua b/aconf/model/time.lua
index 099a819..5879bc3 100644
--- a/aconf/model/time.lua
+++ b/aconf/model/time.lua
@@ -1,5 +1,5 @@
--[[
-Copyright (c) 2012-2014 Kaarle Ritvanen
+Copyright (c) 2012-2015 Kaarle Ritvanen
See LICENSE file for license details
--]]
@@ -30,14 +30,12 @@ function M.Timestamp:_offset(value)
return time and os.time(time)
end
-function M.Timestamp:_load(context)
- local value = super(self, M.Timestamp):_load(context)
+function M.Timestamp:decode(context, value)
return value and self.epoch_offset and os.date(self.format, value) or value
end
-function M.Timestamp:_save(context, value)
- if self.epoch_offset then value = self:_offset(value) end
- super(self, M.Timestamp):_save(context, value)
+function M.Timestamp:encode(context, value)
+ return self.epoch_offset and self:_offset(value) or value
end
function M.Timestamp:normalize(context, value)