class Dolla::ReferenceNumber

Constants

BANK_FILLER
REFERENCE_NUMBER_FORMAT

Attributes

amount[R]
due_date[R]
id[R]
request[R]

Public Class Methods

new(payment_id:, due_date:, amount:) click to toggle source
# File lib/dolla/reference_number.rb, line 11
def initialize(payment_id:, due_date:, amount:)
  @id = payment_id
  @due_date = due_date
  @amount = amount
end

Public Instance Methods

number() click to toggle source
# File lib/dolla/reference_number.rb, line 17
def number
  final_reference_number_format % [ref, ref_hash]
end

Private Instance Methods

final_reference_number_format() click to toggle source
# File lib/dolla/reference_number.rb, line 54
def final_reference_number_format
  REFERENCE_NUMBER_FORMAT[:final]
end
hash_amount() click to toggle source
# File lib/dolla/reference_number.rb, line 46
def hash_amount
  PaymentSlip::Amount.new( amount ).hash
end
hash_date() click to toggle source
# File lib/dolla/reference_number.rb, line 42
def hash_date
  PaymentSlip::DueDate.new( due_date ).hash
end
initial_reference_number_format() click to toggle source
# File lib/dolla/reference_number.rb, line 50
def initial_reference_number_format
  REFERENCE_NUMBER_FORMAT[:initial]
end
ref() click to toggle source
# File lib/dolla/reference_number.rb, line 23
def ref
  initial_reference_number_format % [id, hash_date, hash_amount, 2]
end
ref_hash() click to toggle source
# File lib/dolla/reference_number.rb, line 27
def ref_hash
  numbers_container = []

  BANK_FILLER.cycle do |filler|
    numbers_container << filler
    break if  numbers_container.length >= length
  end

  numbers_container.reverse!

  (0..length-1).inject(0) do |sum, position|
    sum += (ref[ position, 1 ].to_i * numbers_container[ position ].to_i)
  end % 97 + 1
end