ibandit 1.35.0 → 1.37.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: 0c66078162418a28f36b4b770f14683b5ef73404be4317d999e104c106887c6d
4
- data.tar.gz: 41764feef79fdd0da97fc0a9dd45224d3f49f01599cf21c9b739f73c1b44814b
3
+ metadata.gz: b92de6a0bd5136fae90ea72a6c9ef38aa44d78adcce93829217f92aaa6e06832
4
+ data.tar.gz: 397a26e1d180a102c9317527c43849d6c147adc2b30394563046a7214ec292b4
5
5
  SHA512:
6
- metadata.gz: 990c8803f134029f9c080ee728d4d0a6c419fef6897cac6ecf0021cc93a504700bded9fecf2db7f70fddbf040616ac6ec3257f29eb87434e47fbf6541c4bcc3f
7
- data.tar.gz: da30ef6a3c3ed3a6173d197ec2f711ef07b4a6462e12bf2193ebf759daa669ae3eabc4a07ae17ca7bc4da7feabd65d8f0c8831eebf0baebd1429cb8df36ab684
6
+ metadata.gz: 39fb99232136ee69fc5e8b1d180f952cd31b4031e3e8298325c31647212ec8ae21bb27e0ff2d951917fee0eb58c4027306c5ec306f5a3482c9336e3d1fdbedbf
7
+ data.tar.gz: f5565d4016415743ec141be5b8df9fa8b4e171139ee0cb9f0160a27eafea107701c0b0da07179364bbda642798aefd876fef343ec0098e5a2117fbdc82369b23
@@ -2,15 +2,31 @@ name: tests
2
2
 
3
3
  on:
4
4
  push:
5
+ branches:
6
+ - "master"
7
+ pull_request:
5
8
 
6
9
  jobs:
7
- validate:
10
+ rubocop:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v7
14
+ - name: Set up Ruby
15
+ uses: ruby/setup-ruby@v1
16
+ with:
17
+ bundler-cache: true
18
+ # Maintain consistency with the TargetRubyVersion in .rubocop.yml
19
+ ruby-version: "3.3"
20
+ - name: Run rubocop
21
+ run: bundle exec rubocop --parallel --extra-details --display-style-guide
22
+
23
+ tests:
8
24
  strategy:
9
25
  matrix:
10
- ruby-version: ["3.1", "3.2", "3.3", "3.4"]
26
+ ruby-version: ["3.3", "3.4", "4.0"]
11
27
  runs-on: ubuntu-latest
12
28
  steps:
13
- - uses: actions/checkout@v3
29
+ - uses: actions/checkout@v7
14
30
  - name: Set up Ruby
15
31
  uses: ruby/setup-ruby@v1
16
32
  with:
@@ -18,5 +34,3 @@ jobs:
18
34
  ruby-version: "${{ matrix.ruby-version }}"
19
35
  - name: Run tests
20
36
  run: bundle exec rspec
21
- - name: Run rubocop
22
- run: bundle exec rubocop --parallel --extra-details --display-style-guide
data/.rubocop.yml CHANGED
@@ -4,5 +4,5 @@ inherit_gem:
4
4
  gc_ruboconfig: rubocop.yml
5
5
 
6
6
  AllCops:
7
- TargetRubyVersion: 3.2
7
+ TargetRubyVersion: 3.3
8
8
  NewCops: enable
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.4.1
1
+ 4.0.6
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## 1.37.0 - October 29, 2026
2
+
3
+ - [Breaking] Call the configured modulus checker's `valid_bank_code?` for US details, as is already done for AU, NZ and CA. US routing numbers the checker does not recognise are now invalid.
4
+
5
+ ## 1.36.0 - September 29, 2026
6
+
7
+ - Add Slovak translations
8
+ - Update German translation for invalid check digits
9
+ - Drop CI testing for Rubies older than 3.3
10
+
1
11
  ## 1.35.0 - September 28, 2026
2
12
 
3
13
  - Accept one-digit NZ account suffixes and normalise them to the three-digit bank form.
data/Gemfile CHANGED
@@ -5,7 +5,7 @@ source 'https://rubygems.org'
5
5
  gemspec
