Skip to content

Commit 904799f

Browse files
authored
feat: support in operator when do route matching (#48)
fix #47 #30
1 parent 438b9af commit 904799f

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ local rx = radix.new({
171171
|> |greater than|{"arg_age", ">", 24}|
172172
|< |less than |{"arg_age", "<", 24}|
173173
|~~ |Regular match|{"arg_name", "~~", "[a-z]+"}|
174+
|in |find in array|{"arg_name", "in", {"1","2"}}|
174175

175176
[Back to TOC](#table-of-contents)
176177

lib/resty/radixtree.lua

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,17 @@ local function compare_gin(l_v, r_v, opts)
455455
return true
456456
end
457457

458+
local function in_array(l_v, r_v)
459+
if type(r_v) == "table" then
460+
for _,v in ipairs(r_v) do
461+
if v == l_v then
462+
return true
463+
end
464+
end
465+
end
466+
return false
467+
end
468+
458469
local compare_funcs = {
459470
["=="] = function (l_v, r_v)
460471
if type(r_v) == "number" then
@@ -491,6 +502,8 @@ local compare_funcs = {
491502
end
492503
return false
493504
end,
505+
["IN"] = in_array,
506+
["in"] = in_array,
494507
}
495508

496509

t/vars.t

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,3 +498,38 @@ GET /t?k=v
498498
[error]
499499
--- response_body
500500
metadata /aa
501+
502+
503+
504+
=== TEST 18: IN: hit
505+
--- config
506+
location /t {
507+
content_by_lua_block {
508+
local radix = require("resty.radixtree")
509+
local rx = radix.new({
510+
{
511+
paths = "/aa",
512+
metadata = "metadata /aa",
513+
vars = {
514+
{"arg_k", "in", {'1','2'}},
515+
},
516+
}
517+
})
518+
519+
ngx.say(rx:match("/aa", {vars = ngx.var}))
520+
ngx.say(rx:match("/aa", {vars = {arg_k='2'}}))
521+
ngx.say(rx:match("/aa", {vars = {arg_k='4'}}))
522+
ngx.say(rx:match("/aa", {vars = {}}))
523+
ngx.say(rx:match("/aa", {vars = {arg_k=nil}}))
524+
}
525+
}
526+
--- request
527+
GET /t?k=1
528+
--- no_error_log
529+
[error]
530+
--- response_body
531+
metadata /aa
532+
metadata /aa
533+
nil
534+
nil
535+
nil

0 commit comments

Comments
 (0)