diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-11-14 12:51:24 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-11-14 14:58:29 +0200 |
commit | 37ab52a4c443db888820c49f6d3a463f13132b07 (patch) | |
tree | 4dd4ab59e02a7f8cc07320033664b7fcaab1b969 | |
parent | c79b24b8d0271de1131eb5dffe6c747a95f5b4a0 (diff) | |
download | acf2-37ab52a4c443db888820c49f6d3a463f13132b07.tar.bz2 acf2-37ab52a4c443db888820c49f6d3a463f13132b07.tar.xz |
model: function for checking set membership
-rw-r--r-- | acf2/model/init.lua | 1 | ||||
-rw-r--r-- | acf2/model/node.lua | 1 | ||||
-rw-r--r-- | acf2/model/set.lua | 13 |
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 |