diff options
Diffstat (limited to 'acf/model/field.lua')
-rw-r--r-- | acf/model/field.lua | 44 |
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 |