diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2015-02-12 16:39:38 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2015-02-12 16:39:38 +0200 |
commit | 80099b60e1fc436569f33cb38ab6608ef163478c (patch) | |
tree | 023c4eb83205b70da7455f52875c7a6bdb3f0926 /aconf/model/field.lua | |
parent | 89a46b4a0d507181c697f8da43d74dbf7271b32f (diff) | |
download | aconf-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.lua | 16 |
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 |