ibandit 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +4 -0
- data/README.md +21 -0
- data/lib/ibandit.rb +1 -1
- data/lib/ibandit/iban.rb +32 -1
- data/lib/ibandit/version.rb +1 -1
- data/spec/ibandit/iban_spec.rb +49 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c7cc32ffca411662b2ec9370ec48119b19c7c29
|
4
|
+
data.tar.gz: efad5f26823ef1843a63351de65d3c618ff2f0ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85a6244394f46b3f9513314bcdc69875a6f1d14cf4ca33a17ff9ee913de7f76746690eadc64ca66384c36cbe2536c5e8bef26745d6ddffa9cefe971bc476c26e
|
7
|
+
data.tar.gz: 44b6dba9272e2b9a357421a415f8269b8edf04f143b2164b3ba2b2d5930120e94c49db9920699a41503bb6c0976d33f994cccfe81745d7a06e34119a54af7871
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -64,6 +64,27 @@ The following error keys may be set:
|
|
64
64
|
- `length`
|
65
65
|
- `format`
|
66
66
|
|
67
|
+
Ibandit will also apply local modulus checks if you set a modulus checker:
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
module ModulusChecker
|
71
|
+
def self.valid_bank_code?(iban_string)
|
72
|
+
some_codes
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.valid_account_number?(iban_string)
|
76
|
+
some_codes
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
Ibandit.modulus_checker = ModulusChecker
|
81
|
+
```
|
82
|
+
|
83
|
+
Both the `valid_bank_code?` and `valid_account_number?` methods will receive the plain-text IBAN.
|
84
|
+
`valid_bank_code?` should return true unless it is known that the bank/branch code in this IBAN are
|
85
|
+
invalid in the country specified. `valid_account_number?` should return true unless it is known that
|
86
|
+
the account number in this IBAN cannot be valid due to local modulus checking rules.
|
87
|
+
|
67
88
|
### Deconstructing an IBAN into national banking details
|
68
89
|
|
69
90
|
SWIFT define the following components for IBANs, and publish details of how each
|
data/lib/ibandit.rb
CHANGED
@@ -9,7 +9,7 @@ require 'ibandit/check_digit'
|
|
9
9
|
|
10
10
|
module Ibandit
|
11
11
|
class << self
|
12
|
-
attr_accessor :bic_finder
|
12
|
+
attr_accessor :bic_finder, :modulus_checker
|
13
13
|
|
14
14
|
def find_bic(country_code, national_id)
|
15
15
|
raise NotImplementedError, 'BIC finder is not defined' unless @bic_finder
|
data/lib/ibandit/iban.rb
CHANGED
@@ -67,7 +67,8 @@ module Ibandit
|
|
67
67
|
valid_format?,
|
68
68
|
valid_bank_code_format?,
|
69
69
|
valid_branch_code_format?,
|
70
|
-
valid_account_number_format
|
70
|
+
valid_account_number_format?,
|
71
|
+
valid_local_modulus_check?
|
71
72
|
].all?
|
72
73
|
end
|
73
74
|
|
@@ -210,6 +211,13 @@ module Ibandit
|
|
210
211
|
end
|
211
212
|
end
|
212
213
|
|
214
|
+
def valid_local_modulus_check?
|
215
|
+
return unless valid_format?
|
216
|
+
return true unless Ibandit.modulus_checker
|
217
|
+
|
218
|
+
valid_modulus_check_bank_code? && valid_modulus_check_account_number?
|
219
|
+
end
|
220
|
+
|
213
221
|
###################
|
214
222
|
# Private methods #
|
215
223
|
###################
|
@@ -254,5 +262,28 @@ module Ibandit
|
|
254
262
|
def formatted
|
255
263
|
iban.to_s.gsub(/(.{4})/, '\1 ').strip
|
256
264
|
end
|
265
|
+
|
266
|
+
def valid_modulus_check_bank_code?
|
267
|
+
return true if Ibandit.modulus_checker.valid_bank_code?(iban.to_s)
|
268
|
+
|
269
|
+
@errors[modulus_check_bank_code_field] = 'is invalid'
|
270
|
+
false
|
271
|
+
end
|
272
|
+
|
273
|
+
def valid_modulus_check_account_number?
|
274
|
+
return true if Ibandit.modulus_checker.valid_account_number?(iban.to_s)
|
275
|
+
|
276
|
+
@errors[:account_number] = 'is invalid'
|
277
|
+
false
|
278
|
+
end
|
279
|
+
|
280
|
+
def modulus_check_bank_code_field
|
281
|
+
if LocalDetailsCleaner.required_fields(country_code).
|
282
|
+
include?(:branch_code)
|
283
|
+
:branch_code
|
284
|
+
else
|
285
|
+
:bank_code
|
286
|
+
end
|
287
|
+
end
|
257
288
|
end
|
258
289
|
end
|
data/lib/ibandit/version.rb
CHANGED
data/spec/ibandit/iban_spec.rb
CHANGED
@@ -456,6 +456,51 @@ describe Ibandit::IBAN do
|
|
456
456
|
end
|
457
457
|
end
|
458
458
|
|
459
|
+
describe '#valid_local_modulus_check?' do
|
460
|
+
subject(:valid_local_modulus_check?) { iban.valid_local_modulus_check? }
|
461
|
+
|
462
|
+
context 'without a modulus checker defined' do
|
463
|
+
it { is_expected.to be(true) }
|
464
|
+
end
|
465
|
+
|
466
|
+
context 'with a modulus checker defined' do
|
467
|
+
before do
|
468
|
+
Ibandit.modulus_checker = double(
|
469
|
+
valid_bank_code?: valid_bank_code,
|
470
|
+
valid_account_number?: valid_account_number)
|
471
|
+
end
|
472
|
+
after { Ibandit.modulus_checker = nil }
|
473
|
+
before { iban.valid_local_modulus_check? }
|
474
|
+
|
475
|
+
context 'with an invalid bank code' do
|
476
|
+
let(:iban_code) { 'AT611904300234573201' }
|
477
|
+
let(:valid_bank_code) { false }
|
478
|
+
let(:valid_account_number) { true }
|
479
|
+
|
480
|
+
it { is_expected.to be(false) }
|
481
|
+
specify { expect(iban.errors).to include(bank_code: 'is invalid') }
|
482
|
+
|
483
|
+
context 'when the bank code is not required' do
|
484
|
+
let(:iban_code) { 'GB60BARC20000055779911' }
|
485
|
+
before { Ibandit.bic_finder = double(call: 'BARCGB22XXX') }
|
486
|
+
after { Ibandit.bic_finder = nil }
|
487
|
+
before { iban.valid_local_modulus_check? }
|
488
|
+
|
489
|
+
it { is_expected.to be(false) }
|
490
|
+
specify { expect(iban.errors).to include(branch_code: 'is invalid') }
|
491
|
+
end
|
492
|
+
end
|
493
|
+
|
494
|
+
context 'with an invalid account number' do
|
495
|
+
let(:valid_bank_code) { true }
|
496
|
+
let(:valid_account_number) { false }
|
497
|
+
|
498
|
+
it { is_expected.to be(false) }
|
499
|
+
specify { expect(iban.errors).to include(account_number: 'is invalid') }
|
500
|
+
end
|
501
|
+
end
|
502
|
+
end
|
503
|
+
|
459
504
|
describe '#valid?' do
|
460
505
|
describe 'validations called' do
|
461
506
|
after { iban.valid? }
|
@@ -483,6 +528,10 @@ describe Ibandit::IBAN do
|
|
483
528
|
it 'validates the account number format' do
|
484
529
|
expect(iban).to receive(:valid_account_number_format?).at_least(1)
|
485
530
|
end
|
531
|
+
|
532
|
+
it 'runs local modulus checks' do
|
533
|
+
expect(iban).to receive(:valid_local_modulus_check?).at_least(1)
|
534
|
+
end
|
486
535
|
end
|
487
536
|
|
488
537
|
context 'for a valid Albanian IBAN' 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: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Grey Baker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|