From 1e410910e4de8a8dc7172d49b0b0b9eef823337d Mon Sep 17 00:00:00 2001 From: silasb Date: Sat, 8 Sep 2018 14:10:46 -0400 Subject: [PATCH 1/3] Catch all will continue checking key chars when path chars differ --- spec/radix/tree_spec.cr | 8 ++++++++ src/radix/tree.cr | 2 ++ 2 files changed, 10 insertions(+) diff --git a/spec/radix/tree_spec.cr b/spec/radix/tree_spec.cr index 8545f7a..dcf058e 100644 --- a/spec/radix/tree_spec.cr +++ b/spec/radix/tree_spec.cr @@ -442,6 +442,14 @@ module Radix result.params["trailing"].empty?.should be_true end + it "returns optional catch all globbing" do + tree = Tree(Symbol).new + tree.add "/members/*trailing", :members_catch_all + + result = tree.find("/members2") + result.found?.should be_false + end + it "does not find when catch all is not full match" do tree = Tree(Symbol).new tree.add "/", :root diff --git a/src/radix/tree.cr b/src/radix/tree.cr index 09d93fb..7c29d98 100644 --- a/src/radix/tree.cr +++ b/src/radix/tree.cr @@ -324,6 +324,8 @@ module Radix return end end + + return end # key still contains characters to walk From 2346312185376d3e38eb5543b0da5b3512c15d42 Mon Sep 17 00:00:00 2001 From: silasb Date: Sat, 8 Sep 2018 14:30:12 -0400 Subject: [PATCH 2/3] Fixing test description --- spec/radix/tree_spec.cr | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/spec/radix/tree_spec.cr b/spec/radix/tree_spec.cr index dcf058e..760de45 100644 --- a/spec/radix/tree_spec.cr +++ b/spec/radix/tree_spec.cr @@ -442,14 +442,6 @@ module Radix result.params["trailing"].empty?.should be_true end - it "returns optional catch all globbing" do - tree = Tree(Symbol).new - tree.add "/members/*trailing", :members_catch_all - - result = tree.find("/members2") - result.found?.should be_false - end - it "does not find when catch all is not full match" do tree = Tree(Symbol).new tree.add "/", :root @@ -459,6 +451,14 @@ module Radix result.found?.should be_false end + it "does not find when path search has been exhausted" do + tree = Tree(Symbol).new + tree.add "/members/*trailing", :members_catch_all + + result = tree.find("/members2") + result.found?.should be_false + end + it "does prefer specific path over catch all if both are present" do tree = Tree(Symbol).new tree.add "/members", :members From 728aea392ed14ac85a3b560123be4608bc93649f Mon Sep 17 00:00:00 2001 From: silasb Date: Sat, 8 Sep 2018 14:36:20 -0400 Subject: [PATCH 3/3] Explaination of why we are returning early --- src/radix/tree.cr | 1 + 1 file changed, 1 insertion(+) diff --git a/src/radix/tree.cr b/src/radix/tree.cr index 7c29d98..d6f4a96 100644 --- a/src/radix/tree.cr +++ b/src/radix/tree.cr @@ -325,6 +325,7 @@ module Radix end end + # path differs from key, no use searching anymore return end