summaryrefslogtreecommitdiffstats
path: root/aconf/model/field.lua
diff options
context:
space:
mode:
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