ibandit 1.18.0 → 1.20.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b8d022291e78a27b3f3b8dbfdae181ef51a16e40a0a6c3c0635703ea6a683ad
4
- data.tar.gz: a231a9d66818be2adbf1b3f94dda0ebc5f9c67aea2b61a0c82d6e5f4b6df96a9
3
+ metadata.gz: 2c3c4654f26735c5412bd2cf3f02c1c5802d1fb2c6c9f775f1472ea0660cc0c3
4
+ data.tar.gz: d67a80fea5521e0eac1f1486aefaf584b886ebf846a5d05e3bce8ec6fee21182
5
5
  SHA512:
6
- metadata.gz: 1ad4e13578ab1109950350378fb8f065eef1fb022be994a81fd11f5badbefa788a9e38b536fdc2f233f1098bee73bbd3a9854194f76c01bbfaccf5438208e162
7
- data.tar.gz: 031a842efe2feeb64ba57036547df074b55adf23399979b856b457aa97d90b20d6ee4da811de7c5c09e881a61d383132a52c44c59475d7cf468da0652923c20a
6
+ metadata.gz: 8c092c285a2923177c42b7deb1e305e9a2b4b1625d642da44a1bca3adac3667276216f187e947fe3f90009ec4f1b190898cf12236dac52e202ba8df61e99fe45
7
+ data.tar.gz: f1fcb038c96b3ba56fe53fe92688b2c19e25a9dfcbdc423d387fbceca835afa4e78337bf87ec3f9dee71d5bd5880837ac4f0728a4f67a45a7a2de0135aa230a7
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 1.20.0 - October 13, 2023
2
+
3
+ - Do not allow all 0 transit numbers in CA
4
+
5
+ ## 1.19.0 - October 3, 2023
6
+
7
+ - Do not allow all-0 account numbers for CA
8
+
1
9
  ## 1.18.0 - Sept 4, 2023
2
10
 
3
11
  - Remove Ruby 2.6 support
@@ -7,7 +7,7 @@ AU:
7
7
  end: 10
8
8
  excl: false
9
9
  :branch_code_format: "\\d{6}"
10
- :account_number_format: "[A-Z0-9]{5,10}"
10
+ :account_number_format: "(?!0+\\z)[A-Z0-9]{5,10}"
11
11
  :pseudo_iban_bank_code_length: 0
12
12
  :pseudo_iban_branch_code_length: 6
13
13
  :pseudo_iban_account_number_length: 10
@@ -20,8 +20,8 @@ CA:
20
20
  end: 12
21
21
  excl: false
22
22
  :bank_code_format: "\\d{4}"
23
- :branch_code_format: "\\d{5}"
24
- :account_number_format: "\\d{7,12}"
23
+ :branch_code_format: "0{0,4}[1-9][0-9]{0,4}"
24
+ :account_number_format: "(?!0+\\z)\\d{7,12}"
25
25
  :national_id_length: 9
26
26
  :pseudo_iban_bank_code_length: 4
27
27
  :pseudo_iban_branch_code_length: 5
data/data/structures.yml CHANGED
@@ -1487,7 +1487,7 @@ AU:
1487
1487
  end: 10
1488
1488
  excl: false
1489
1489
  :branch_code_format: "\\d{6}"
1490
- :account_number_format: "[A-Z0-9]{5,10}"
1490
+ :account_number_format: "(?!0+\\z)[A-Z0-9]{5,10}"
1491
1491
  :pseudo_iban_bank_code_length: 0
1492
1492
  :pseudo_iban_branch_code_length: 6
1493
1493
  :pseudo_iban_account_number_length: 10
@@ -1500,8 +1500,8 @@ CA:
1500
1500
  end: 12
1501
1501
  excl: false
1502
1502
  :bank_code_format: "\\d{4}"
1503
- :branch_code_format: "\\d{5}"
1504
- :account_number_format: "\\d{7,12}"
1503
+ :branch_code_format: 0{0,4}[1-9][0-9]{0,4}
1504
+ :account_number_format: "(?!0+\\z)\\d{7,12}"
1505
1505
  :national_id_length: 9
1506
1506
  :pseudo_iban_bank_code_length: 4
1507
1507
  :pseudo_iban_branch_code_length: 5
data/lib/ibandit/iban.rb CHANGED
@@ -386,12 +386,6 @@ module Ibandit
386
386
 
387
387
  def valid_australian_details?
388
388
  return true unless country_code == "AU"
389
-
390
- bsb_check? && account_number_not_all_zeros?
391
- end
392
-
393
- def bsb_check?
394
- return true unless country_code == "AU"
395
389
  return true unless Ibandit.modulus_checker
396
390
 
397
391
  valid_modulus_check_branch_code?
@@ -550,12 +544,5 @@ module Ibandit
550
544
 
551
545
  input.slice(2, 2) == Constants::PSEUDO_IBAN_CHECK_DIGITS
552
546
  end
553
-
554
- def account_number_not_all_zeros?
555
- return true if @swift_account_number.to_s.chars.uniq != ["0"]
556
-
557
- @errors[:account_number] = Ibandit.translate(:is_invalid)
558
- false
559
- end
560
547
  end
