From 25196869b6ecb19a35a0cb42f966dec71e7e2665 Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Sat, 21 Dec 2013 01:08:32 +0200 Subject: model: avoid passing context argument to module-specific field functions --- acf2/model/field.lua | 14 ++++++++------ acf2/model/model.lua | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) (limited to 'acf2') diff --git a/acf2/model/field.lua b/acf2/model/field.lua index 31dc5ee..f668b90 100644 --- a/acf2/model/field.lua +++ b/acf2/model/field.lua @@ -68,7 +68,7 @@ function M.Field:init(params) super(self, M.Field):init(params) if type(self.editable) ~= 'function' then - function self.editable(context) return params.editable end + function self.editable(obj) return params.editable end end self.condition = M.conv_filter(self.condition) @@ -98,6 +98,8 @@ function M.Field:init(params) end end +function M.Field:_editable(context) return self:editable(context.parent) end + function M.Field:_choice(context) return self.choice end function M.Field:meta(context) @@ -107,7 +109,7 @@ function M.Field:meta(context) { type=self.dtype, visible=self.visible, - editable=self:editable(context), + editable=self:_editable(context), condition=self.condition, required=self.required, default=self.default, @@ -126,7 +128,7 @@ end function M.Field:load(context) if not context.txn then return setmetatable({}, context) end local value - if self.compute then value = self:compute(context) end + if self.compute then value = self:compute(context.parent, context.txn) end if value == nil then value = self:_load(context) end if value == nil then return self.default end return value @@ -162,7 +164,7 @@ function M.Field:_validate(context, value) end function M.Field:check_editable(context) - if not self:editable(context) then + if not self:_editable(context) then raise(context.path, 'Is not editable') end end @@ -177,14 +179,14 @@ function M.Field:validate(context, value) end function M.Field:save(context, value) self:check_editable(context) - if self.store then self:store(context, value) + if self.store then self:store(context.parent, value, context.txn) 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:validate_saved(context) - if self:editable(context) then self:save(context, self:load(context)) end + if self:_editable(context) then self:save(context, self:load(context)) end end diff --git a/acf2/model/model.lua b/acf2/model/model.lua index e17d328..c6c5306 100644 --- a/acf2/model/model.lua +++ b/acf2/model/model.lua @@ -204,7 +204,7 @@ function M.Model:init(context) function mt.validate() for _, f in ipairs(_members(Field)) do if mt.match(f.condition or {}) then f:validate_saved() - elseif f:editable() then f:_save() end + elseif f:_editable() then f:_save() end end if self.validate then self:validate() end end -- cgit v1.2.3