From ed52028907d845d373c185131ea319833d4a812d Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 19 Aug 2019 16:21:42 +0100 Subject: [PATCH] [Feature] Selectors: Add `specific_urls` extractor --- lualib/lua_selectors/extractors.lua | 17 +++++++++++++++++ test/lua/unit/selectors.lua | 12 ++++++++++++ 2 files changed, 29 insertions(+) diff --git a/lualib/lua_selectors/extractors.lua b/lualib/lua_selectors/extractors.lua index a3fda891d..993169708 100644 --- a/lualib/lua_selectors/extractors.lua +++ b/lualib/lua_selectors/extractors.lua @@ -278,6 +278,23 @@ e.g. `by_hostname`]], If no arguments specified, returns list of url objects. Otherwise, calls a specific method, e.g. `get_tld`]], }, + -- Get specific urls + ['specific_urls'] = { + ['get_value'] = function(task, args) + local params = args[1] or {} + params.task = task + local urls = lua_util.extract_specific_urls(params) + return urls,'userdata_list' + end, + ['description'] = [[Get most specific urls. Arguments are equal to the Lua API function]], + ['args_schema'] = {ts.shape{ + limit = ts.number + ts.string / tonumber, + esld_limit = (ts.number + ts.string / tonumber):is_optional(), + prefix = ts.string:is_optional(), + need_emails = (ts.boolean + ts.string / lua_util.toboolean):is_optional(), + ignore_redirected = (ts.boolean + ts.string / lua_util.toboolean):is_optional(), + }} + }, -- Get all emails ['emails'] = { ['get_value'] = function(task, args) diff --git a/test/lua/unit/selectors.lua b/test/lua/unit/selectors.lua index f1a06af30..924c94c48 100644 --- a/test/lua/unit/selectors.lua +++ b/test/lua/unit/selectors.lua @@ -151,6 +151,18 @@ context("Selectors test", function() selector = "emails", expect = {{"mailto://test@example.net"}}}, + ["specific_urls"] = { + selector = "specific_urls({limit = 1})", + expect = {{"http://example.net"}}}, + + ["specific_urls + emails"] = { + selector = "specific_urls({need_emails = true, limit = 2})", + expect = {{"http://example.net", "mailto://test@example.net"}}}, + + ["specific_urls + emails limit"] = { + selector = "specific_urls({need_emails = true, limit = 1})", + expect = {{"http://example.net"}}}, + ["pool_var str, default type"] = { selector = [[pool_var("str_var")]], expect = {"str 1"}}, -- 2.39.5