class Ibanizator::BankDb

Attributes

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(a_bank_code) click to toggle source
# File lib/ibanizator/bank_db.rb, line 20
def bank_by_bank_code(a_bank_code)
  @bank_code_index.fetch(sanitize_bank_code(a_bank_code)) do
    error! "No bank for bank code `#{a_bank_code}` found!"
  end
end
bank_by_bic(a_bic) click to toggle source
# File lib/ibanizator/bank_db.rb, line 14
def bank_by_bic(a_bic)
  @bic_index.fetch(a_bic.to_s) do
    error! "No such bank for BIC `#{a_bic}` found!"
  end
end

Private Instance Methods

error!(message) click to toggle source
# File lib/ibanizator/bank_db.rb, line 44
def error!(message)
  raise BankNotFoundError, message
end
populate_known_banks!() click to toggle source
# File lib/ibanizator/bank_db.rb, line 28
def populate_known_banks! # rubocop:disable Metrics/AbcSize
  File.open(File.expand_path('../../../db/blz.txt', __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)
    @known_banks << bank
    @bic_index[bank.bic] = bank
    @bank_code_index[bank.bank_code] = bank
  end
end
sanitize_bank_code(a_bank_code) click to toggle source
# File lib/ibanizator/bank_db.rb, line 40
def sanitize_bank_code(a_bank_code)
  a_bank_code.to_s.gsub(/\s+/, '')
end