summaryrefslogtreecommitdiffstats
path: root/acf
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-05-31 13:51:38 +0300
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-05-31 13:51:38 +0300
commit4d8db6586fff2c9de161b5a20571f01f9c2ece14 (patch)
treea616127837f487950409240d188312de633d742b /acf
parentb5edf82b9529be45fcf448d4a8b27452580d60ef (diff)
downloadaconf-4d8db6586fff2c9de161b5a20571f01f9c2ece14.tar.bz2
aconf-4d8db6586fff2c9de161b5a20571f01f9c2ece14.tar.xz
clone TreeNode instance if its path name is assigned to a TreeNode field
Diffstat (limited to 'acf')
-rw-r--r--acf/model/field.lua11
1 files changed, 3 insertions, 8 deletions
diff --git a/acf/model/field.lua b/acf/model/field.lua
index a186064..1c903b0 100644
--- a/acf/model/field.lua
+++ b/acf/model/field.lua
@@ -182,14 +182,9 @@ end
function TreeNode:save(context, value)
local path = context.path
- -- TODO hack, allow preserving old instance on parent update
if value == path then return end
-
- if object.isinstance(value, node.TreeNode) then
- -- TODO clone if TreeNode has wrong path
- if node.path(value) ~= path then
- raise(path, 'Attempted to assign foreign object as value')
- end
+ if type(value) == 'string' then value = context.txn:search(value) end
+ if object.isinstance(value, node.TreeNode) and node.path(value) == path then
return
end
@@ -204,7 +199,7 @@ function TreeNode:save(context, value)
local new = self:load(context, true)
local errors = err.ErrorDict()
- for k, v in pairs(value) do
+ for k, v in node.pairs(value) do
errors:collect(self.save_member, new, k, v)
end
errors:raise()