Automatically trim /
on Tera fn calls dealing with files
This commit is contained in:
parent
ae916eb6c5
commit
009d105210
|
@ -6,13 +6,14 @@ use std::path::{Path, PathBuf};
|
||||||
/// 1. base_path + path
|
/// 1. base_path + path
|
||||||
/// 2. base_path + static + path
|
/// 2. base_path + static + path
|
||||||
/// 3. base_path + content + path
|
/// 3. base_path + content + path
|
||||||
/// A path starting with @/ will replace it with `content/`
|
/// A path starting with @/ will replace it with `content/` and a path starting with `/` will have
|
||||||
|
/// it removed.
|
||||||
pub fn search_for_file(base_path: &Path, path: &str) -> Option<PathBuf> {
|
pub fn search_for_file(base_path: &Path, path: &str) -> Option<PathBuf> {
|
||||||
let search_paths = [base_path.join("static"), base_path.join("content")];
|
let search_paths = [base_path.join("static"), base_path.join("content")];
|
||||||
let actual_path = if path.starts_with("@/") {
|
let actual_path = if path.starts_with("@/") {
|
||||||
Cow::Owned(path.replace("@/", "content/"))
|
Cow::Owned(path.replace("@/", "content/"))
|
||||||
} else {
|
} else {
|
||||||
Cow::Borrowed(path)
|
Cow::Borrowed(path.trim_start_matches('/'))
|
||||||
};
|
};
|
||||||
let mut file_path = base_path.join(&*actual_path);
|
let mut file_path = base_path.join(&*actual_path);
|
||||||
let mut file_exists = file_path.exists();
|
let mut file_exists = file_path.exists();
|
||||||
|
|
|
@ -211,19 +211,29 @@ mod tests {
|
||||||
to_value("http://a-website.com/processed_images/32454a1e0243976c00.jpg").unwrap()
|
to_value("http://a-website.com/processed_images/32454a1e0243976c00.jpg").unwrap()
|
||||||
);
|
);
|
||||||
|
|
||||||
// 3. resizing an image in content starting with `@/`
|
// 3. resizing with an absolute path is the same as the above
|
||||||
args.insert("path".to_string(), to_value("@/gutenberg.jpg").unwrap());
|
args.insert("path".to_string(), to_value("/content/gutenberg.jpg").unwrap());
|
||||||
let data = static_fn.call(&args).unwrap().as_object().unwrap().clone();
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
data["static_path"],
|
data["static_path"],
|
||||||
to_value(&format!("{}", static_path.join("074e171855ee541800.jpg").display())).unwrap()
|
to_value(&format!("{}", static_path.join("32454a1e0243976c00.jpg").display())).unwrap()
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
data["url"],
|
data["url"],
|
||||||
to_value("http://a-website.com/processed_images/074e171855ee541800.jpg").unwrap()
|
to_value("http://a-website.com/processed_images/32454a1e0243976c00.jpg").unwrap()
|
||||||
);
|
);
|
||||||
|
|
||||||
// 4. resizing an image with a relative path not starting with static or content
|
// 4. resizing an image in content starting with `@/` is the same as 2 and 3
|
||||||
|
args.insert("path".to_string(), to_value("@/gutenberg.jpg").unwrap());
|
||||||
|
assert_eq!(
|
||||||
|
data["static_path"],
|
||||||
|
to_value(&format!("{}", static_path.join("32454a1e0243976c00.jpg").display())).unwrap()
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
data["url"],
|
||||||
|
to_value("http://a-website.com/processed_images/32454a1e0243976c00.jpg").unwrap()
|
||||||
|
);
|
||||||
|
|
||||||
|
// 5. resizing an image with a relative path not starting with static or content
|
||||||
args.insert("path".to_string(), to_value("gallery/asset.jpg").unwrap());
|
args.insert("path".to_string(), to_value("gallery/asset.jpg").unwrap());
|
||||||
let data = static_fn.call(&args).unwrap().as_object().unwrap().clone();
|
let data = static_fn.call(&args).unwrap().as_object().unwrap().clone();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
@ -234,10 +244,6 @@ mod tests {
|
||||||
data["url"],
|
data["url"],
|
||||||
to_value("http://a-website.com/processed_images/c8aaba7b0593a60b00.jpg").unwrap()
|
to_value("http://a-website.com/processed_images/c8aaba7b0593a60b00.jpg").unwrap()
|
||||||
);
|
);
|
||||||
|
|
||||||
// 5. resizing with an absolute path
|
|
||||||
args.insert("path".to_string(), to_value("/content/gutenberg.jpg").unwrap());
|
|
||||||
assert!(static_fn.call(&args).is_err());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: consider https://github.com/getzola/zola/issues/1161
|
// TODO: consider https://github.com/getzola/zola/issues/1161
|
||||||
|
@ -256,10 +262,12 @@ mod tests {
|
||||||
assert_eq!(data["height"], to_value(380).unwrap());
|
assert_eq!(data["height"], to_value(380).unwrap());
|
||||||
assert_eq!(data["width"], to_value(300).unwrap());
|
assert_eq!(data["width"], to_value(300).unwrap());
|
||||||
|
|
||||||
// 2. a call to something in `static` with an absolute path is not handled currently
|
// 2. a call to something in `static` with an absolute path is handled currently the same as the above
|
||||||
let mut args = HashMap::new();
|
let mut args = HashMap::new();
|
||||||
args.insert("path".to_string(), to_value("/static/gutenberg.jpg").unwrap());
|
args.insert("path".to_string(), to_value("/static/gutenberg.jpg").unwrap());
|
||||||
assert!(static_fn.call(&args).is_err());
|
let data = static_fn.call(&args).unwrap().as_object().unwrap().clone();
|
||||||
|
assert_eq!(data["height"], to_value(380).unwrap());
|
||||||
|
assert_eq!(data["width"], to_value(300).unwrap());
|
||||||
|
|
||||||
// 3. a call to something in `content` with a relative path
|
// 3. a call to something in `content` with a relative path
|
||||||
let mut args = HashMap::new();
|
let mut args = HashMap::new();
|
||||||
|
|
|
@ -622,14 +622,15 @@ mod tests {
|
||||||
let data = static_fn.call(&args).unwrap().as_str().unwrap().to_string();
|
let data = static_fn.call(&args).unwrap().as_str().unwrap().to_string();
|
||||||
assert_eq!(data, val);
|
assert_eq!(data, val);
|
||||||
|
|
||||||
// 3. path starting with @/
|
// 3. absolute path is the same
|
||||||
args.insert("path".to_string(), to_value("@/test.css").unwrap());
|
args.insert("path".to_string(), to_value("/content/test.css").unwrap());
|
||||||
let data = static_fn.call(&args).unwrap().as_str().unwrap().to_string();
|
let data = static_fn.call(&args).unwrap().as_str().unwrap().to_string();
|
||||||
assert_eq!(data, val);
|
assert_eq!(data, val);
|
||||||
|
|
||||||
// 4. absolute path does not work
|
// 4. path starting with @/
|
||||||
args.insert("path".to_string(), to_value("/test.css").unwrap());
|
args.insert("path".to_string(), to_value("@/test.css").unwrap());
|
||||||
assert!(static_fn.call(&args).is_err());
|
let data = static_fn.call(&args).unwrap().as_str().unwrap().to_string();
|
||||||
|
assert_eq!(data, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
Loading…
Reference in a new issue