6
6
 
7
7
  group :development, :test do
8
- gem "gc_ruboconfig", "~> 5.0"
8
+ gem "gc_ruboconfig", "~> 6.0"
9
9
  gem "nokogiri", "~> 1.6"
10
10
  gem "pry", "~> 0.13"
11
11
  gem "pry-byebug", "~> 3.10"
@@ -1,7 +1,7 @@
1
1
  de:
2
2
  ibandit:
3
3
  invalid_country_code: "'%{country_code}' ist kein gültiges IBAN-Länderkennzeichen gemäß ISO 3166-1"
4
- invalid_check_digits: "Prüfziffer hat Betragsprüfung nicht bestanden. (%{expected_check_digits} Zeichen erwartet, %{check_digits} angegeben)."
4
+ invalid_check_digits: "Prüfsumme ist ungültig (%{expected_check_digits} erwartet, %{check_digits} angegeben)."
5
5
  invalid_length: "Länge entspricht nicht der SWIFT-Spezifikation (%{expected_length} Zeichen erwartet, %{length} angegeben)"
6
6
  is_required: "ist erforderlich"
7
7
  wrong_length: "hat nicht die richtige Länge (sollte %{expected} Zeichen haben)"
@@ -0,0 +1,21 @@
1
+ sk:
2
+ ibandit:
3
+ invalid_country_code: "'%{country_code}' nie je platný ISO 3166-1 IBAN kód krajiny"
4
+ invalid_check_digits: "Kontrolné číslice neprešli kontrolou modulo. Očakávané '%{expected_check_digits}', zadané '%{check_digits}'."
5
+ invalid_length: "Dĺžka nezodpovedá špecifikácii SWIFT (očakávaných %{expected_length} znakov, zadaných %{length})"
6
+ is_required: "je povinné"
7
+ wrong_length: "má nesprávnu dĺžku (má byť %{expected} znakov)"
8
+ not_used_in_country: "nie je používaný v %{country_code}"
9
+ non_alphanumeric_characters: "Nealfanumerické znaky nájdené: %{characters}"
10
+ invalid_format: "Neočakávaný formát pre %{country_code} IBAN."
11
+ is_invalid: "je neplatný"
12
+ does_not_support_payments: "nepodporuje platby"
13
+ has_invalid_format: "formát je neplatný"
14
+ failed_checksum_test: "neúspešný test kontrolného súčtu"
15
+ failed_modulus_check: "neúspešná kontrola modulo"
16
+ has_invalid_length: "dĺžka je neplatná"
17
+ bank_code_does_not_exist: "bankový kód neexistuje"
18
+ has_invalid_clearing_code_length: "dĺžka kódu clearingu je neplatná"
19
+ has_invalid_serial_number: "sériové číslo je neplatné"
20
+ branch_code_does_not_exist: "kód pobočky neexistuje"
21
+
@@ -27,7 +27,7 @@ module Ibandit
27
27
  ).uniq
28
28
 
29
29
  SUPPORTED_LOCALES = %w[
30
- da de en es fr it nb nl pt sl sv
30
+ da de en es fr it nb nl pt sk sl sv
31
31
  ].freeze
32
32
  end
33
33
  end
data/lib/ibandit/iban.rb CHANGED
@@ -298,7 +298,7 @@ module Ibandit
298
298
  when "AU" then valid_australian_details?
299
299
  when "NZ" then valid_nz_details?
300
300
  when "CA" then valid_ca_details?
301
- when "US" then bank_code_passes_checksum_test?
301
+ when "US" then valid_us_details?
302
302
  else true
303
303
  end
304
304
  end
@@ -392,6 +392,14 @@ module Ibandit
392
392
  valid_modulus_check_branch_code?
393
393
  end
394
394
 
395
+ def valid_us_details?
396
+ return true unless country_code == "US"
397
+ return false unless bank_code_passes_checksum_test?
398
+ return true unless Ibandit.modulus_checker
399
+
400
+ valid_modulus_check_bank_code?
401
+ end
402
+
395
403
  def bank_code_passes_checksum_test?
