]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Add selector transformer `filter_method`
authorVsevolod Stakhov <vsevolod@rspamd.com>
Tue, 31 Oct 2023 15:18:22 +0000 (15:18 +0000)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Tue, 31 Oct 2023 15:18:22 +0000 (15:18 +0000)
lualib/lua_selectors/transforms.lua

index 4b839de289cc6a9dde2f1dcd6270eaaa2a167d86..6c6bc7117b049b7d4c97f4b05ffb5596dcff7260 100644 (file)
@@ -542,7 +542,28 @@ Empty string comes the first argument or 'true', non-empty string comes nil]],
       return res, 'string_list'
     end,
     ['description'] = 'Apply a list of method calls to the userdata object',
-  }
+  },
+  -- Apply method to list of userdata and use it as a filter, excluding elements for which method returns false/nil
+  ['filter_method'] = {
+    ['types'] = {
+      ['userdata_list'] = true
+    },
+    ['process'] = function(inp, t, args)
+      local meth = args[1]
+
+      if not meth then
+        logger.errx('invalid method name: %s', args[1])
+        return nil
+      end
+
+      return fun.filter(function(val)
+        return val[meth](val)
+      end, inp), 'userdata_list'
+    end,
+    ['description'] = 'Apply method to list of userdata and use it as a filter,' ..
+        ' excluding elements for which method returns false/nil',
+    ['args_schema'] = { ts.string }
+  },
 }
 
 transform_function.match = transform_function.regexp