Skip to content

Commit

Permalink
Fix IdxSegment item for paths with no root
Browse files Browse the repository at this point in the history
  • Loading branch information
fafhrd91 committed Apr 6, 2020
1 parent a7b6fa8 commit 740cb0f
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 5 deletions.
4 changes: 4 additions & 0 deletions ntex-router/CHANGES.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changes

## [0.3.2] - 2020-04-06

* Fix IdxSegment item for paths with no root

## [0.3.1] - 2020-04-06

* Fix url quoter
Expand Down
2 changes: 1 addition & 1 deletion ntex-router/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ntex-router"
version = "0.3.1"
version = "0.3.2"
authors = ["Nikolay Kim <[email protected]>"]
description = "Path router"
keywords = ["ntex"]
Expand Down
40 changes: 40 additions & 0 deletions ntex-router/src/resource.rs
Original file line number Diff line number Diff line change
Expand Up @@ -890,9 +890,49 @@ mod tests {
assert_eq!(tree.find(&mut Path::new("/user/profile")), Some(1));
assert_eq!(tree.find(&mut Path::new("/user/profile/profile")), None);

let tree = Tree::new(&ResourceDef::new("{id}"), 1);
assert_eq!(tree.find(&mut Path::new("profile")), Some(1));
assert_eq!(tree.find(&mut Path::new("2345")), Some(1));
assert_eq!(tree.find(&mut Path::new("/2345/")), None);
assert_eq!(tree.find(&mut Path::new("/2345/sdg")), None);

let tree = Tree::new(&ResourceDef::new("{user}/profile/{no}"), 1);
assert_eq!(tree.find(&mut Path::new("user/profile/123")), Some(1));
assert_eq!(tree.find(&mut Path::new("/user/profile/123")), Some(1));
assert_eq!(tree.find(&mut Path::new("/user/profile/p/test/")), None);

let tree = Tree::new(&ResourceDef::new("v{version}/resource/{id}/test"), 1);
assert_eq!(
tree.find(&mut Path::new("v1/resource/320120/test")),
Some(1)
);
assert_eq!(tree.find(&mut Path::new("v/resource/1/test")), None);

let mut resource = Path::new("v151/resource/adahg32/test");
assert_eq!(tree.find(&mut resource), Some(1));
assert_eq!(resource.get("version").unwrap(), "151");
assert_eq!(resource.get("id").unwrap(), "adahg32");

let re = ResourceDef::new("v/{id:[[:digit:]]{6}}");
let tree = Tree::new(&re, 1);
assert_eq!(tree.find(&mut Path::new("v/012345")), Some(1));
assert_eq!(tree.find(&mut Path::new("v/012345/")), None);
assert_eq!(tree.find(&mut Path::new("v/012345/index")), None);
assert_eq!(tree.find(&mut Path::new("v/012")), None);
assert_eq!(tree.find(&mut Path::new("v/01234567")), None);
assert_eq!(tree.find(&mut Path::new("v/XXXXXX")), None);

let mut resource = Path::new("v/012345");
assert_eq!(tree.find(&mut resource), Some(1));
assert_eq!(resource.get("id").unwrap(), "012345");

let re = ResourceDef::new("u/test/v{version}-no-{minor}xx/resource/{id}/{name}");
let tree = Tree::new(&re, 1);
let mut resource = Path::new("u/test/v1-no-3xx/resource/320120/name");
assert_eq!(tree.find(&mut resource), Some(1));
assert_eq!(resource.get("version").unwrap(), "1");
assert_eq!(resource.get("minor").unwrap(), "3");
assert_eq!(resource.get("id").unwrap(), "320120");
assert_eq!(resource.get("name").unwrap(), "name");
}
}
10 changes: 6 additions & 4 deletions ntex-router/src/tree.rs
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ impl Tree {
F: Fn(usize, &R) -> bool,
{
let path = resource.resource_path();
let base_skip = path.skip;
let mut base_skip = path.skip as isize;
let mut segments = mem::take(&mut path.segments);
let path = resource.path();

Expand Down Expand Up @@ -230,6 +230,7 @@ impl Tree {
let path = if path.starts_with('/') {
&path[1..]
} else {
base_skip -= 1;
path
};

Expand Down Expand Up @@ -267,6 +268,7 @@ impl Tree {
let path = if path.starts_with('/') {
&path[1..]
} else {
base_skip -= 1;
path
};

Expand Down Expand Up @@ -296,7 +298,7 @@ impl Tree {
mut skip: usize,
segments: &mut Vec<(&'static str, PathItem)>,
insensitive: bool,
base_skip: u16,
base_skip: isize,
) -> Option<(usize, usize)>
where
T: ResourcePath,
Expand Down Expand Up @@ -344,8 +346,8 @@ impl Tree {
PathItem::Segment(m.as_str().to_string())
} else {
PathItem::IdxSegment(
base_skip + (skip + m.start()) as u16,
base_skip + (skip + m.end()) as u16,
(base_skip + (skip + m.start()) as isize) as u16,
(base_skip + (skip + m.end()) as isize) as u16,
)
};
segments.push((name, item));
Expand Down

0 comments on commit 740cb0f

Please sign in to comment.