diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-03-15 10:05:18 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-03-15 10:05:18 +0200 |
commit | fe648009635c8b744c51303020fd0b3b9cfe83c9 (patch) | |
tree | d7a18b2aef102b202b91e2715ba69f7bcd905801 | |
parent | d0071b9d4ad1c595965cbce982ba9edee5f4176a (diff) | |
download | aconf-fe648009635c8b744c51303020fd0b3b9cfe83c9.tar.bz2 aconf-fe648009635c8b744c51303020fd0b3b9cfe83c9.tar.xz |
fix bugs in validation and deletion
-rw-r--r-- | acf/model/model.lua | 6 | ||||
-rw-r--r-- | acf/transaction/init.lua | 20 | ||||
-rwxr-xr-x | dev-shell | 2 |
3 files changed, 17 insertions, 11 deletions
diff --git a/acf/model/model.lua b/acf/model/model.lua index 6186d04..6a9a843 100644 --- a/acf/model/model.lua +++ b/acf/model/model.lua @@ -92,13 +92,15 @@ function Model:init(txn, path, addr) local f = mt.field(k) if not f then raise(mt.path, 'Field named '..k..' does not exist') end f:save(v) - txn.validate[mt.path] = function() self:validate() end end + + txn.validate[mt.path] = function() self:validate() end end function Model:validate() local mt = getmetatable(self) for _, name in ipairs(mt.members()) do - mt.field(name):validate_saved() + local field = mt.field(name) + if not field.compute then field:validate_saved() end end end diff --git a/acf/transaction/init.lua b/acf/transaction/init.lua index 99b8b9d..eb92c34 100644 --- a/acf/transaction/init.lua +++ b/acf/transaction/init.lua @@ -123,7 +123,9 @@ function Transaction:commit() self:check() local errors = ErrorDict() - for path, func in pairs(self.validate) do errors:collect(func) end + for path, func in pairs(self.validate) do + if not self.deleted[path] then errors:collect(func) end + end errors:raise() local mods = {} @@ -147,15 +149,17 @@ function Transaction:commit() end local function insert_del(path) - local value = self.backend:get(path) - if type(value) == 'table' then - for _, child in ipairs(value) do - local cp = pth.join(path, child) - assert(self.deleted[cp]) - if not handled[cp] then insert_del(cp) end + if not handled[path] then + local value = self.backend:get(path) + if type(value) == 'table' then + for _, child in ipairs(value) do + local cp = pth.join(path, child) + assert(self.deleted[cp]) + insert_del(cp) + end end + insert(path) end - insert(path) end for path, deleted in pairs(self.deleted) do @@ -78,7 +78,7 @@ EOF } function delete { - _acf_obj_req -X DELETE + _acf_obj_req "$1" -X DELETE } function commit { |