summaryrefslogtreecommitdiffstats
path: root/acf2
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-10-31 19:44:57 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-10-31 23:04:16 +0200
commit401fb17a2763ab7e6671e53fcd601c600b0a07a8 (patch)
tree44c4b26c65bba60b2ec8b86c11868638e8f66215 /acf2
parent31e261fd9aaf1e882d8df368b5842e4d5b612e62 (diff)
downloadaconf-401fb17a2763ab7e6671e53fcd601c600b0a07a8.tar.bz2
aconf-401fb17a2763ab7e6671e53fcd601c600b0a07a8.tar.xz
model: conditional model fields
Diffstat (limited to 'acf2')
-rw-r--r--acf2/model/field.lua3
-rw-r--r--acf2/model/model.lua12
2 files changed, 14 insertions, 1 deletions
diff --git a/acf2/model/field.lua b/acf2/model/field.lua
index 22751c2..8cbc93f 100644
--- a/acf2/model/field.lua
+++ b/acf2/model/field.lua
@@ -64,6 +64,7 @@ function M.Field:meta(context)
res.type = self.dtype
res.editable = self.editable
+ res.condition = self.condition
res.required = self.required
res.default = self.default
res.choice = self.choice
@@ -110,6 +111,8 @@ function M.Field:validate_saved(context)
self:save(context, self:load(context))
end
+function M.Field:clear(context) context.txn:set(context.addr) end
+
local Primitive = class(M.Field)
diff --git a/acf2/model/model.lua b/acf2/model/model.lua
index 4b6224c..923ac05 100644
--- a/acf2/model/model.lua
+++ b/acf2/model/model.lua
@@ -189,7 +189,17 @@ function M.Model:init(context)
function mt.validate()
for _, f in ipairs(_members(Field)) do
- if f.editable then f:validate_saved() end
+ if f.editable then
+ local relevant = true
+ for k, v in pairs(f.condition or {}) do
+ if mt.load(k) ~= v then
+ relevant = false
+ break
+ end
+ end
+ if relevant then f:validate_saved()
+ else f:clear() end
+ end
end
end