diff options
| author | Teddy Wing | 2016-04-24 04:43:00 -0400 | 
|---|---|---|
| committer | Teddy Wing | 2016-04-24 04:43:00 -0400 | 
| commit | c67fdff0c3cda883b5bf577988e1c555931969cf (patch) | |
| tree | ac421a2ffecf10b6561378234b7b36d745e6e62c /src | |
| parent | 5059d4028035bc54849bf99dc3546363f5f28476 (diff) | |
| download | mutt-alias-auto-add-c67fdff0c3cda883b5bf577988e1c555931969cf.tar.bz2 | |
Move `find_alias_in_file` function to `Alias#find_in_file`
Makes more sense for this function to live in a method on `Alias`
because it operates directly on an alias.
Refactor our tests and code to support this new organisation.
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 50 | ||||
| -rw-r--r-- | src/tests.rs | 53 | 
2 files changed, 50 insertions, 53 deletions
| diff --git a/src/main.rs b/src/main.rs index 75e74ac..0004cc4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -53,6 +53,30 @@ impl Alias {          }      } +    fn find_in_file<P: AsRef<Path>>(&self, file: P) -> Result<Vec<String>, AliasSearchError> { +        let mut matches = Vec::new(); +        let f = try!(File::open(file)); +        let file = BufReader::new(&f); +        for line in file.lines() { +            let line = try!(line); +            let split: Vec<&str> = line.split_whitespace().collect(); + +            if line.contains(&self.email) { +                return Err(AliasSearchError::EmailExists) +            } + +            if split[1].starts_with(&self.alias) { +                matches.push(split[1].to_owned()); +            } +        } + +        if matches.is_empty() { +            Err(AliasSearchError::NotFound) +        } else { +            Ok(matches) +        } +    } +      fn write_to_file<P: AsRef<Path>>(&self, file: P) -> Result<(), io::Error> {          let mut f = try!(OpenOptions::new().append(true).open(file));          try!(f.write_all(format!("{}\n", self.to_string()).as_bytes())); @@ -68,7 +92,7 @@ impl Alias {  fn write_alias<P: AsRef<Path>>(from: String, file: P) -> Result<(), AliasSearchError> {      let mut alias = Alias::new(&from); -    let similar_aliases = try!(find_alias_in_file(&alias, &file)); +    let similar_aliases = try!(alias.find_in_file(&file));      alias.update_alias_id(similar_aliases);      try!(alias.write_to_file(&file));      Ok(()) @@ -134,30 +158,6 @@ impl PartialEq<AliasSearchError> for AliasSearchError {      }  } -fn find_alias_in_file<P: AsRef<Path>>(alias: &Alias, file: P) -> Result<Vec<String>, AliasSearchError> { -    let mut matches = Vec::new(); -    let f = try!(File::open(file)); -    let file = BufReader::new(&f); -    for line in file.lines() { -        let line = try!(line); -        let split: Vec<&str> = line.split_whitespace().collect(); - -        if line.contains(&alias.email) { -            return Err(AliasSearchError::EmailExists) -        } - -        if split[1].starts_with(&alias.alias) { -            matches.push(split[1].to_owned()); -        } -    } - -    if matches.is_empty() { -        Err(AliasSearchError::NotFound) -    } else { -        Ok(matches) -    } -} -  fn print_usage(program: &str) {      println!("Usage: {} FILE", program);  } diff --git a/src/tests.rs b/src/tests.rs index 223c6ae..88f2a3b 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -1,7 +1,7 @@  use std::fs::{self, File};  use std::io::Read; -use super::{Alias, AliasSearchError, find_alias_in_file}; +use super::{Alias, AliasSearchError};  #[test]  fn new_alias_with_only_email() { @@ -45,50 +45,47 @@ fn new_alias_with_special_characters() {  #[test] -fn find_alias_in_file_email_already_exists() { +fn alias_find_in_file_email_already_exists() { +    let alias = Alias { +        alias: "farnsworth-hubert".to_owned(), +        name: "Hubert Farnsworth".to_owned(), +        email: "<professor@planetexpress.com>".to_owned() +    }; +      assert_eq!(          Err(AliasSearchError::EmailExists), -        find_alias_in_file( -            &Alias { -                alias: "farnsworth-hubert".to_owned(), -                name: "Hubert Farnsworth".to_owned(), -                email: "<professor@planetexpress.com>".to_owned() -            }, -            "./testdata/aliases" -        ) +        alias.find_in_file("./testdata/aliases")      );  }  #[test] -fn find_alias_in_file_alias_is_new() { +fn alias_find_in_file_alias_is_new() { +    let alias = Alias { +        alias: "fry-philip".to_owned(), +        name: "Philip Fry".to_owned(), +        email: "<fry@planetexpress.com>".to_owned() +    }; +      assert_eq!(          Err(AliasSearchError::NotFound), -        find_alias_in_file( -            &Alias { -                alias: "fry-philip".to_owned(), -                name: "Philip Fry".to_owned(), -                email: "<fry@planetexpress.com>".to_owned() -            }, -            "./testdata/aliases" -        ) +        alias.find_in_file("./testdata/aliases")      );  }  #[test] -fn find_alias_in_file_finds_a_match() { +fn alias_find_in_file_finds_a_match() { +    let alias = Alias { +        alias: "farnsworth-hubert".to_owned(), +        name: "Hubert Farnsworth".to_owned(), +        email: "<goodnewseveryone@planetexpress.com>".to_owned() +    }; +      assert_eq!(          Ok(vec![              "farnsworth-hubert".to_owned(),              "farnsworth-hubert-2".to_owned()          ]), -        find_alias_in_file( -            &Alias { -                alias: "farnsworth-hubert".to_owned(), -                name: "Hubert Farnsworth".to_owned(), -                email: "<goodnewseveryone@planetexpress.com>".to_owned() -            }, -            "./testdata/aliases" -        ) +        alias.find_in_file("./testdata/aliases")      );  } | 
