summaryrefslogtreecommitdiffstats
path: root/acf2/model
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-11-14 12:51:24 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-11-14 14:58:29 +0200
commit37ab52a4c443db888820c49f6d3a463f13132b07 (patch)
tree4dd4ab59e02a7f8cc07320033664b7fcaab1b969 /acf2/model
parentc79b24b8d0271de1131eb5dffe6c747a95f5b4a0 (diff)
downloadacf2-37ab52a4c443db888820c49f6d3a463f13132b07.tar.bz2
acf2-37ab52a4c443db888820c49f6d3a463f13132b07.tar.xz
model: function for checking set membership
Diffstat (limited to 'acf2/model')
-rw-r--r--acf2/model/init.lua1
-rw-r--r--acf2/model/node.lua1
-rw-r--r--acf2/model/set.lua13
3 files changed, 12 insertions, 3 deletions
diff --git a/acf2/model/init.lua b/acf2/model/init.lua
index 94526db..05f103e 100644
--- a/acf2/model/init.lua
+++ b/acf2/model/init.lua
@@ -32,6 +32,7 @@ for _, m in ipairs{
'List',
'Set',
'TreeNode',
+ 'contains',
'has_permission',
'insert',
'meta',
diff --git a/acf2/model/node.lua b/acf2/model/node.lua
index d66f4f3..d014b80 100644
--- a/acf2/model/node.lua
+++ b/acf2/model/node.lua
@@ -245,6 +245,7 @@ end
for _, mf in ipairs{
'addr',
+ 'contains',
'has_permission',
'insert',
'meta',
diff --git a/acf2/model/set.lua b/acf2/model/set.lua
index 215056e..9cd3b4a 100644
--- a/acf2/model/set.lua
+++ b/acf2/model/set.lua
@@ -6,8 +6,9 @@ See LICENSE file for license details
local M = {}
local TreeNode = require('acf2.model.field').TreeNode
-local npairs = require('acf2.model.node').pairs
+local node = require('acf2.model.node')
local object = require('acf2.object')
+local pth = require('acf2.path')
M.Set = object.class(require('acf2.model.node').List)
@@ -17,7 +18,7 @@ function M.Set:init(context, params)
object.super(self, M.Set):init(context, params)
local function find(value)
- for i, member in npairs(self) do
+ for i, member in node.pairs(self) do
if member == value then return i end
end
end
@@ -39,8 +40,14 @@ function M.Set:init(context, params)
mt.save(i, nil)
end
+ function mt.contains(v)
+ return find(
+ node.BoundMember(self, pth.wildcard, params.field):_validate(v)
+ ) and true or false
+ end
+
local insert = mt.insert
- function mt.insert(v) if not find(v) then insert(v) end end
+ function mt.insert(v) if not mt.contains(v) then insert(v) end end
end