Skip to content
This repository has been archived by the owner on Oct 22, 2019. It is now read-only.

Commit

Permalink
Renamed RepaymentStrategy to PaymentCalculator in part to reflect its…
Browse files Browse the repository at this point in the history
… increased responsibility.
  • Loading branch information
floehopper committed May 31, 2011
1 parent 0550817 commit 5a2bb63
Show file tree
Hide file tree
Showing 6 changed files with 10 additions and 10 deletions.
8 changes: 4 additions & 4 deletions app/loan.rb
@@ -1,9 +1,9 @@
class Loan

def initialize(simulator, lender_account, borrower_account, amount, rate, term, repayment_strategy_class)
def initialize(simulator, lender_account, borrower_account, amount, rate, term, payment_calculator_class)
@simulator, @lender_account, @borrower_account, @rate, @term = simulator, lender_account, borrower_account, rate, term
@principal_account = Account.new(amount)
@repayment_strategy = repayment_strategy_class.new(@principal_account, @rate, @term)
@payment_calculator = payment_calculator_class.new(@principal_account, @rate, @term)
end

def draw_down
Expand All @@ -13,8 +13,8 @@ def draw_down
end

def process_monthly_payment
Transfer.new(@borrower_account, @lender_account, @repayment_strategy.total_monthly_payment).complete
@principal_account.debit(@repayment_strategy.monthly_principal_repayment)
Transfer.new(@borrower_account, @lender_account, @payment_calculator.total_monthly_payment).complete
@principal_account.debit(@payment_calculator.monthly_principal_repayment)
@term.reduce_months_by(1)
end

Expand Down
4 changes: 2 additions & 2 deletions app/repayment_strategy.rb → app/payment_calculator.rb
@@ -1,4 +1,4 @@
module RepaymentStrategy
module PaymentCalculator

class InterestOnly

Expand All @@ -20,7 +20,7 @@ def total_monthly_payment

end

class Standard < InterestOnly
class Repayment < InterestOnly

def initialize(principal_account, rate, term)
super
Expand Down
2 changes: 1 addition & 1 deletion test/interest_only_loan_test.rb
Expand Up @@ -6,7 +6,7 @@ def setup
@amount = Money.parse("100,000.00")
@lender_account = Account.new
@borrower_account = Account.new
loan = Loan.new(@simulator, @lender_account, @borrower_account, @amount, InterestRate::Simple.new(Percentage.new(6)), Term.in_years(25), RepaymentStrategy::InterestOnly)
loan = Loan.new(@simulator, @lender_account, @borrower_account, @amount, InterestRate::Simple.new(Percentage.new(6)), Term.in_years(25), PaymentCalculator::InterestOnly)
@simulator.schedule_at(0) { loan.draw_down }
@expected_monthly_payment = Money.parse("500.00")
end
Expand Down
2 changes: 1 addition & 1 deletion test/interest_only_tracker_loan_test.rb
Expand Up @@ -8,7 +8,7 @@ def setup
@borrower_account = Account.new
base_rate = InterestRate::Simple.new(Percentage.new(4))
rate = InterestRate::Tracker.new(base_rate, Percentage.new(2))
loan = Loan.new(@simulator, @lender_account, @borrower_account, @amount, rate, Term.in_years(25), RepaymentStrategy::InterestOnly)
loan = Loan.new(@simulator, @lender_account, @borrower_account, @amount, rate, Term.in_years(25), PaymentCalculator::InterestOnly)
@simulator.schedule_at(0) { loan.draw_down }
@simulator.schedule_at(151) { base_rate.increase_by(Percentage.new(3)) }
@expected_low_monthly_payment = Money.parse("500.00")
Expand Down
2 changes: 1 addition & 1 deletion test/repayment_loan_test.rb
Expand Up @@ -6,7 +6,7 @@ def setup
@amount = Money.parse("100,000.00")
@lender_account = Account.new
@borrower_account = Account.new
loan = Loan.new(@simulator, @lender_account, @borrower_account, @amount, InterestRate::Simple.new(Percentage.new(6)), Term.in_years(25), RepaymentStrategy::Standard)
loan = Loan.new(@simulator, @lender_account, @borrower_account, @amount, InterestRate::Simple.new(Percentage.new(6)), Term.in_years(25), PaymentCalculator::Repayment)
@simulator.schedule_at(0) { loan.draw_down }
@expected_monthly_payment = Money.parse("644.30")
end
Expand Down
2 changes: 1 addition & 1 deletion test/repayment_tracker_loan_test.rb
Expand Up @@ -8,7 +8,7 @@ def setup
@borrower_account = Account.new
base_rate = InterestRate::Simple.new(Percentage.new(4))
rate = InterestRate::Tracker.new(base_rate, Percentage.new(2))
loan = Loan.new(@simulator, @lender_account, @borrower_account, @amount, rate, Term.in_years(25), RepaymentStrategy::Standard)
loan = Loan.new(@simulator, @lender_account, @borrower_account, @amount, rate, Term.in_years(25), PaymentCalculator::Repayment)
@simulator.schedule_at(0) { loan.draw_down }
@simulator.schedule_at(151) { base_rate.increase_by(Percentage.new(3)) }
@expected_low_monthly_payment = Money.parse("644.30")
Expand Down

0 comments on commit 5a2bb63

Please sign in to comment.