summaryrefslogtreecommitdiffstats
path: root/acf2/model
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-22 10:25:29 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-28 22:46:50 +0200
commit96c66a5d97280759c47b0fd8d04c3ca148306ad6 (patch)
treef1a7a0a4f3741b971c193b25ed5ffa12600b4ad9 /acf2/model
parent0db34a2fb194b83cd596260b78c6d61ff3c5557c (diff)
downloadacf2-96c66a5d97280759c47b0fd8d04c3ca148306ad6.tar.bz2
acf2-96c66a5d97280759c47b0fd8d04c3ca148306ad6.tar.xz
model: implement 'cascade' deletion policy to delete reference's parent
Diffstat (limited to 'acf2/model')
-rw-r--r--acf2/model/init.lua11
1 files changed, 9 insertions, 2 deletions
diff --git a/acf2/model/init.lua b/acf2/model/init.lua
index f2f79df..8f6d133 100644
--- a/acf2/model/init.lua
+++ b/acf2/model/init.lua
@@ -180,8 +180,15 @@ function M.Reference:deleted(context, addr)
raise(context.path, 'Refers to '..addr)
end
- assert(policy == 'set-null')
- node.save(context.parent, M.path.name(context.path))
+ local parent = context.parent
+ local path = context.path
+
+ if policy == 'cascade' then
+ path = node.path(parent)
+ parent = node.parent(parent)
+ else assert(policy == 'set-null') end
+
+ node.save(parent, M.path.name(path))
end
end