aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTeddy Wing2016-04-24 04:43:00 -0400
committerTeddy Wing2016-04-24 04:43:00 -0400
commitc67fdff0c3cda883b5bf577988e1c555931969cf (patch)
treeac421a2ffecf10b6561378234b7b36d745e6e62c /src
parent5059d4028035bc54849bf99dc3546363f5f28476 (diff)
downloadmutt-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.rs50
-rw-r--r--src/tests.rs53
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")
);
}