From 4f27dc2f18185311a0fcb6c0ed5433bb21add373 Mon Sep 17 00:00:00 2001 From: Vincent Prouillet Date: Mon, 15 May 2017 16:26:11 +0900 Subject: [PATCH] Move find_content_components to content mod --- src/content/page.rs | 4 ++-- src/content/section.rs | 3 ++- src/content/utils.rs | 31 ++++++++++++++++++++++++++++++- src/utils.rs | 36 +----------------------------------- 4 files changed, 35 insertions(+), 39 deletions(-) diff --git a/src/content/page.rs b/src/content/page.rs index 64cd1f5e..ee6faf03 100644 --- a/src/content/page.rs +++ b/src/content/page.rs @@ -12,8 +12,8 @@ use errors::{Result, ResultExt}; use config::Config; use front_matter::{PageFrontMatter, split_page_content}; use markdown::markdown_to_html; -use utils::{read_file, find_content_components}; -use content::utils::{find_related_assets, get_reading_analytics}; +use utils::{read_file}; +use content::utils::{find_related_assets, find_content_components, get_reading_analytics}; diff --git a/src/content/section.rs b/src/content/section.rs index 876432c3..29f6578a 100644 --- a/src/content/section.rs +++ b/src/content/section.rs @@ -8,9 +8,10 @@ use serde::ser::{SerializeStruct, self}; use config::Config; use front_matter::{SectionFrontMatter, split_section_content}; use errors::{Result, ResultExt}; -use utils::{read_file, find_content_components}; +use utils::{read_file}; use markdown::markdown_to_html; use content::Page; +use content::utils::find_content_components; #[derive(Clone, Debug, PartialEq)] diff --git a/src/content/utils.rs b/src/content/utils.rs index 6f2be61a..f74e9496 100644 --- a/src/content/utils.rs +++ b/src/content/utils.rs @@ -33,13 +33,36 @@ pub fn get_reading_analytics(content: &str) -> (usize, usize) { } +/// Takes a full path to a .md and returns only the components after the first `content` directory +/// Will not return the filename as last component +pub fn find_content_components>(path: P) -> Vec { + let path = path.as_ref(); + let mut is_in_content = false; + let mut components = vec![]; + + for section in path.parent().unwrap().components() { + let component = section.as_ref().to_string_lossy(); + + if is_in_content { + components.push(component.to_string()); + continue; + } + + if component == "content" { + is_in_content = true; + } + } + + components +} + #[cfg(test)] mod tests { use std::fs::File; use tempdir::TempDir; - use super::{find_related_assets, get_reading_analytics}; + use super::{find_related_assets, find_content_components, get_reading_analytics}; #[test] fn can_find_related_assets() { @@ -74,4 +97,10 @@ mod tests { assert_eq!(word_count, 2000); assert_eq!(reading_time, 10); } + + #[test] + fn can_find_content_components() { + let res = find_content_components("/home/vincent/code/site/content/posts/tutorials/python.md"); + assert_eq!(res, ["posts".to_string(), "tutorials".to_string()]); + } } diff --git a/src/utils.rs b/src/utils.rs index 13e1c684..bb2c9836 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -4,6 +4,7 @@ use std::path::Path; use errors::{Result, ResultExt}; +/// Create a file with the content given pub fn create_file>(path: P, content: &str) -> Result<()> { let mut file = File::create(&path)?; file.write_all(content.as_bytes())?; @@ -32,38 +33,3 @@ pub fn read_file>(path: P) -> Result { Ok(content) } - - -/// Takes a full path to a .md and returns only the components after the first `content` directory -/// Will not return the filename as last component -pub fn find_content_components>(path: P) -> Vec { - let path = path.as_ref(); - let mut is_in_content = false; - let mut components = vec![]; - - for section in path.parent().unwrap().components() { - let component = section.as_ref().to_string_lossy(); - - if is_in_content { - components.push(component.to_string()); - continue; - } - - if component == "content" { - is_in_content = true; - } - } - - components -} - -#[cfg(test)] -mod tests { - use super::{find_content_components}; - - #[test] - fn test_find_content_components() { - let res = find_content_components("/home/vincent/code/site/content/posts/tutorials/python.md"); - assert_eq!(res, ["posts".to_string(), "tutorials".to_string()]); - } -}