From 80099b60e1fc436569f33cb38ab6608ef163478c Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Thu, 12 Feb 2015 16:39:38 +0200 Subject: model: allow arbitrary encoding for back-end data --- aconf/model/field.lua | 16 +++++++++++++--- aconf/model/net.lua | 13 ++++++------- aconf/model/time.lua | 10 ++++------ 3 files changed, 23 insertions(+), 16 deletions(-) (limited to 'aconf') 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) -- cgit v1.2.3