mirror of
https://github.com/ntex-rs/ntex.git
synced 2025-04-04 21:37:58 +03:00
Fix IdxSegment item for paths with no root
This commit is contained in:
parent
a7b6fa83a5
commit
740cb0fd33
4 changed files with 51 additions and 5 deletions
|
@ -1,5 +1,9 @@
|
||||||
# Changes
|
# Changes
|
||||||
|
|
||||||
|
## [0.3.2] - 2020-04-06
|
||||||
|
|
||||||
|
* Fix IdxSegment item for paths with no root
|
||||||
|
|
||||||
## [0.3.1] - 2020-04-06
|
## [0.3.1] - 2020-04-06
|
||||||
|
|
||||||
* Fix url quoter
|
* Fix url quoter
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "ntex-router"
|
name = "ntex-router"
|
||||||
version = "0.3.1"
|
version = "0.3.2"
|
||||||
authors = ["Nikolay Kim <fafhrd91@gmail.com>"]
|
authors = ["Nikolay Kim <fafhrd91@gmail.com>"]
|
||||||
description = "Path router"
|
description = "Path router"
|
||||||
keywords = ["ntex"]
|
keywords = ["ntex"]
|
||||||
|
|
|
@ -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")), Some(1));
|
||||||
assert_eq!(tree.find(&mut Path::new("/user/profile/profile")), None);
|
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);
|
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/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);
|
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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -200,7 +200,7 @@ impl Tree {
|
||||||
F: Fn(usize, &R) -> bool,
|
F: Fn(usize, &R) -> bool,
|
||||||
{
|
{
|
||||||
let path = resource.resource_path();
|
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 mut segments = mem::take(&mut path.segments);
|
||||||
let path = resource.path();
|
let path = resource.path();
|
||||||
|
|
||||||
|
@ -230,6 +230,7 @@ impl Tree {
|
||||||
let path = if path.starts_with('/') {
|
let path = if path.starts_with('/') {
|
||||||
&path[1..]
|
&path[1..]
|
||||||
} else {
|
} else {
|
||||||
|
base_skip -= 1;
|
||||||
path
|
path
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -267,6 +268,7 @@ impl Tree {
|
||||||
let path = if path.starts_with('/') {
|
let path = if path.starts_with('/') {
|
||||||
&path[1..]
|
&path[1..]
|
||||||
} else {
|
} else {
|
||||||
|
base_skip -= 1;
|
||||||
path
|
path
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -296,7 +298,7 @@ impl Tree {
|
||||||
mut skip: usize,
|
mut skip: usize,
|
||||||
segments: &mut Vec<(&'static str, PathItem)>,
|
segments: &mut Vec<(&'static str, PathItem)>,
|
||||||
insensitive: bool,
|
insensitive: bool,
|
||||||
base_skip: u16,
|
base_skip: isize,
|
||||||
) -> Option<(usize, usize)>
|
) -> Option<(usize, usize)>
|
||||||
where
|
where
|
||||||
T: ResourcePath,
|
T: ResourcePath,
|
||||||
|
@ -344,8 +346,8 @@ impl Tree {
|
||||||
PathItem::Segment(m.as_str().to_string())
|
PathItem::Segment(m.as_str().to_string())
|
||||||
} else {
|
} else {
|
||||||
PathItem::IdxSegment(
|
PathItem::IdxSegment(
|
||||||
base_skip + (skip + m.start()) as u16,
|
(base_skip + (skip + m.start()) as isize) as u16,
|
||||||
base_skip + (skip + m.end()) as u16,
|
(base_skip + (skip + m.end()) as isize) as u16,
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
segments.push((name, item));
|
segments.push((name, item));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue