Module: Ibandit::SwedishDetailsConverter

Defined in:
lib/ibandit/swedish_details_converter.rb

Class Method Summary collapse

Class Method Details

.convert(account_number) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/ibandit/swedish_details_converter.rb', line 3

def self.convert()
   =
    .gsub(/[-.\s]/, '').gsub(/\A0+/, '')

  bank_info = bank_info_for(.slice(0, 4))

  if bank_info.nil?
    return { bank_code: nil,
             account_number: .rjust(17, '0') }
  end

  clearing_code_length = bank_info.fetch(:clearing_code_length)
  serial_number_length = bank_info.fetch(:serial_number_length)

  clearing_code = .slice(0, clearing_code_length)
  serial_number = [clearing_code_length..-1]

  if bank_info.fetch(:zerofill_serial_number)
    serial_number = serial_number.rjust(serial_number_length, '0')
  end

   =
    if bank_info.fetch(:include_clearing_code)
      (clearing_code + serial_number).rjust(17, '0')
    else
      serial_number.rjust(17, '0')
    end

  {
    bank_code: bank_info.fetch(:bank_code).to_s,
    account_number: 
  }
end

.valid_bank_code?(bank_code: bank_code, account_number: account_number) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
40
41
42
43
44
# File 'lib/ibandit/swedish_details_converter.rb', line 37

def self.valid_bank_code?(bank_code: bank_code,
                          account_number: )
  possible_bank_infos = possible_bank_info_for(
    bank_code: bank_code, account_number: 
  )

  possible_bank_infos.any?
end

.valid_length?(bank_code: bank_code, account_number: account_number) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/ibandit/swedish_details_converter.rb', line 46

def self.valid_length?(bank_code: bank_code, account_number: )
  return unless valid_bank_code?(
    bank_code: bank_code, account_number: 
  )

   = .gsub(/\A0+/, '')

  possible_bank_infos = possible_bank_info_for(
    bank_code: bank_code, account_number: 
  )

  possible_bank_infos.any? do |bank|
    length = bank.fetch(:serial_number_length)
    length += bank[:clearing_code_length] if bank[:include_clearing_code]

    if bank[:zerofill_serial_number] && !bank[:include_clearing_code]
      serial_number_length = bank.fetch(:serial_number_length)
       =
        .rjust(serial_number_length, '0')
    end

    .length == length
  end
end