class FortuneTeller::SpendingStrategy

The spending strategy being used when simulating with FortuneTeller

Public Instance Methods

resolution_transforms(state:) click to toggle source
# File lib/fortuneteller/spending_strategy.rb, line 4
def resolution_transforms(state:)
  transforms = []
  reader = state_reader
  12.times do |i|
    date = determine_transform_date(state, i)
    data = reader.read(date)
    next unless data.strategy == :exact
    amount = data.amount.on(date) - determine_take_home_pay(state, i)
    transforms.push(gen_transform(date, amount)) if amount.positive?
  end
  transforms
end

Private Instance Methods

determine_take_home_pay(state, index) click to toggle source
# File lib/fortuneteller/spending_strategy.rb, line 31
def determine_take_home_pay(state, index)
  c = state.cashflow
  merged = state.class.cashflow_base
  merged.merge!(c[:primary][index]).merge!(c[:partner][index])
  merged.line_items[:take_home_pay]
end
determine_transform_date(state, index) click to toggle source
# File lib/fortuneteller/spending_strategy.rb, line 27
def determine_transform_date(state, index)
  Date.new(state.from.year, (index + 1), 1)
end
gen_transform(date, amount) click to toggle source
# File lib/fortuneteller/spending_strategy.rb, line 19
def gen_transform(date, amount)
  self.class::Transform.new(
    holder: :joint,
    date: date,
    withdrawal: amount
  )
end