class Doughnut::Expenses

Attributes

inflation_rate[RW]
monthly_expenses[RW]

Public Class Methods

new() click to toggle source
# File lib/doughnut/retirement_calculator/expenses.rb, line 7
def initialize
  @monthly_expenses = 2500
  @inflation_rate = 0.0322
end

Public Instance Methods

future_expenses(death_date, discount_rate) click to toggle source
# File lib/doughnut/retirement_calculator/expenses.rb, line 20
def future_expenses(death_date, discount_rate)
  output = []
  (Date.today..death_date).each do |mydate|
    output << present_value(mydate, discount_rate) if is_last_day_of_month(mydate)
  end
  output
end
total_expenses(death_date, discount_rate) click to toggle source
# File lib/doughnut/retirement_calculator/expenses.rb, line 12
def total_expenses(death_date, discount_rate)
  output = 0
  future_expenses(death_date, discount_rate).each do |h|
    output += h[:expense]
  end
  output
end

Private Instance Methods

discount_factor(mydate, discount_rate) click to toggle source
# File lib/doughnut/retirement_calculator/expenses.rb, line 38
def discount_factor(mydate, discount_rate)
  t = (mydate - Date.today)/30
  ((1 + @inflation_rate/12)/(1 + discount_rate/12))**t
end
is_last_day_of_month(mydate) click to toggle source
# File lib/doughnut/retirement_calculator/expenses.rb, line 30
def is_last_day_of_month(mydate)
  mydate.month != mydate.next_day.month
end
present_value(mydate, discount_rate) click to toggle source
# File lib/doughnut/retirement_calculator/expenses.rb, line 34
def present_value(mydate, discount_rate)
  { date: mydate, expense: @monthly_expenses*discount_factor(mydate, discount_rate) }
end