396
404
  return false unless swift_bank_code
397
405
  return false if swift_bank_code.length != 9
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ibandit
4
- VERSION = "1.35.0"
4
+ VERSION = "1.37.0"
5
5
  end
@@ -1936,6 +1936,82 @@ describe Ibandit::IBAN do
1936
1936
  end
1937
1937
  end
1938
1938
 
1939
+ describe "valid_us_details" do
1940
+ subject { iban.valid_us_details? }
1941
+
1942
+ context "with non-US details" do
1943
+ let(:arg) do
1944
+ {
1945
+ country_code: "GB",
1946
+ bank_code: "1234",
1947
+ branch_code: "200000",
1948
+ account_number: "55779911",
1949
+ }
1950
+ end
1951
+
1952
+ it { is_expected.to be(true) }
1953
+ end
1954
+
1955
+ context "with US details" do
1956
+ let(:arg) do
1957
+ {
1958
+ country_code: "US",
1959
+ bank_code: "026073150",
1960
+ account_number: "2715500356",
1961
+ }
1962
+ end
1963
+
1964
+ context "without a modulus checker defined" do
1965
+ it { is_expected.to be(true) }
1966
+ end
1967
+
1968
+ context "with a modulus checker defined" do
1969
+ before do
1970
+ Ibandit.modulus_checker = double(
1971
+ valid_bank_code?: valid_bank_code,
1972
+ )
1973
+ iban.valid_us_details?
1974
+ end
1975
+
1976
+ after { Ibandit.modulus_checker = nil }
1977
+
1978
+ let(:valid_bank_code) { true }
1979
+
1980
+ it "calls valid_bank_code? with an IBAN object" do
1981
+ expect(Ibandit.modulus_checker).
1982
+ to receive(:valid_bank_code?).
1983
+ with(instance_of(described_class))
1984
+
1985
+ iban.valid_us_details?
1986
+ end
1987
+
1988
+ it { is_expected.to be(true) }
1989
+
1990
+ context "with a bank code that does not exist" do
1991
+ let(:valid_bank_code) { false }
1992
+
1993
+ it { is_expected.to be(false) }
1994
+
1995
+ it "sets the errors on the IBAN" do
1996
+ expect(iban.errors).to include(bank_code: "bank code does not exist")
1997
+ end
1998
+ end
1999
+ end
2000
+
2001
+ context "with a bank code that fails the checksum test" do
2002
+ let(:arg) do
2003
+ {
2004
+ country_code: "US",
2005
+ bank_code: "123456789",
2006
+ account_number: "12345678",
2007
+ }
2008
+ end
2009
+
2010
+ it { is_expected.to be(false) }
2011
+ end
2012
+ end
2013
+ end
2014
+
1939
2015
  describe "Pseudo IBAN #valid?" do
1940
2016
  let(:country_code) { "CA" }
1941
2017
  let(:arg) do
@@ -1988,7 +2064,7 @@ describe Ibandit::IBAN do
1988
2064
  context "US" do
1989
2065
  let(:country_code) { "US" }
1990
2066
 
1991
- specify { expect(iban).to receive(:bank_code_passes_checksum_test?).at_least(1) }
2067
+ specify { expect(iban).to receive(:valid_us_details?).at_least(1) }
1992
2068
  end
1993
2069
  end
1994
2070
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ibandit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.35.0
4
+ version: 1.37.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GoCardless
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-09-28 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: i18n
@@ -55,6 +55,7 @@ files:
55
55
  - config/locales/nb.yml
56
56
  - config/locales/nl.yml
57
57
  - config/locales/pt.yml
58
+ - config/locales/sk.yml
58
59
  - config/locales/sl.yml
59
60
  - config/locales/sv.yml
60
61
  - data/german_iban_rules.yml
@@ -114,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
115
  - !ruby/object:Gem::Version
115
116
  version: '0'
116
117
  requirements: []
117
- rubygems_version: 3.6.2
118
+ rubygems_version: 4.0.16
118
119
  specification_version: 4
119
120
  summary: Convert national banking details into IBANs, and vice-versa.
120
121
  test_files: []