ibandit 1.12.0 → 1.14.0

Sign up to get free protection for your applications and to get access to all the features.
data/ibandit.gemspec CHANGED
@@ -3,7 +3,7 @@
3
3
  require File.expand_path("lib/ibandit/version", __dir__)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
- gem.add_development_dependency "gc_ruboconfig", "~> 3.3.0"
6
+ gem.add_development_dependency "gc_ruboconfig", "~> 3.6.2"
7
7
  gem.add_development_dependency "nokogiri", "~> 1.6"
8
8
  gem.add_development_dependency "pry", "~> 0.13"
9
9
  gem.add_development_dependency "pry-byebug", "~> 3.9"
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Ibandit
4
4
  module Constants
5
- CONSTRUCTABLE_IBAN_COUNTRY_CODES = %w[AT BE BG CY CZ DE DK EE ES FI FR GB GR
5
+ CONSTRUCTABLE_IBAN_COUNTRY_CODES = %w[AT BE BG CY CZ DE DK EE ES FI FO FR GB GL GR
6
6
  HR HU IE IS IT LT LU LV MC MT NL NO PL
7
7
  PT RO SE SI SK SM].freeze
8
8
 
data/lib/ibandit/iban.rb CHANGED
@@ -64,7 +64,7 @@ module Ibandit
64
64
  def account_number_suffix
65
65
  return nil unless country_code == "NZ"
66
66
 
67
- @account_number[7..-1]
67
+ @account_number[7..]
68
68
  end
69
69
 
70
70
  def local_check_digits
@@ -77,7 +77,7 @@ module Ibandit
77
77
  end
78
78
 
79
79
  def bban
80
- iban[4..-1] unless iban.nil?
80
+ iban[4..] unless iban.nil?
81
81
  end
82
82
 
83
83
  def pseudo_iban
@@ -89,7 +89,7 @@ module Ibandit
89
89
 
90
90
  def self.required_fields(country_code)
91
91
  case country_code
92
- when "AT", "CY", "CZ", "DE", "DK", "EE", "FI", "HR", "IS", "LT", "LU",
92
+ when "AT", "CY", "CZ", "DE", "DK", "EE", "FO", "FI", "GL", "HR", "IS", "LT", "LU",
93
93
  "LV", "NL", "NO", "PL", "RO", "SE", "SI", "SK"
94
94
  %i[bank_code account_number]
95
95
  when "BE"
@@ -132,7 +132,7 @@ module Ibandit
132
132
  if local_details[:branch_code]
133
133
  local_details[:branch_code]
134
134
  elsif cleaned_bank_code.length > 3
135
- cleaned_bank_code[3..-1]
135
+ cleaned_bank_code[3..]
136
136
  end
137
137
  account_number =
138
138
  if local_details[:account_number].length >= 7
@@ -247,7 +247,7 @@ module Ibandit
247
247
 
248
248
  bank_code = cleaned_account_number.slice(0, 4)
249
249
  branch_code = cleaned_account_number.slice(4, 4)
250
- account_number = cleaned_account_number[8..-1]
250
+ account_number = cleaned_account_number[8..]
251
251
  end
252
252
 
253
253
  {
@@ -265,7 +265,7 @@ module Ibandit
265
265
  if %w[4 5 6].include?(local_details[:bank_code][0])
266
266
  [
267
267
  local_details[:account_number][0],
268
- local_details[:account_number][1..-1].rjust(7, "0"),
268
+ local_details[:account_number][1..].rjust(7, "0"),
269
269
  ].join
270
270
  else
271
271
  local_details[:account_number].rjust(8, "0")
@@ -294,7 +294,7 @@ module Ibandit
294
294
  bank_code = local_details[:bank_code]
295
295
  else
296
296
  bic = Ibandit.find_bic("GB", branch_code)
297
- bank_code = bic.nil? ? nil : bic.slice(0, 4)
297
+ bank_code = bic&.slice(0, 4)
298
298
  end
299
299
 
300
300
  account_number = local_details[:account_number].gsub(/[-\s]/, "")
@@ -359,7 +359,7 @@ module Ibandit
359
359
  bank_code = local_details[:bank_code]
360
360
  else
361
361
  bic = Ibandit.find_bic("IE", branch_code)
362
- bank_code = bic.nil? ? nil : bic.slice(0, 4)
362
+ bank_code = bic&.slice(0, 4)
363
363
  end
364
364
 
365
365
  account_number = local_details[:account_number].gsub(/[-\s]/, "")
@@ -380,7 +380,7 @@ module Ibandit
380
380
  bank_code, *parts = local_details[:account_number].split("-")
381
381
  else
382
382
  bank_code = local_details[:account_number].slice(0, 4)
383
- parts = Array(local_details[:account_number][4..-1])
383
+ parts = Array(local_details[:account_number][4..])
384
384
  end
385
385
 
386
386
  {
@@ -426,7 +426,7 @@ module Ibandit
426
426
  bank_code = local_details[:bank_code]
427
427
  else
428
428
  bic = Ibandit.find_bic("MT", branch_code)
429
- bank_code = bic.nil? ? nil : bic.slice(0, 4)
429
+ bank_code = bic&.slice(0, 4)
430
430
  end
431
431
 
432
432
  account_number = local_details[:account_number].gsub(/[-\s]/, "")
@@ -457,7 +457,7 @@ module Ibandit
457
457
  cleaned_acct_number = local_details[:account_number].gsub(/[-.\s]/, "")
458
458
 
459
459
  bank_code = cleaned_acct_number.slice(0, 4)
460
- account_number = cleaned_acct_number[4..-1]
460
+ account_number = cleaned_acct_number[4..]
461
461
  end
462
462
 
463
463
  {
@@ -483,7 +483,7 @@ module Ibandit
483
483
  cleaned_account_number = local_details[:account_number].tr("-", "")
484
484
  bank_code = cleaned_account_number.slice(0, 2)
485
485
  branch_code = cleaned_account_number.slice(2, 4)
486
- account_number = cleaned_account_number[6..-1]
486
+ account_number = cleaned_account_number[6..]
487
487
  end
488
488
 
489
489
  if account_number && account_number.length == 9
@@ -515,7 +515,7 @@ module Ibandit
515
515
  cleaned_acct_number = local_details[:account_number].gsub(/\s/, "")
516
516
 
517
517
  bank_code = cleaned_acct_number.slice(2, 8)
518
- account_number = cleaned_acct_number[10..-1]
518
+ account_number = cleaned_acct_number[10..]
519
519
  end
520
520
 
521
521
  {
@@ -73,7 +73,7 @@ module Ibandit
73
73
 
74
74
  def serial_number
75
75
  serial_number = if @branch_code.nil?
76
- cleaned_account_number[clearing_code_length..-1]
76
+ cleaned_account_number[clearing_code_length..]
77
77
  else
78
78
  cleaned_account_number
79
79
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ibandit
4
- VERSION = "1.12.0"
4
+ VERSION = "1.14.0"
5
5
  end
@@ -210,6 +210,54 @@ describe Ibandit::IBANAssembler do
210
210
  end
211
211
  end
212
212
 
213
+ context "with FO as the country_code" do
214
+ let(:args) do
215
+ { country_code: "FO",
216
+ bank_code: "1199",
217
+ account_number: "0003179680" }
218
+ end
219
+
220
+ it { is_expected.to eq("FO9111990003179680") }
221
+
222
+ it_behaves_like "allows round trips", "FO91 1199 0003 1796 80"
223
+
224
+ context "without a bank_code" do
225
+ before { args.delete(:bank_code) }
226
+
227
+ it { is_expected.to be_nil }
228
+ end
229
+
230
+ context "without an account_number" do
231
+ before { args.delete(:account_number) }
232
+
233
+ it { is_expected.to be_nil }
234
+ end
235
+ end
236
+
237
+ context "with GL as the country_code" do
238
+ let(:args) do
239
+ { country_code: "GL",
240
+ bank_code: "1199",
241
+ account_number: "0003179680" }
242
+ end
243
+
244
+ it { is_expected.to eq("GL9111990003179680") }
245
+
246
+ it_behaves_like "allows round trips", "GL91 1199 0003 1796 80"
247
+
248
+ context "without a bank_code" do
249
+ before { args.delete(:bank_code) }
250
+
251
+ it { is_expected.to be_nil }
252
+ end
253
+
254
+ context "without an account_number" do
255
+ before { args.delete(:account_number) }
256
+
257
+ it { is_expected.to be_nil }
258
+ end
259
+ end
260
+
213
261
  context "with EE as the country_code" do
214
262
  let(:args) do
215
263
  {
@@ -946,8 +946,8 @@ describe Ibandit::IBAN do
946
946
  iban.valid_check_digits?
947
947
  expect(iban.errors).
948
948
  to include(check_digits: "Verifique os dígitos. A verificação " \
949
- "do módulo falhou. '82' esperados, '12'" \
950
- " recebidos.")
949
+ "do módulo falhou. '82' esperados, '12' " \
950
+ "recebidos.")
951
951
  end
952
952
  end
953
953
 
@@ -1070,8 +1070,8 @@ describe Ibandit::IBAN do
1070
1070
  iban.valid_length?
1071
1071
  expect(iban.errors).
1072
1072
  to include(length: "La longueur ne correspond pas à la " \
1073
- "spécification SWIFT (22 caractères attendus," \
1074
- " 20 reçus)")
1073
+ "spécification SWIFT (22 caractères attendus, " \
1074
+ "20 reçus)")
1075
1075
  end
1076
1076
  end
1077
1077
 
@@ -1089,9 +1089,9 @@ describe Ibandit::IBAN do
1089
1089
  it "sets errors on the IBAN" do
1090
1090
  iban.valid_length?
1091
1091
  expect(iban.errors).
1092
- to include(length: "O comprimento não corresponde à especificação" \
1093
- " do código SWIFT (22 caracteres esperados, 20" \
1094
- " recebidos)")
1092
+ to include(length: "O comprimento não corresponde à especificação " \
1093
+ "do código SWIFT (22 caracteres esperados, 20 " \
1094
+ "recebidos)")
1095
1095
  end
1096
1096
  end
1097
1097
 
@@ -1099,8 +1099,8 @@ describe Ibandit::IBAN do
1099
1099
  it "sets errors on the IBAN" do
1100
1100
  iban.valid_length?
1101
1101
  expect(iban.errors).
1102
- to include(length: "La longitud no coincide con la especificación" \
1103
- " SWIFT (se esperaban 22 caracteres, pero se " \
1102
+ to include(length: "La longitud no coincide con la especificación " \
1103
+ "SWIFT (se esperaban 22 caracteres, pero se " \
1104
1104
  "han recibido 20)")
1105
1105
  end
1106
1106
  end
@@ -1148,8 +1148,8 @@ describe Ibandit::IBAN do
1148
1148
  it "sets errors on the IBAN" do
1149
1149
  iban.valid_length?
1150
1150
  expect(iban.errors).
1151
- to include(length: "Længden modsvarer ikke SWIFT-specifikation" \
1152
- " (forventede 22 tegn, modtog 20)")
1151
+ to include(length: "Længden modsvarer ikke SWIFT-specifikation " \
1152
+ "(forventede 22 tegn, modtog 20)")
1153
1153
  end
1154
1154
  end
1155
1155
 
@@ -1588,8 +1588,8 @@ describe Ibandit::IBAN do
1588
1588
  it "sets errors on the IBAN" do
1589
1589
  iban.valid_account_number_length?
1590
1590
  expect(iban.errors).
1591
- to include(account_number: "je napačne dolžine (biti mora 8" \
1592
- " znakov)")
1591
+ to include(account_number: "je napačne dolžine (biti mora 8 " \
1592
+ "znakov)")
1593
1593
  end
1594
1594
  end
1595
1595
 
@@ -1597,8 +1597,8 @@ describe Ibandit::IBAN do
1597
1597
  it "sets errors on the IBAN" do
1598
1598
  iban.valid_account_number_length?
1599
1599
  expect(iban.errors).
1600
- to include(account_number: "har forkert længde (skulle være 8" \
1601
- " tegn)")
1600
+ to include(account_number: "har forkert længde (skulle være 8 " \
1601
+ "tegn)")
1602
1602
  end
1603
1603
  end
1604
1604
 
@@ -3396,7 +3396,7 @@ describe Ibandit::IBAN do
3396
3396
  end
3397
3397
 
3398
3398
  context "for a valid Italian IBAN" do
3399
- let(:iban_code) { "IT40 S054 2811 1010 0000 0123 456" }
3399
+ let(:iban_code) { "IT60 X054 2811 1010 0000 0123 456" }
3400
3400
 
3401
3401
  it { is_expected.to be_valid }
3402
3402
  end
@@ -3946,6 +3946,66 @@ describe Ibandit::IBAN do
3946
3946
 
3947
3947
  it { is_expected.to_not be_valid }
3948
3948
  end
3949
+
3950
+ context "with a valid LY iban" do
3951
+ let(:iban_code) { "LY83002048000020100120361" }
3952
+
3953
+ it { is_expected.to be_valid }
3954
+ end
3955
+
3956
+ context "with an invalid LY iban" do
3957
+ let(:iban_code) { "LY830020480000120361" }
3958
+
3959
+ it { is_expected.to_not be_valid }
3960
+ end
3961
+
3962
+ context "with a valid SD iban" do
3963
+ let(:iban_code) { "SD2129010501234001" }
3964
+
3965
+ it { is_expected.to be_valid }
3966
+ end
3967
+
3968
+ context "with an invalid SD iban" do
3969
+ let(:iban_code) { "SD21290104001" }
3970
+
3971
+ it { is_expected.to_not be_valid }
3972
+ end
3973
+
3974
+ context "with a valid BI iban" do
3975
+ let(:iban_code) { "BI4210000100010000332045181" }
3976
+
3977
+ it { is_expected.to be_valid }
3978
+ end
3979
+
3980
+ context "with an invalid BI iban" do
3981
+ let(:iban_code) { "BI4210000100000332045181" }
3982
+
3983
+ it { is_expected.to_not be_valid }
3984
+ end
3985
+
3986
+ context "with a valid DJ iban" do
3987
+ let(:iban_code) { "DJ2100010000000154000100186" }
3988
+
3989
+ it { is_expected.to be_valid }
3990
+ end
3991
+
3992
+ context "with an invalid DJ iban" do
3993
+ let(:iban_code) { "DJ2100010000000000100186" }
3994
+
3995
+ it { is_expected.to_not be_valid }
3996
+ end
3997
+
3998
+ context "with a valid RU iban" do
3999
+ let(:iban_code) { "RU0204452560040702810412345678901" }
4000
+
4001
+ it { is_expected.to be_valid }
4002
+ end
4003
+
4004
+ context "with an invalid RU iban" do
4005
+ let(:iban_code) { "RU1704452522540817810538091310419" }
4006
+
4007
+ it { is_expected.to_not be_valid }
4008
+ end
3949
4009
  end
3950
4010
 
3951
4011
  describe "#local_check_digits" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ibandit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.0
4
+ version: 1.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GoCardless
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-06 00:00:00.000000000 Z
11
+ date: 2023-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gc_ruboconfig
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 3.3.0
19
+ version: 3.6.2
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 3.3.0
26
+ version: 3.6.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: nokogiri
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -174,6 +174,7 @@ files:
174
174
  - data/raw/BLZ2.txt
175
175
  - data/raw/IBANSTRUCTURE.xml
176
176
  - data/raw/IBAN_Registry.txt
177
+ - data/raw/pseudo_ibans.yml
177
178
  - data/raw/structure_additions.yml
178
179
  - data/raw/swedish_bank_lookup.yml
179
180
  - data/structures.yml
@@ -227,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
227
228
  - !ruby/object:Gem::Version
228
229
  version: '0'
229
230
  requirements: []
230
- rubygems_version: 3.3.3
231
+ rubygems_version: 3.4.6
231
232
  signing_key:
232
233
  specification_version: 4
233
234
  summary: Convert national banking details into IBANs, and vice-versa.