summaryrefslogtreecommitdiffstats
path: root/aconf/model/field.lua
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2015-02-12 16:39:38 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2015-02-12 16:39:38 +0200
commit80099b60e1fc436569f33cb38ab6608ef163478c (patch)
tree023c4eb83205b70da7455f52875c7a6bdb3f0926 /aconf/model/field.lua
parent89a46b4a0d507181c697f8da43d74dbf7271b32f (diff)
downloadaconf-80099b60e1fc436569f33cb38ab6608ef163478c.tar.bz2
aconf-80099b60e1fc436569f33cb38ab6608ef163478c.tar.xz
model: allow arbitrary encoding for back-end data
Diffstat (limited to 'aconf/model/field.lua')
-rw-r--r--aconf/model/field.lua16
1 files changed, 13 insertions, 3 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