ibandit 1.13.0 → 1.15.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 +9 -0
- data/bin/build_structure_file.rb +221 -114
- data/config/locales/da.yml +7 -0
- data/config/locales/de.yml +7 -0
- data/config/locales/en.yml +7 -0
- data/config/locales/es.yml +7 -0
- data/config/locales/fr.yml +7 -0
- data/config/locales/it.yml +9 -1
- data/config/locales/nb.yml +7 -0
- data/config/locales/nl.yml +7 -0
- data/config/locales/pt.yml +7 -0
- data/config/locales/sl.yml +7 -0
- data/config/locales/sv.yml +7 -0
- 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 +5 -1
- data/lib/ibandit/iban.rb +13 -13
- 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/lib/ibandit.rb +1 -1
- data/spec/ibandit/iban_assembler_spec.rb +48 -0
- data/spec/ibandit/iban_spec.rb +375 -2212
- data/spec/spec_helper.rb +6 -44
- metadata +4 -3
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
|
|
@@ -25,5 +25,9 @@ module Ibandit
|
|
25
25
|
DECONSTRUCTABLE_IBAN_COUNTRY_CODES +
|
26
26
|
PSEUDO_IBAN_COUNTRY_CODES
|
27
27
|
).uniq
|
28
|
+
|
29
|
+
SUPPORTED_LOCALES = %w[
|
30
|
+
da de en es fr it nb nl pt sl sv
|
31
|
+
].freeze
|
28
32
|
end
|
29
33
|
end
|
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
|
@@ -247,7 +247,7 @@ module Ibandit
|
|
247
247
|
)
|
248
248
|
true
|
249
249
|
else
|
250
|
-
@errors[:bank_code] = Ibandit.translate(:
|
250
|
+
@errors[:bank_code] = Ibandit.translate(:has_invalid_format)
|
251
251
|
false
|
252
252
|
end
|
253
253
|
end
|
@@ -261,7 +261,7 @@ module Ibandit
|
|
261
261
|
)
|
262
262
|
true
|
263
263
|
else
|
264
|
-
@errors[:branch_code] = Ibandit.translate(:
|
264
|
+
@errors[:branch_code] = Ibandit.translate(:has_invalid_format)
|
265
265
|
false
|
266
266
|
end
|
267
267
|
end
|
@@ -274,7 +274,7 @@ module Ibandit
|
|
274
274
|
)
|
275
275
|
true
|
276
276
|
else
|
277
|
-
@errors[:account_number] = Ibandit.translate(:
|
277
|
+
@errors[:account_number] = Ibandit.translate(:has_invalid_format)
|
278
278
|
false
|
279
279
|
end
|
280
280
|
end
|
@@ -332,7 +332,7 @@ module Ibandit
|
|
332
332
|
def valid_swedish_swift_details?
|
333
333
|
unless Sweden::Validator.bank_code_exists?(swift_bank_code)
|
334
334
|
bank_code_field = bank_code.nil? ? :account_number : :bank_code
|
335
|
-
@errors[bank_code_field] = Ibandit.translate(:
|
335
|
+
@errors[bank_code_field] = Ibandit.translate(:bank_code_does_not_exist)
|
336
336
|
@errors.delete(:bank_code) if bank_code.nil?
|
337
337
|
return false
|
338
338
|
end
|
@@ -344,7 +344,7 @@ module Ibandit
|
|
344
344
|
)
|
345
345
|
|
346
346
|
unless length_valid
|
347
|
-
@errors[:account_number] = Ibandit.translate(:
|
347
|
+
@errors[:account_number] = Ibandit.translate(:has_invalid_length)
|
348
348
|
return false
|
349
349
|
end
|
350
350
|
|
@@ -353,7 +353,7 @@ module Ibandit
|
|
353
353
|
|
354
354
|
def valid_swedish_local_details?
|
355
355
|
unless Sweden::Validator.valid_clearing_code_length?(branch_code)
|
356
|
-
@errors[:branch_code] = Ibandit.translate(:
|
356
|
+
@errors[:branch_code] = Ibandit.translate(:has_invalid_clearing_code_length)
|
357
357
|
return false
|
358
358
|
end
|
359
359
|
|
@@ -363,7 +363,7 @@ module Ibandit
|
|
363
363
|
)
|
364
364
|
|
365
365
|
unless valid_serial_number
|
366
|
-
@errors[:account_number] = Ibandit.translate(:
|
366
|
+
@errors[:account_number] = Ibandit.translate(:has_invalid_serial_number)
|
367
367
|
return false
|
368
368
|
end
|
369
369
|
|
@@ -410,7 +410,7 @@ module Ibandit
|
|
410
410
|
(1 * (code_digits[2] + code_digits[5] + code_digits[8]))
|
411
411
|
) % 10
|
412
412
|
|
413
|
-
@errors[:bank_code] = Ibandit.translate(:
|
413
|
+
@errors[:bank_code] = Ibandit.translate(:failed_checksum_test) unless mod.zero?
|
414
414
|
|
415
415
|
mod.zero?
|
416
416
|
end
|
@@ -518,21 +518,21 @@ module Ibandit
|
|
518
518
|
def valid_modulus_check_bank_code?
|
519
519
|
return true if Ibandit.modulus_checker.valid_bank_code?(self)
|
520
520
|
|
521
|
-
@errors[:bank_code] = Ibandit.translate(:
|
521
|
+
@errors[:bank_code] = Ibandit.translate(:failed_modulus_check)
|
522
522
|
false
|
523
523
|
end
|
524
524
|
|
525
525
|
def valid_modulus_check_branch_code?
|
526
526
|
return true if Ibandit.modulus_checker.valid_branch_code?(self)
|
527
527
|
|
528
|
-
@errors[:branch_code] = Ibandit.translate(:
|
528
|
+
@errors[:branch_code] = Ibandit.translate(:failed_modulus_check)
|
529
529
|
false
|
530
530
|
end
|
531
531
|
|
532
532
|
def valid_modulus_check_account_number?
|
533
533
|
return true if Ibandit.modulus_checker.valid_account_number?(self)
|
534
534
|
|
535
|
-
@errors[:account_number] = Ibandit.translate(:
|
535
|
+
@errors[:account_number] = Ibandit.translate(:failed_modulus_check)
|
536
536
|
false
|
537
537
|
end
|
538
538
|
|
@@ -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
data/lib/ibandit.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
|
{
|