summaryrefslogtreecommitdiffstats
path: root/acf2
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-21 01:08:32 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-21 01:08:57 +0200
commit25196869b6ecb19a35a0cb42f966dec71e7e2665 (patch)
tree65edd66b2132e769d85e6c49fb4e92629c8a0ac2 /acf2
parentd6c93b7f19aa7237c020758675c7c6d23cb372a0 (diff)
downloadacf2-25196869b6ecb19a35a0cb42f966dec71e7e2665.tar.bz2
acf2-25196869b6ecb19a35a0cb42f966dec71e7e2665.tar.xz
model: avoid passing context argument to module-specific field functions
Diffstat (limited to 'acf2')
-rw-r--r--acf2/model/field.lua14
-rw-r--r--acf2/model/model.lua2
2 files changed, 9 insertions, 7 deletions
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