From 97703f26017aff4dcd3435fdc612719b040278c6 Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Wed, 11 Dec 2013 13:46:34 +0200 Subject: model: meta requests: return metadata for reference, not target --- acf2/model/node.lua | 6 ++++-- acf2/model/set.lua | 8 +++++--- 2 files changed, 9 insertions(+), 5 deletions(-) (limited to 'acf2') diff --git a/acf2/model/node.lua b/acf2/model/node.lua index bb37900..3347cd0 100644 --- a/acf2/model/node.lua +++ b/acf2/model/node.lua @@ -61,7 +61,7 @@ function M.TreeNode:init(context) mt.__eq = equal_tns mt._meta = {} - function mt.get(k, create) return mt.load(k, {create=create}) end + function mt.get(k, options) return mt.load(k, options) end if not mt.txn then return end @@ -101,7 +101,9 @@ function M.TreeNode:fetch(path, create) raise(mt.path, 'Member does not exist: '..name) end - local next = mt.get(name, create) + local options = {create=create} + if create and #path == 1 then options.dereference = false end + local next = mt.get(name, options) if next == nil and (not create or #path > 1) then raise(mt.path, 'Subordinate does not exist: '..name) end diff --git a/acf2/model/set.lua b/acf2/model/set.lua index ac5600b..713da8b 100644 --- a/acf2/model/set.lua +++ b/acf2/model/set.lua @@ -9,6 +9,7 @@ local TreeNode = require('acf2.model.field').TreeNode local node = require('acf2.model.node') local object = require('acf2.object') local pth = require('acf2.path') +local setdefaults = require('acf2.util').setdefaults M.Set = object.class(require('acf2.model.node').List) @@ -28,10 +29,11 @@ function M.Set:init(context, params) local mt = getmetatable(self) mt._meta.type = 'set' - function mt.get(k, create) + function mt.get(k, options) + options = setdefaults(options or {}, {dereference=true}) local i = find(k) - if i then return mt.load(i, {dereference=true}) end - if create then return k end + if i then return mt.load(i, options) end + if options.create then return k end end function mt.__newindex(t, k, v) -- cgit v1.2.3