class Ibanizator::BankDb

Attributes

bank_code_index[R]
bic_index[R]
known_banks[R]

Public Class Methods

new() click to toggle source
# File lib/ibanizator/bank_db.rb, line 7
def initialize
  @known_banks = []
  @bic_index = {}
  @bank_code_index = {}
  populate_known_banks!
end

Public Instance Methods

bank_by_bank_code(bank_code) click to toggle source
# File lib/ibanizator/bank_db.rb, line 20
def bank_by_bank_code(bank_code)
  @bank_code_index.fetch(sanitize_bank_code(bank_code)) do
    error!("No bank for bank_code: #{bank_code} found")
  end
end
bank_by_bic(bic) click to toggle source
# File lib/ibanizator/bank_db.rb, line 14
def bank_by_bic(bic)
  @bic_index.fetch(bic.to_s) do
    error!("No bank for bic: #{bic} found")
  end
end

Private Instance Methods

add_bank_to_indices(bank) click to toggle source
# File lib/ibanizator/bank_db.rb, line 50
def add_bank_to_indices(bank)
  @known_banks << bank

  @bic_index[bank.bic] = bank
  if optional_branch_code?(bank.bic)
    @bic_index[bank.bic.gsub(/XXX$/, '')] = bank
  end

  return if bank_exists_and_not_favored?(bank.bank_code, bank.bic)
  @bank_code_index[bank.bank_code] = bank
end
bank_exists_and_not_favored?(bank_code, bic) click to toggle source
# File lib/ibanizator/bank_db.rb, line 66
def bank_exists_and_not_favored?(bank_code, bic)
  @bank_code_index.key?(bank_code) && !optional_branch_code?(bic)
end
error!(message) click to toggle source
# File lib/ibanizator/bank_db.rb, line 46
def error!(message)
  raise BankNotFoundError, message
end
optional_branch_code?(bic) click to toggle source
# File lib/ibanizator/bank_db.rb, line 62
def optional_branch_code?(bic)
  bic.end_with?('XXX')
end
populate_known_banks!() click to toggle source
# File lib/ibanizator/bank_db.rb, line 28
def populate_known_banks!
  file = File.expand_path('../../db/blz.txt', __dir__)

  File.open(file, 'r').each_line do |line|
    code, _, _, _, _, name, _, bic = line.unpack 'A8A1A58A5A35A27A5A11'
    next if bic.empty?

    name.force_encoding('iso-8859-1').encode!('utf-8')
    bank = Bank.new(bic, name, code)

    add_bank_to_indices(bank)
  end
end
sanitize_bank_code(bank_code) click to toggle source
# File lib/ibanizator/bank_db.rb, line 42
def sanitize_bank_code(bank_code)
  bank_code.to_s.gsub(/\s+/, '')
end