Module: Ibandit::SwedishDetailsConverter
- Defined in:
- lib/ibandit/swedish_details_converter.rb
Class Method Summary collapse
- .convert(account_number) ⇒ Object
- .valid_bank_code?(bank_code: bank_code, account_number: account_number) ⇒ Boolean
- .valid_length?(bank_code: bank_code, account_number: account_number) ⇒ Boolean
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(account_number) cleaned_account_number = account_number.gsub(/[-.\s]/, '').gsub(/\A0+/, '') bank_info = bank_info_for(cleaned_account_number.slice(0, 4)) if bank_info.nil? return { bank_code: nil, account_number: cleaned_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 = cleaned_account_number.slice(0, clearing_code_length) serial_number = cleaned_account_number[clearing_code_length..-1] if bank_info.fetch(:zerofill_serial_number) serial_number = serial_number.rjust(serial_number_length, '0') end iban_account_number = 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: iban_account_number } end |
.valid_bank_code?(bank_code: bank_code, account_number: account_number) ⇒ 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: account_number) possible_bank_infos = possible_bank_info_for( bank_code: bank_code, account_number: account_number ) possible_bank_infos.any? end |
.valid_length?(bank_code: bank_code, account_number: account_number) ⇒ 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: account_number) return unless valid_bank_code?( bank_code: bank_code, account_number: account_number ) cleaned_account_number = account_number.gsub(/\A0+/, '') possible_bank_infos = possible_bank_info_for( bank_code: bank_code, account_number: 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) cleaned_account_number = cleaned_account_number.rjust(serial_number_length, '0') end cleaned_account_number.length == length end end |