Class: LoanCreator::Common

Inherits:
Object
  • Object
show all
Extended by:
BorrowerTimetable
Defined in:
lib/loan_creator/common.rb

Direct Known Subclasses

Bullet, InFine, Linear, Standard, UncapitalizedBullet

Constant Summary collapse

PERIODS_IN_MONTHS =
{
  month: 1,
  quarter: 3,
  semester: 6,
  year: 12
}.freeze
REQUIRED_ATTRIBUTES =
[
  :period,
  :amount,
  :annual_interests_rate,
  :starts_on,
  :duration_in_periods
].freeze
OPTIONAL_ATTRIBUTES =
{
  # attribute: default_value
  deferred_in_periods: 0,
  interests_start_date: nil,
  initial_values: {}
}.freeze

Constants included from BorrowerTimetable

BorrowerTimetable::BORROWER_FINANCIAL_ATTRIBUTES

Class Method Summary collapse

Instance Method Summary collapse

Methods included from BorrowerTimetable

borrower_timetable

Constructor Details

#initialize(**options) ⇒ Common

Returns a new instance of Common.



30
31
32
33
34
35
36
37
38
# File 'lib/loan_creator/common.rb', line 30

def initialize(**options)
  @options = options
  require_attributes
  reinterpret_attributes
  set_attributes
  validate_attributes
  set_initial_values
  validate_initial_values
end

Class Method Details

.bigd(value) ⇒ Object



54
55
56
# File 'lib/loan_creator/common.rb', line 54

def self.bigd(value)
  BigDecimal(value, BIG_DECIMAL_DIGITS)
end

Instance Method Details

#bigd(value) ⇒ Object



58
59
60
# File 'lib/loan_creator/common.rb', line 58

def bigd(value)
  self.class.bigd(value)
end

#lender_timetableObject

Raises:

  • (NotImplementedError)


50
51
52
# File 'lib/loan_creator/common.rb', line 50

def lender_timetable
  raise NotImplementedError
end

#periodic_interests_rateObject



45
46
47
48
# File 'lib/loan_creator/common.rb', line 45

def periodic_interests_rate
  @periodic_interests_rate ||=
    periodic_interests_rate_percentage.div(100, BIG_DECIMAL_DIGITS)
end

#periodic_interests_rate_percentageObject



40
41
42
43
# File 'lib/loan_creator/common.rb', line 40

def periodic_interests_rate_percentage
  @periodic_interests_rate_percentage ||=
    annual_interests_rate.div(12 / PERIODS_IN_MONTHS[period], BIG_DECIMAL_DIGITS)
end