From 5f4468ad1fc515aadd06cfcb59e26cc30c5ba6df Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 18 Aug 2019 12:58:09 -0400 Subject: run checks on refresh too --- src/checks.rs | 32 --------------------------- src/main.rs | 7 ++---- src/ynab/budget.rs | 65 +++++++++++++++++++++++++++++++++++++++++++----------- src/ynab/client.rs | 8 ++----- 4 files changed, 56 insertions(+), 56 deletions(-) delete mode 100644 src/checks.rs diff --git a/src/checks.rs b/src/checks.rs deleted file mode 100644 index dfd5362..0000000 --- a/src/checks.rs +++ /dev/null @@ -1,32 +0,0 @@ -pub fn run_checks(budget: &crate::ynab::Budget) { - check_reconciled(budget); - check_has_inflows(budget); -} - -fn check_reconciled(budget: &crate::ynab::Budget) { - let reconciled_amount: i64 = budget - .reimbursables() - .iter() - .filter(|t| t.reimbursed) - .map(|t| t.amount) - .sum(); - if reconciled_amount != 0 { - eprintln!( - "reconciled reimbursables don't sum to $0.00: ${}", - crate::ynab::format_amount(reconciled_amount) - ); - std::process::exit(1); - } -} - -fn check_has_inflows(budget: &crate::ynab::Budget) { - let txns = budget - .reimbursables() - .iter() - .filter(|t| !t.reimbursed && t.amount > 0) - .count(); - if txns == 0 { - eprintln!("no transactions to reconcile"); - std::process::exit(1); - } -} diff --git a/src/main.rs b/src/main.rs index 54a25b6..8a380e2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,3 @@ -mod checks; mod display; mod paths; mod views; @@ -12,10 +11,8 @@ fn main() { .unwrap() .read_to_string(&mut key) .unwrap(); - let client = ynab::Client::new(&key.trim()); - let budget = client.into_default_budget(); - - checks::run_checks(&budget); + let key = key.trim(); + let budget = ynab::Budget::new(&key); let mut app = cursive::Cursive::default(); let term_width = app.screen_size().x; diff --git a/src/ynab/budget.rs b/src/ynab/budget.rs index 1d3b80a..b11e72a 100644 --- a/src/ynab/budget.rs +++ b/src/ynab/budget.rs @@ -1,33 +1,39 @@ pub struct Budget { client: super::client::Client, - budget: ynab_api::models::BudgetDetail, + id: String, + name: String, reimbursables: Vec, } impl Budget { - pub fn new( - client: super::client::Client, - budget: ynab_api::models::BudgetDetail, - ) -> Self { + pub fn new(key: &str) -> Self { + let client = super::client::Client::new(key); + let budget = client.default_budget(); let reimbursables = Self::get_reimbursables(&budget); - Self { + let budget = Self { client, - budget, + id: budget.id.clone(), + name: budget.name.clone(), reimbursables, - } + }; + budget.check(); + budget } pub fn refresh(&mut self) { - self.budget = self.client.default_budget(); - self.reimbursables = Self::get_reimbursables(&self.budget) + let budget = self.client.default_budget(); + self.id = budget.id.clone(); + self.name = budget.name.clone(); + self.reimbursables = Self::get_reimbursables(&budget); + self.check(); } pub fn name(&self) -> String { - self.budget.name.clone() + self.name.clone() } pub fn id(&self) -> String { - self.budget.id.clone() + self.id.clone() } pub fn reimbursables(&self) -> &[super::transaction::Transaction] { @@ -49,7 +55,7 @@ impl Budget { }) .collect(), ); - self.client.update_transactions(&self.budget.id, to_update) + self.client.update_transactions(&self.id, to_update) } fn get_reimbursables( @@ -152,4 +158,37 @@ impl Budget { reimbursables.sort_by_cached_key(|t| t.date.clone()); reimbursables } + + fn check(&self) { + self.check_reconciled(); + self.check_has_inflows(); + } + + fn check_reconciled(&self) { + let reconciled_amount: i64 = self + .reimbursables() + .iter() + .filter(|t| t.reimbursed) + .map(|t| t.amount) + .sum(); + if reconciled_amount != 0 { + eprintln!( + "reconciled reimbursables don't sum to $0.00: ${}", + crate::ynab::format_amount(reconciled_amount) + ); + std::process::exit(1); + } + } + + fn check_has_inflows(&self) { + let txns = self + .reimbursables() + .iter() + .filter(|t| !t.reimbursed && t.amount > 0) + .count(); + if txns == 0 { + eprintln!("no transactions to reconcile"); + std::process::exit(1); + } + } } diff --git a/src/ynab/client.rs b/src/ynab/client.rs index 9e2d3ea..74445f2 100644 --- a/src/ynab/client.rs +++ b/src/ynab/client.rs @@ -19,7 +19,8 @@ impl Client { let budgets = self.api.budgets_api().get_budgets().unwrap().data.budgets; let budget = budgets.iter().next().unwrap(); - self.api + self + .api .budgets_api() .get_budget_by_id(&budget.id, 0) .unwrap() @@ -27,11 +28,6 @@ impl Client { .budget } - pub fn into_default_budget(self) -> super::budget::Budget { - let full_budget = self.default_budget(); - super::budget::Budget::new(self, full_budget) - } - pub fn update_transactions( &self, budget_id: &str, -- cgit v1.2.3