diff options
Diffstat (limited to 'acf')
-rw-r--r-- | acf/model/field.lua | 8 | ||||
-rw-r--r-- | acf/model/init.lua | 17 | ||||
-rw-r--r-- | acf/persistence/init.lua | 7 |
3 files changed, 24 insertions, 8 deletions
diff --git a/acf/model/field.lua b/acf/model/field.lua index 7af0698..459bb92 100644 --- a/acf/model/field.lua +++ b/acf/model/field.lua @@ -74,8 +74,10 @@ function Field:meta(context) return res end +function Field:btype(context) return self.dtype end + function Field:load(context) - local value = context.txn:get(context.addr, self.dtype) + local value = context.txn:get(context.addr, self:btype(context)) if value == nil then return self.default end return value end @@ -94,7 +96,9 @@ end function Field:validate(context, value) end function Field:save(context, value) - context.txn:set(context.addr, self.dtype, self:_validate(context, value)) + context.txn:set( + context.addr, self:btype(context), self:_validate(context, value) + ) end function Field:validate_saved(context) diff --git a/acf/model/init.lua b/acf/model/init.lua index 1bc190d..351c1a2 100644 --- a/acf/model/init.lua +++ b/acf/model/init.lua @@ -123,21 +123,28 @@ function Reference:abs_scope(context) return pth.to_absolute(self.scope, node.path(context.parent)) end +function Reference:scope_addr(context) + local txn = context.txn + return node.addr( + relabel('system', txn.search, txn, self:abs_scope(context)) + ) +end + function Reference:meta(context) local res = super(self, Reference):meta(context) res.scope = self:abs_scope(context) - local txn = context.txn - local objs = txn:get( - node.addr(relabel('system', txn.search, txn, res.scope)), - 'table' - ) or {} + local objs = context.txn:get(self:scope_addr(context), 'table') or {} res.choice = map(function(p) return pth.join(res.scope, p) end, objs) res['ui-choice'] = objs return res end +function Reference:btype(context) + return 'reference'..self:scope_addr(context) +end + function Reference:follow(context, value) return context.txn:search(pth.mjoin(self:abs_scope(context), value)) end diff --git a/acf/persistence/init.lua b/acf/persistence/init.lua index 7b10002..3934eac 100644 --- a/acf/persistence/init.lua +++ b/acf/persistence/init.lua @@ -10,6 +10,8 @@ local object = require('acf.object') local pth = require('acf.path') local util = require('acf.util') +require 'stringy' + DataStore = object.class(require('acf.transaction.backend').TransactionBackend) @@ -44,7 +46,10 @@ function DataStore:get(path, t) if t == 'string' then res = tostring(res) elseif t == 'number' then res = tonumber(res) elseif t == 'boolean' then res = res and true or false - elseif t == 'reference' then assert(atype == 'string') + + elseif stringy.startswith(t, 'reference/') then + assert(atype == 'string') + else assert(false) end end end |