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 | |
| 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.
| -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") ); } |
