summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-03-15 10:05:18 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-03-15 10:05:18 +0200
commitfe648009635c8b744c51303020fd0b3b9cfe83c9 (patch)
treed7a18b2aef102b202b91e2715ba69f7bcd905801
parentd0071b9d4ad1c595965cbce982ba9edee5f4176a (diff)
downloadaconf-fe648009635c8b744c51303020fd0b3b9cfe83c9.tar.bz2
aconf-fe648009635c8b744c51303020fd0b3b9cfe83c9.tar.xz
fix bugs in validation and deletion
-rw-r--r--acf/model/model.lua6
-rw-r--r--acf/transaction/init.lua20
-rwxr-xr-xdev-shell2
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
diff --git a/dev-shell b/dev-shell
index addbae7..aeaedc9 100755
--- a/dev-shell
+++ b/dev-shell
@@ -78,7 +78,7 @@ EOF
}
function delete {
- _acf_obj_req -X DELETE
+ _acf_obj_req "$1" -X DELETE
}
function commit {