Merge pull request #30 from luislavena/fix/partial-shared-key-glob

Correct lookup with shared key and glob
This commit is contained in:
Luis Lavena 2021-01-30 22:39:31 -03:00 committed by GitHub
commit f8df18baf1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 6 deletions

View file

@ -6,6 +6,9 @@ so please check *Changed* and *Removed* notes before upgrading.
## [Unreleased]
### Fixed
- Correct lookup issue caused by partial shared key with glob [#23](https://github.com/luislavena/radix/issues/23)
### Removed
- Remove `Radix::Result#key` since exposes internal details about structure (breaking change)

View file

@ -451,6 +451,19 @@ module Radix
result.params.has_key?("anything").should be_true
result.params["anything"].should eq("cancelled")
end
it "does prefer root catch all over specific partially shared key" do
tree = Tree(Symbol).new
tree.add "/*anything", :root_catch_all
tree.add "/robots.txt", :robots
tree.add "/resources", :resources
result = tree.find("/reviews")
result.found?.should be_true
result.payload.should eq(:root_catch_all)
result.params.has_key?("anything").should be_true
result.params["anything"].should eq("reviews")
end
end
context "dealing with named parameters" do

View file

@ -315,13 +315,17 @@ module Radix
node.children.each do |child|
# check if child key is a named parameter, catch all or shares parts
# with new path
if (child.key[0]? == '*' || child.key[0]? == ':') ||
_shared_key?(new_path, child.key)
# consider this node for key but don't use payload
result.use node, payload: false
if (child.glob? || child.named?) || _shared_key?(new_path, child.key)
# traverse branch to determine if valid
find new_path, result, child
return
if result.found?
# stop iterating over nodes
return
else
# move to next child
next
end
end
end