561
548
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ibandit
4
- VERSION = "1.18.0"
4
+ VERSION = "1.20.0"
5
5
  end
@@ -422,10 +422,55 @@ describe Ibandit::IBAN do
422
422
  {
423
423
  country_code: "CA",
424
424
  bank_code: bank_code,
425
- branch_code: "00063",
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" }
@@ -491,6 +536,17 @@ describe Ibandit::IBAN do
491
536
  its(:valid?) { is_expected.to be false }
492
537
  end
493
538
 
539
+ context "and account number has only zeroes in it" do
540
+ let(:account_number) { "0000000" }
541
+ let(:bank_code) { "0036" }
542
+
543
+ it "is invalid and has the correct errors" do
544
+ expect(subject.valid?).to eq(false)
545
+ expect(subject.errors).
546
+ to eq(account_number: "format is invalid")
547
+ end
548
+ end
549
+
494
550
  context "and a 12 digit account number" do
495
551
  let(:account_number) { "012345678900" }
496
552
  let(:bank_code) { "0036" }
@@ -1662,10 +1718,68 @@ describe Ibandit::IBAN do
1662
1718
  end
1663
1719
  end
1664
1720
 
1665
- describe "#valid?" do
1721
+ describe "Pseudo IBAN #valid?" do
1722
+ let(:country_code) { "CA" }
1723
+ let(:arg) do
1724
+ {
1725
+ country_code: country_code,
1726
+ bank_code: "0036",
1727
+ branch_code: "00063",
1728
+ account_number: "1234567",
1729
+ }
1730
+ end
1731
+
1732
+ describe "validations called" do
1733
+ after { iban.valid? }
1734
+
1735
+ specify { expect(iban).to receive(:valid_pseudo_iban?).at_least(1) }
1736
+ specify { expect(iban).to receive(:valid_pseudo_iban_check_digits?).at_least(1) }
1737
+ specify { expect(iban).to receive(:valid_country_code?).at_least(1) }
1738
+ specify { expect(iban).to receive(:valid_bank_code_length?).at_least(1) }
1739
+ specify { expect(iban).to receive(:valid_branch_code_length?).at_least(1) }
1740
+ specify { expect(iban).to receive(:valid_account_number_length?).at_least(1) }
1741
+ specify { expect(iban).to receive(:valid_bank_code_format?).at_least(1) }
1742
+ specify { expect(iban).to receive(:valid_branch_code_format?).at_least(1) }
1743
+ specify { expect(iban).to receive(:valid_account_number_format?).at_least(1) }
1744
+ specify { expect(iban).to receive(:passes_country_specific_checks?).at_least(1) }
1745
+
1746
+ context "SE" do
1747
+ let(:country_code) { "SE" }
1748
+
1749
+ specify { expect(iban).to receive(:valid_swedish_details?).at_least(1) }
1750
+ end
1751
+
1752
+ context "AU" do
1753
+ let(:country_code) { "AU" }
1754
+
1755
+ specify { expect(iban).to receive(:valid_australian_details?).at_least(1) }
1756
+ end
1757
+
1758
+ context "NZ" do
1759
+ let(:country_code) { "NZ" }
1760
+
1761
+ specify { expect(iban).to receive(:valid_nz_details?).at_least(1) }
1762
+ end
1763
+
1764
+ context "CA" do
1765
+ let(:country_code) { "CA" }
1766
+
1767
+ specify { expect(iban).to receive(:valid_ca_details?).at_least(1) }
1768
+ end
1769
+
1770
+ context "US" do
1771
+ let(:country_code) { "US" }
1772
+
1773
+ specify { expect(iban).to receive(:bank_code_passes_checksum_test?).at_least(1) }
1774
+ end
1775
+ end
1776
+ end
1777
+
1778
+ describe "IBAN #valid?" do
1666
1779
  describe "validations called" do
1667
1780
  after { iban.valid? }
1668
1781
 
1782
+ specify { expect(iban).to receive(:valid_iban?).at_least(1) }
1669
1783
  specify { expect(iban).to receive(:valid_country_code?).at_least(1) }
1670
1784
  specify { expect(iban).to receive(:valid_characters?).at_least(1) }
1671
1785
  specify { expect(iban).to receive(:valid_check_digits?).at_least(1) }
@@ -1697,6 +1811,18 @@ describe Ibandit::IBAN do
1697
1811
  it "runs country specific checks" do
1698
1812
  expect(iban).to receive(:passes_country_specific_checks?).at_least(1)
1699
1813
  end
1814
+
1815
+ context "DE" do
1816
+ let(:arg) do
1817
+ {
1818
+ country_code: "DE",
1819
+ bank_code: "20000000",
1820
+ account_number: "7955791111",
1821
+ }
1822
+ end
1823
+
1824
+ specify { expect(iban).to receive(:supports_iban_determination?).at_least(1) }
1825
+ end
1700
1826
  end
1701
1827
 
1702
1828
  RSpec.shared_examples "a country's IBAN" do |country_code|
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.18.0
4
+ version: 1.20.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-09-04 00:00:00.000000000 Z
11
+ date: 2023-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gc_ruboconfig