class Amortizer::Loan
Attributes
decimals[RW]
Public Class Methods
new(principal, rate, term)
click to toggle source
# File lib/amortizer/loan.rb, line 9 def initialize(principal, rate, term) @principal = principal @rate = rate @term = term @valid = convert_to_bigdecimals && validate_inputs if inputs_are_numbers @rate /= (12 * 100) if @valid end
Public Instance Methods
payment()
click to toggle source
# File lib/amortizer/loan.rb, line 18 def payment calculate_payment if @valid end
Private Instance Methods
calculate_payment()
click to toggle source
# File lib/amortizer/loan.rb, line 24 def calculate_payment if @rate == 0 payment = (@principal / @term) else payment = @principal * ((@rate * ((1 + @rate) ** @term)) / (((1 + @rate) ** @term) - 1)) end payment.nan? ? nil : payment.to_f.round(@decimals || 2) end
convert_to_bigdecimals()
click to toggle source
# File lib/amortizer/loan.rb, line 42 def convert_to_bigdecimals @principal = @principal.to_d @rate = @rate.to_d @term = @term.to_d end
inputs_are_numbers()
click to toggle source
# File lib/amortizer/loan.rb, line 38 def inputs_are_numbers is_number?(@principal) && is_number?(@rate) && is_number?(@term) end
is_number?(input)
click to toggle source
# File lib/amortizer/loan.rb, line 34 def is_number?(input) true if Float(input) rescue false end
validate_inputs()
click to toggle source
# File lib/amortizer/loan.rb, line 48 def validate_inputs (@principal >= 0.0) && (@rate >= 0.0) && (@term >= 1.0) end