summaryrefslogtreecommitdiffstats
path: root/acf2/model
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-19 23:20:25 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-20 01:24:11 +0200
commitbad3738b7937c7d3cdb1878be664341aebe36652 (patch)
tree8b872b2cc1684dceeb8e3caa87e5b38ceb96aa39 /acf2/model
parentb908a35e90d64fd50a4fb3068d472fb8fb0b1b73 (diff)
downloadacf2-bad3738b7937c7d3cdb1878be664341aebe36652.tar.bz2
acf2-bad3738b7937c7d3cdb1878be664341aebe36652.tar.xz
model: allow using TreeNode objects as indices in reference sets
Diffstat (limited to 'acf2/model')
-rw-r--r--acf2/model/set.lua16
1 files changed, 8 insertions, 8 deletions
diff --git a/acf2/model/set.lua b/acf2/model/set.lua
index 4fcbc24..8d255d9 100644
--- a/acf2/model/set.lua
+++ b/acf2/model/set.lua
@@ -21,8 +21,12 @@ function M.Set:init(context, params)
object.super(self, M.Set):init(context, params, 'set')
local function find(value)
+ value = node.BoundMember(
+ self, pth.wildcard, params.field
+ ):normalize(value)
+
for i, member in node.pairs(self) do
- if member == value then return i end
+ if member == value then return i, value end
end
end
@@ -30,9 +34,9 @@ function M.Set:init(context, params)
function mt.get(k, options)
options = setdefaults(options or {}, {dereference=true})
- local i = find(k)
+ local i, v = find(k)
if i then return mt.load(i, options) end
- if options.create then return k end
+ if options.create then return v end
end
function mt.__newindex(t, k, v)
@@ -42,11 +46,7 @@ function M.Set:init(context, params)
mt.save(i, nil)
end
- function mt.contains(v)
- return find(
- node.BoundMember(self, pth.wildcard, params.field):normalize(v)
- ) and true or false
- end
+ function mt.contains(v) return find(v) and true or false end
local insert = mt.insert
function mt.insert(v) if not mt.contains(v) then insert(v) end end