Sha256: 46c142f4fb8c9aacc9a58d052b369edc256f96371863662583209a5819e895ee

Contents?: true

Size: 1.78 KB

Versions: 3

Compression:

Stored size: 1.78 KB

Contents

module LoanCreator
  module BorrowerTimetable
    BORROWER_FINANCIAL_ATTRIBUTES = [
      :crd_beginning_of_period,
      :crd_end_of_period,
      :period_interests,
      :period_capital,
      :total_paid_capital_end_of_period,
      :total_paid_interests_end_of_period,
      :period_amount_to_pay
    ].freeze

    def borrower_timetable(*lenders_timetables)
      raise ArgumentError.new('Array of LoanCreator::Timetable expected') unless Array === lenders_timetables
      raise ArgumentError.new('At least one LoanCreator::Timetable expected') unless lenders_timetables.length > 0
      lenders_timetables.each do |lender_timetable|
        raise ArgumentError.new('Array of LoanCreator::Timetable expected') unless LoanCreator::Timetable === lender_timetable
      end

      borrower_timetable = LoanCreator::Timetable.new(
        starts_at: lenders_timetables.first.starts_at,
        period: lenders_timetables.first.period
      )

      # Borrower timetable is not concerned with computation-related value (delta, etc.),
      # thus we start with all values to zero, then we override only BORROWER_FINANCIAL_ATTRIBUTES.
      all_zero = LoanCreator::Term::ARGUMENTS.each_with_object({}) { |k, h| h[k] = bigd('0') }

      # Group lenders' terms by index
      transposed_terms = lenders_timetables.map(&:terms).transpose
      # For each term, sum each required element
      # First borrower's term contains the sums of lenders' first terms' elements (LoanCreator::Term::ARGUMENT), etc.
      transposed_terms.each do |arr|
        term = BORROWER_FINANCIAL_ATTRIBUTES.each_with_object({}) do |k, h|
          h[k] = arr.inject(bigd('0')) { |sum, tt| sum + tt.send(k) }
        end
        borrower_timetable << LoanCreator::Term.new(all_zero.merge(term))
      end
      borrower_timetable
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
loan_creator-0.2.0 lib/loan_creator/borrower_timetable.rb
loan_creator-0.2.1 lib/loan_creator/borrower_timetable.rb
loan_creator-0.2.2 lib/loan_creator/borrower_timetable.rb