summaryrefslogtreecommitdiffstats
path: root/acf
diff options
context:
space:
mode:
Diffstat (limited to 'acf')
-rw-r--r--acf/model/field.lua8
-rw-r--r--acf/model/init.lua17
-rw-r--r--acf/persistence/init.lua7
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