ibandit 1.13.0 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +5 -0
- data/bin/build_structure_file.rb +221 -114
- data/data/raw/IBANSTRUCTURE.xml +1134 -292
- data/data/raw/IBAN_Registry.txt +51 -48
- data/data/raw/pseudo_ibans.yml +52 -0
- data/data/raw/structure_additions.yml +29 -1
- data/data/structures.yml +524 -25
- data/lib/ibandit/constants.rb +1 -1
- data/lib/ibandit/iban.rb +2 -2
- data/lib/ibandit/iban_assembler.rb +1 -1
- data/lib/ibandit/local_details_cleaner.rb +7 -7
- data/lib/ibandit/sweden/local_details_converter.rb +1 -1
- data/lib/ibandit/version.rb +1 -1
- data/spec/ibandit/iban_assembler_spec.rb +48 -0
- data/spec/ibandit/iban_spec.rb +61 -1
- metadata +3 -2
data/lib/ibandit/constants.rb
CHANGED
@@ -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
|
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
|
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
|
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
|
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
|
268
|
+
local_details[:account_number][1..].rjust(7, "0"),
|
269
269
|
].join
|
270
270
|
else
|
271
271
|
local_details[:account_number].rjust(8, "0")
|
@@ -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
|
383
|
+
parts = Array(local_details[:account_number][4..])
|
384
384
|
end
|
385
385
|
|
386
386
|
{
|
@@ -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
|
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
|
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
|
518
|
+
account_number = cleaned_acct_number[10..]
|
519
519
|
end
|
520
520
|
|
521
521
|
{
|
data/lib/ibandit/version.rb
CHANGED
@@ -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
|
{
|
data/spec/ibandit/iban_spec.rb
CHANGED
@@ -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) { "
|
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.
|
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: 2023-03-
|
11
|
+
date: 2023-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gc_ruboconfig
|
@@ -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
|