mirror of
https://gitea.invidious.io/iv-org/shard-radix.git
synced 2024-08-15 00:43:21 +00:00
Merge pull request #10 from luislavena/fix-shared-key-branching
Allow insert paths with shared keys unordered
This commit is contained in:
commit
07f7576895
3 changed files with 39 additions and 2 deletions
|
@ -5,6 +5,8 @@ This project aims to comply with [Semantic Versioning](http://semver.org/),
|
||||||
so please check *Changed* and *Removed* notes before upgrading.
|
so please check *Changed* and *Removed* notes before upgrading.
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
### Fixed
|
||||||
|
- Do not force adding paths with shared named parameter in an specific order (@jwoertink)
|
||||||
|
|
||||||
## [0.3.1] - 2016-07-29
|
## [0.3.1] - 2016-07-29
|
||||||
### Added
|
### Added
|
||||||
|
|
|
@ -233,6 +233,30 @@ module Radix
|
||||||
tree.root.children[0].children[0].key.should eq("/:subcategory")
|
tree.root.children[0].children[0].key.should eq("/:subcategory")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "does allow same named parameter in different order of insertion" do
|
||||||
|
tree = Tree(Symbol).new
|
||||||
|
tree.add "/members/:id/edit", :member_edit
|
||||||
|
tree.add "/members/export", :members_export
|
||||||
|
tree.add "/members/:id/videos", :member_videos
|
||||||
|
|
||||||
|
# /members/
|
||||||
|
# +-export (:members_export)
|
||||||
|
# \-:id/
|
||||||
|
# +-videos (:members_videos)
|
||||||
|
# \-edit (:members_edit)
|
||||||
|
tree.root.key.should eq("/members/")
|
||||||
|
tree.root.children.size.should eq(2)
|
||||||
|
|
||||||
|
# first level children nodes
|
||||||
|
tree.root.children[0].key.should eq("export")
|
||||||
|
tree.root.children[1].key.should eq(":id/")
|
||||||
|
|
||||||
|
# inner children
|
||||||
|
nodes = tree.root.children[1].children
|
||||||
|
nodes[0].key.should eq("videos")
|
||||||
|
nodes[1].key.should eq("edit")
|
||||||
|
end
|
||||||
|
|
||||||
it "does not allow different named parameters sharing same level" do
|
it "does not allow different named parameters sharing same level" do
|
||||||
tree = Tree(Symbol).new
|
tree = Tree(Symbol).new
|
||||||
tree.add "/", :root
|
tree.add "/", :root
|
||||||
|
|
|
@ -374,7 +374,18 @@ module Radix
|
||||||
count
|
count
|
||||||
end
|
end
|
||||||
|
|
||||||
# :nodoc:
|
# Internal: Compares *path* against *key* for differences until the
|
||||||
|
# following criteria is met:
|
||||||
|
#
|
||||||
|
# - End of *path* or *key* is reached.
|
||||||
|
# - A separator (`/`) is found.
|
||||||
|
# - A character between *path* or *key* differs
|
||||||
|
#
|
||||||
|
# ```
|
||||||
|
# _same_key?("foo", "bar") # => false (mismatch at 1st character)
|
||||||
|
# _same_key?("foo/bar", "foo/baz") # => true (only `foo` is compared)
|
||||||
|
# _same_key?("zipcode", "zip") # => false (`zip` is shorter)
|
||||||
|
# ```
|
||||||
private def _same_key?(path, key)
|
private def _same_key?(path, key)
|
||||||
path_reader = Char::Reader.new(path)
|
path_reader = Char::Reader.new(path)
|
||||||
key_reader = Char::Reader.new(key)
|
key_reader = Char::Reader.new(key)
|
||||||
|
@ -392,7 +403,7 @@ module Radix
|
||||||
key_reader.next_char
|
key_reader.next_char
|
||||||
end
|
end
|
||||||
|
|
||||||
(!key_reader.has_next? && !different) &&
|
(!different) &&
|
||||||
(path_reader.current_char == '/' || !path_reader.has_next?)
|
(path_reader.current_char == '/' || !path_reader.has_next?)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue