ibandit 1.19.0 → 1.21.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/CHANGELOG.md +9 -0
- data/config/locales/da.yml +1 -0
- data/config/locales/de.yml +1 -0
- data/config/locales/en.yml +1 -0
- data/config/locales/es.yml +3 -2
- data/config/locales/fr.yml +1 -0
- data/config/locales/it.yml +2 -2
- data/config/locales/nb.yml +1 -0
- data/config/locales/nl.yml +1 -0
- data/config/locales/pt.yml +1 -0
- data/config/locales/sl.yml +1 -0
- data/config/locales/sv.yml +1 -0
- data/data/raw/pseudo_ibans.yml +6 -3
- data/data/structures.yml +6 -3
- data/ibandit.gemspec +1 -1
- data/lib/ibandit/iban.rb +21 -13
- data/lib/ibandit/version.rb +1 -1
- data/spec/ibandit/iban_spec.rb +51 -6
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 37a15fbc4242dda50e51d295ef5e37e6ee692d5f91d43d32842c2df570213e82
|
|
4
|
+
data.tar.gz: db530699e09d54603f27cbee4c4d6e9f254e89557ce1c41ac0cbfb8e82a58e90
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1a9b288596e9bddae7eab282e12f20a650bdbc74016240f56f4a7a34fa9628885070b276ac079d149a146a4cd0ac68ceb58923001edb40159bd368637b1534d2
|
|
7
|
+
data.tar.gz: '08f3f363786871a019ebe9122d1b9fe96893823811a9578d25a652757a01d8b4e9904ae4ecf32542a2ddb856894486816429a97f65ecd7bc450158c0924de475'
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
## 1.21.0 - August 6, 2024
|
|
2
|
+
|
|
3
|
+
- Canada, Financial Institution number - allow 3 digits
|
|
4
|
+
- modulus_checker failures will now return validation method specific error message
|
|
5
|
+
|
|
6
|
+
## 1.20.0 - October 13, 2023
|
|
7
|
+
|
|
8
|
+
- Do not allow all 0 transit numbers in CA
|
|
9
|
+
|
|
1
10
|
## 1.19.0 - October 3, 2023
|
|
2
11
|
|
|
3
12
|
- Do not allow all-0 account numbers for CA
|
data/config/locales/da.yml
CHANGED
data/config/locales/de.yml
CHANGED
data/config/locales/en.yml
CHANGED
data/config/locales/es.yml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
es:
|
|
2
2
|
ibandit:
|
|
3
|
-
invalid_country_code: "
|
|
4
|
-
invalid_check_digits:
|
|
3
|
+
invalid_country_code: '"%{country_code}" no es un código de país IBAN ISO 3166-1 válido'
|
|
4
|
+
invalid_check_digits: 'Los dígitos de verificación han generado un error en la comprobación del módulo. Se esperaba "%{expected_check_digits}", pero se ha recibido "%{check_digits}".'
|
|
5
5
|
invalid_length: "La longitud no coincide con la especificación SWIFT (se esperaban %{expected_length} caracteres, pero se han recibido %{length})"
|
|
6
6
|
is_required: "es obligatorio"
|
|
7
7
|
wrong_length: "no tiene la longitud correcta (debe tener %{expected} caracteres)"
|
|
@@ -17,3 +17,4 @@ es:
|
|
|
17
17
|
bank_code_does_not_exist: "codigo bancario inexistente"
|
|
18
18
|
has_invalid_clearing_code_length: "codigo de oficina de oficina de compensación invalido"
|
|
19
19
|
has_invalid_serial_number: "número de serie invalido"
|
|
20
|
+
branch_code_does_not_exist: "código de sucursal no existe"
|
data/config/locales/fr.yml
CHANGED
|
@@ -17,3 +17,4 @@ fr:
|
|
|
17
17
|
bank_code_does_not_exist: "le code de la banque n'existe pas"
|
|
18
18
|
has_invalid_clearing_code_length: "la longueur du clearing code n'est pas valide"
|
|
19
19
|
has_invalid_serial_number: "le numéro de série n'est pas valide"
|
|
20
|
+
branch_code_does_not_exist: "le code de la succursale n'existe pas"
|
data/config/locales/it.yml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
it:
|
|
2
2
|
ibandit:
|
|
3
|
-
invalid_country_code: "
|
|
3
|
+
invalid_country_code: '"%{country_code}" non è un codice di paese IBAN 3166-1 valido'
|
|
4
4
|
invalid_check_digits: "Controllo del modulo non riuscito per i caratteri. %{expected_check_digits} caratteri previsti, %{check_digits} immessi."
|
|
5
5
|
invalid_length: "La lunghezza non corrisponde alla specifica SWIFT (%{expected_length} caratteri previsti, %{length} immessi)"
|
|
6
6
|
is_required: "è obbligatorio"
|
|
@@ -17,4 +17,4 @@ it:
|
|
|
17
17
|
bank_code_does_not_exist: "codice banca inesistente"
|
|
18
18
|
has_invalid_clearing_code_length: "lunghezza clearing code non valida"
|
|
19
19
|
has_invalid_serial_number: "numero di serie non valido"
|
|
20
|
-
|
|
20
|
+
branch_code_does_not_exist: "codice filiale non esiste"
|
data/config/locales/nb.yml
CHANGED
data/config/locales/nl.yml
CHANGED
data/config/locales/pt.yml
CHANGED
|
@@ -17,3 +17,4 @@ pt:
|
|
|
17
17
|
bank_code_does_not_exist: "o código do banco não existe"
|
|
18
18
|
has_invalid_clearing_code_length: "o comprimento do código de libertação é inválido"
|
|
19
19
|
has_invalid_serial_number: "o número de série é inválido"
|
|
20
|
+
branch_code_does_not_exist: "código da filial não existe"
|
data/config/locales/sl.yml
CHANGED
data/config/locales/sv.yml
CHANGED
data/data/raw/pseudo_ibans.yml
CHANGED
|
@@ -13,14 +13,17 @@ AU:
|
|
|
13
13
|
:pseudo_iban_account_number_length: 10
|
|
14
14
|
:national_id_length: 6
|
|
15
15
|
CA:
|
|
16
|
-
:bank_code_length:
|
|
16
|
+
:bank_code_length: !ruby/range
|
|
17
|
+
begin: 3
|
|
18
|
+
end: 4
|
|
19
|
+
excl: false
|
|
17
20
|
:branch_code_length: 5
|
|
18
21
|
:account_number_length: !ruby/range
|
|
19
22
|
begin: 7
|
|
20
23
|
end: 12
|
|
21
24
|
excl: false
|
|
22
|
-
:bank_code_format: "\\d{4}"
|
|
23
|
-
:branch_code_format: "
|
|
25
|
+
:bank_code_format: "\\d{3,4}"
|
|
26
|
+
:branch_code_format: "0{0,4}[1-9][0-9]{0,4}"
|
|
24
27
|
:account_number_format: "(?!0+\\z)\\d{7,12}"
|
|
25
28
|
:national_id_length: 9
|
|
26
29
|
:pseudo_iban_bank_code_length: 4
|
data/data/structures.yml
CHANGED
|
@@ -1493,14 +1493,17 @@ AU:
|
|
|
1493
1493
|
:pseudo_iban_account_number_length: 10
|
|
1494
1494
|
:national_id_length: 6
|
|
1495
1495
|
CA:
|
|
1496
|
-
:bank_code_length:
|
|
1496
|
+
:bank_code_length: !ruby/range
|
|
1497
|
+
begin: 3
|
|
1498
|
+
end: 4
|
|
1499
|
+
excl: false
|
|
1497
1500
|
:branch_code_length: 5
|
|
1498
1501
|
:account_number_length: !ruby/range
|
|
1499
1502
|
begin: 7
|
|
1500
1503
|
end: 12
|
|
1501
1504
|
excl: false
|
|
1502
|
-
:bank_code_format: "\\d{4}"
|
|
1503
|
-
:branch_code_format:
|
|
1505
|
+
:bank_code_format: "\\d{3,4}"
|
|
1506
|
+
:branch_code_format: 0{0,4}[1-9][0-9]{0,4}
|
|
1504
1507
|
:account_number_format: "(?!0+\\z)\\d{7,12}"
|
|
1505
1508
|
:national_id_length: 9
|
|
1506
1509
|
:pseudo_iban_bank_code_length: 4
|
data/ibandit.gemspec
CHANGED
|
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
|
27
27
|
spec.require_paths = ["lib"]
|
|
28
28
|
|
|
29
29
|
spec.required_ruby_version = ">= 2.7.0"
|
|
30
|
-
spec.add_development_dependency "gc_ruboconfig", "~>
|
|
30
|
+
spec.add_development_dependency "gc_ruboconfig", "~> 5.0"
|
|
31
31
|
spec.add_development_dependency "nokogiri", "~> 1.6"
|
|
32
32
|
spec.add_development_dependency "pry", "~> 0.13"
|
|
33
33
|
spec.add_development_dependency "pry-byebug", "~> 3.10"
|
data/lib/ibandit/iban.rb
CHANGED
|
@@ -158,14 +158,17 @@ module Ibandit
|
|
|
158
158
|
|
|
159
159
|
def valid_bank_code_length?
|
|
160
160
|
return unless valid_country_code?
|
|
161
|
-
|
|
161
|
+
if structure[:bank_code_length].is_a?(Integer) && structure[:bank_code_length].zero?
|
|
162
|
+
return true
|
|
163
|
+
end
|
|
162
164
|
|
|
163
165
|
if swift_bank_code.nil? || swift_bank_code.empty?
|
|
164
166
|
@errors[:bank_code] = Ibandit.translate(:is_required)
|
|
165
167
|
return false
|
|
166
168
|
end
|
|
167
169
|
|
|
168
|
-
return true if
|
|
170
|
+
return true if valid_input_length?(structure[:bank_code_length],
|
|
171
|
+
swift_bank_code.length)
|
|
169
172
|
|
|
170
173
|
@errors[:bank_code] =
|
|
171
174
|
Ibandit.translate(:wrong_length, expected: structure[:bank_code_length])
|
|
@@ -197,14 +200,8 @@ module Ibandit
|
|
|
197
200
|
return false
|
|
198
201
|
end
|
|
199
202
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
if structure[:account_number_length].include?(swift_account_number.length)
|
|
203
|
-
return true
|
|
204
|
-
end
|
|
205
|
-
else
|
|
206
|
-
return true if swift_account_number.length == structure[:account_number_length]
|
|
207
|
-
end
|
|
203
|
+
return true if valid_input_length?(structure[:account_number_length],
|
|
204
|
+
swift_account_number.length)
|
|
208
205
|
|
|
209
206
|
@errors[:account_number] =
|
|
210
207
|
Ibandit.translate(:wrong_length,
|
|
@@ -240,7 +237,9 @@ module Ibandit
|
|
|
240
237
|
|
|
241
238
|
def valid_bank_code_format?
|
|
242
239
|
return unless valid_bank_code_length?
|
|
243
|
-
|
|
240
|
+
if structure[:bank_code_length].is_a?(Integer) && structure[:bank_code_length].zero?
|
|
241
|
+
return true
|
|
242
|
+
end
|
|
244
243
|
|
|
245
244
|
if swift_bank_code&.match?(
|
|
246
245
|
entire_string_regex(structure[:bank_code_format]),
|
|
@@ -509,17 +508,26 @@ module Ibandit
|
|
|
509
508
|
iban.to_s.gsub(/(.{4})/, '\1 ').strip
|
|
510
509
|
end
|
|
511
510
|
|
|
511
|
+
def valid_input_length?(allowed_length, input_length)
|
|
512
|
+
case allowed_length
|
|
513
|
+
when Range
|
|
514
|
+
allowed_length.include?(input_length)
|
|
515
|
+
else
|
|
516
|
+
allowed_length == input_length
|
|
517
|
+
end
|
|
518
|
+
end
|
|
519
|
+
|
|
512
520
|
def valid_modulus_check_bank_code?
|
|
513
521
|
return true if Ibandit.modulus_checker.valid_bank_code?(self)
|
|
514
522
|
|
|
515
|
-
@errors[:bank_code] = Ibandit.translate(:
|
|
523
|
+
@errors[:bank_code] = Ibandit.translate(:bank_code_does_not_exist)
|
|
516
524
|
false
|
|
517
525
|
end
|
|
518
526
|
|
|
519
527
|
def valid_modulus_check_branch_code?
|
|
520
528
|
return true if Ibandit.modulus_checker.valid_branch_code?(self)
|
|
521
529
|
|
|
522
|
-
@errors[:branch_code] = Ibandit.translate(:
|
|
530
|
+
@errors[:branch_code] = Ibandit.translate(:branch_code_does_not_exist)
|
|
523
531
|
false
|
|
524
532
|
end
|
|
525
533
|
|
data/lib/ibandit/version.rb
CHANGED
data/spec/ibandit/iban_spec.rb
CHANGED
|
@@ -422,10 +422,55 @@ describe Ibandit::IBAN do
|
|
|
422
422
|
{
|
|
423
423
|
country_code: "CA",
|
|
424
424
|
bank_code: bank_code,
|
|
425
|
-
branch_code:
|
|
425
|
+
branch_code: branch_code,
|
|
426
426
|
account_number: account_number,
|
|
427
427
|
}
|
|
428
428
|
end
|
|
429
|
+
let(:branch_code) { "00063" }
|
|
430
|
+
|
|
431
|
+
context "and a 5 digit branch code" do
|
|
432
|
+
let(:account_number) { "0123456" }
|
|
433
|
+
let(:bank_code) { "036" }
|
|
434
|
+
let(:branch_code) { "00063" }
|
|
435
|
+
|
|
436
|
+
its(:country_code) { is_expected.to eq("CA") }
|
|
437
|
+
its(:bank_code) { is_expected.to eq("0036") }
|
|
438
|
+
its(:branch_code) { is_expected.to eq("00063") }
|
|
439
|
+
its(:account_number) { is_expected.to eq("0123456") }
|
|
440
|
+
its(:swift_bank_code) { is_expected.to eq("0036") }
|
|
441
|
+
its(:swift_branch_code) { is_expected.to eq("00063") }
|
|
442
|
+
its(:swift_account_number) { is_expected.to eq("0123456") }
|
|
443
|
+
its(:swift_national_id) { is_expected.to eq("003600063") }
|
|
444
|
+
its(:pseudo_iban) { is_expected.to eq("CAZZ003600063_____0123456") }
|
|
445
|
+
|
|
446
|
+
its(:iban) { is_expected.to be_nil }
|
|
447
|
+
its(:valid?) { is_expected.to eq(true) }
|
|
448
|
+
its(:to_s) { is_expected.to eq("") }
|
|
449
|
+
end
|
|
450
|
+
|
|
451
|
+
context "for an all zero transit number" do
|
|
452
|
+
let(:account_number) { "0123456" }
|
|
453
|
+
let(:bank_code) { "036" }
|
|
454
|
+
let(:branch_code) { "00000" }
|
|
455
|
+
|
|
456
|
+
it "is invalid and has the correct errors" do
|
|
457
|
+
expect(subject.valid?).to eq(false)
|
|
458
|
+
expect(subject.errors).
|
|
459
|
+
to eq(branch_code: "format is invalid")
|
|
460
|
+
end
|
|
461
|
+
end
|
|
462
|
+
|
|
463
|
+
context "and a 4 digit branch code" do
|
|
464
|
+
let(:account_number) { "0123456" }
|
|
465
|
+
let(:bank_code) { "036" }
|
|
466
|
+
let(:branch_code) { "0063" }
|
|
467
|
+
|
|
468
|
+
it "is invalid and has the correct errors" do
|
|
469
|
+
expect(subject.valid?).to eq(false)
|
|
470
|
+
expect(subject.errors).
|
|
471
|
+
to eq(branch_code: "is the wrong length (should be 5 characters)")
|
|
472
|
+
end
|
|
473
|
+
end
|
|
429
474
|
|
|
430
475
|
context "and a 3 digit bank code" do
|
|
431
476
|
let(:account_number) { "0123456" }
|
|
@@ -1296,7 +1341,7 @@ describe Ibandit::IBAN do
|
|
|
1296
1341
|
it { is_expected.to be(false) }
|
|
1297
1342
|
|
|
1298
1343
|
it "sets the errors on the IBAN" do
|
|
1299
|
-
expect(iban.errors).to include(bank_code: "
|
|
1344
|
+
expect(iban.errors).to include(bank_code: "bank code does not exist")
|
|
1300
1345
|
end
|
|
1301
1346
|
end
|
|
1302
1347
|
|
|
@@ -1323,7 +1368,7 @@ describe Ibandit::IBAN do
|
|
|
1323
1368
|
it { is_expected.to be(false) }
|
|
1324
1369
|
|
|
1325
1370
|
it "sets the errors on the IBAN" do
|
|
1326
|
-
expect(iban.errors).to include(branch_code: "
|
|
1371
|
+
expect(iban.errors).to include(branch_code: "branch code does not exist")
|
|
1327
1372
|
end
|
|
1328
1373
|
end
|
|
1329
1374
|
|
|
@@ -1536,7 +1581,7 @@ describe Ibandit::IBAN do
|
|
|
1536
1581
|
it { is_expected.to be(false) }
|
|
1537
1582
|
|
|
1538
1583
|
it "sets the errors on the IBAN" do
|
|
1539
|
-
expect(iban.errors).to include(branch_code: "
|
|
1584
|
+
expect(iban.errors).to include(branch_code: "branch code does not exist")
|
|
1540
1585
|
end
|
|
1541
1586
|
end
|
|
1542
1587
|
end
|
|
@@ -1601,7 +1646,7 @@ describe Ibandit::IBAN do
|
|
|
1601
1646
|
it { is_expected.to be(false) }
|
|
1602
1647
|
|
|
1603
1648
|
it "sets the errors on the IBAN" do
|
|
1604
|
-
expect(iban.errors).to include(branch_code: "
|
|
1649
|
+
expect(iban.errors).to include(branch_code: "branch code does not exist")
|
|
1605
1650
|
end
|
|
1606
1651
|
end
|
|
1607
1652
|
end
|
|
@@ -1666,7 +1711,7 @@ describe Ibandit::IBAN do
|
|
|
1666
1711
|
it { is_expected.to be(false) }
|
|
1667
1712
|
|
|
1668
1713
|
it "sets the errors on the IBAN" do
|
|
1669
|
-
expect(iban.errors).to include(branch_code: "
|
|
1714
|
+
expect(iban.errors).to include(branch_code: "branch code does not exist")
|
|
1670
1715
|
end
|
|
1671
1716
|
end
|
|
1672
1717
|
end
|
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.21.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- GoCardless
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2024-08-06 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: '
|
|
19
|
+
version: '5.0'
|
|
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: '
|
|
26
|
+
version: '5.0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: nokogiri
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|