summaryrefslogtreecommitdiffstats
path: root/acf/model/field.lua
diff options
context:
space:
mode:
Diffstat (limited to 'acf/model/field.lua')
-rw-r--r--acf/model/field.lua44
1 files changed, 24 insertions, 20 deletions
diff --git a/acf/model/field.lua b/acf/model/field.lua
index e1bdeaf..7e3aa1d 100644
--- a/acf/model/field.lua
+++ b/acf/model/field.lua
@@ -32,7 +32,9 @@ end
Field = class()
function Field:init(params)
- for k, v in pairs(params or {}) do if not self[k] then self[k] = v end end
+ for k, v in pairs(params or {}) do
+ if self[k] == nil then self[k] = v end
+ end
if self.choice and not self['ui-choice'] then
self['ui-choice'] = map(auto_ui_name, self.choice)
@@ -43,7 +45,7 @@ function Field:init(params)
end
end
-function Field:meta(txn, path, addr)
+function Field:meta(context)
assert(self.dtype)
return {
name=self.name,
@@ -58,38 +60,40 @@ function Field:meta(txn, path, addr)
}
end
-function Field:load(txn, path, addr)
- local value = txn:get(addr)
+function Field:load(context)
+ local value = context.txn:get(context.addr)
if value == nil then return self.default end
return value
end
-function Field:_validate(txn, path, value)
+function Field:_validate(context, value)
if self.required and value == nil then
- raise(path, 'Required value not set')
+ raise(context.path, 'Required value not set')
end
if self.choice and value ~= nil and not contains(self.choice, value) then
- raise(path, 'Invalid value')
+ raise(context.path, 'Invalid value')
end
- if value ~= nil then self:validate(txn, path, value) end
+ if value ~= nil then self:validate(context, value) end
return value
end
-function Field:validate(txn, path, value) end
+function Field:validate(context, value) end
-function Field:save(txn, path, addr, value)
+function Field:save(context, value)
-- 2nd argument currenly not much used by backends
- txn:set(addr, self.dtype, self:_validate(txn, path, value))
+ context.txn:set(context.addr, self.dtype, self:_validate(context, value))
end
-function Field:validate_saved(txn, path, addr)
- self:save(txn, path, addr, self:load(txn, path, addr))
+function Field:validate_saved(context)
+ self:save(context, self:load(context))
end
TreeNode = class(Field)
-function TreeNode:save(txn, path, addr, value)
+function TreeNode:save(context, value)
+ local path = context.path
+
-- TODO hack, allow preserving old instance on parent update
if value == path then return end
@@ -101,15 +105,15 @@ function TreeNode:save(txn, path, addr, value)
return
end
- txn:set(addr)
+ context.txn:set(context.addr)
if value then
if type(value) ~= 'table' then
raise(path, 'Cannot assign primitive value')
end
- txn:set(addr, 'table')
- local new = self:load(txn, path, addr, true)
+ context.txn:set(context.addr, 'table')
+ local new = self:load(context, true)
local errors = err.ErrorDict()
for k, v in pairs(value) do
@@ -129,7 +133,7 @@ function Model:init(params)
self.widget = self.dtype
end
-function Model:load(txn, path, addr, create)
- if not create and not txn:get(addr) then return end
- return self.model(txn, path, addr)
+function Model:load(context, create)
+ if not create and not context.txn:get(context.addr) then return end
+ return self.model(context)
end