diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-10-31 19:44:57 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-10-31 23:04:16 +0200 |
commit | 401fb17a2763ab7e6671e53fcd601c600b0a07a8 (patch) | |
tree | 44c4b26c65bba60b2ec8b86c11868638e8f66215 /acf2 | |
parent | 31e261fd9aaf1e882d8df368b5842e4d5b612e62 (diff) | |
download | aconf-401fb17a2763ab7e6671e53fcd601c600b0a07a8.tar.bz2 aconf-401fb17a2763ab7e6671e53fcd601c600b0a07a8.tar.xz |
model: conditional model fields
Diffstat (limited to 'acf2')
-rw-r--r-- | acf2/model/field.lua | 3 | ||||
-rw-r--r-- | acf2/model/model.lua | 12 |
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 |