ibandit 0.3.0 → 0.3.1
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 +4 -1
- data/README.md +30 -21
- data/TODO.md +0 -3
- data/lib/ibandit/iban_assembler.rb +2 -2
- data/lib/ibandit/local_details_cleaner.rb +39 -18
- data/lib/ibandit/version.rb +1 -1
- data/spec/ibandit/iban_assembler_spec.rb +38 -0
- data/spec/ibandit/local_details_cleaner_spec.rb +54 -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: 79bb8d78b071a6a3cfb74852b2f62641af34014d
|
4
|
+
data.tar.gz: 3868681d7108888d0259ff51f145bfefb481035f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3e0bb71e33693b7b7ad0a67a3b7aa911dd3d1ef0c0f2e1c1cfa4ca2a0815f2b4f3701cf76f6414fb674da299dc6c06cef64ad2edc98dfad990c5a9095dcff2e
|
7
|
+
data.tar.gz: 859b58bd96989e6bf05ab2127fb29939ad4db924bf816d97c5bfd86ee6b13d424d51ee7f6a3536def34375b17fab2bd9489f7dc1178ed4f98f06b921a294b3ad
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 0.3.1 - February 14, 2015
|
2
|
+
|
3
|
+
- Add Malta to LocalDetailsCleaner and IBANAssembler
|
4
|
+
|
1
5
|
## 0.3.0 - February 6, 2015
|
2
6
|
|
3
7
|
- Move IBANBuilder interface into main IBAN class by overloading its constructor
|
@@ -13,7 +17,6 @@
|
|
13
17
|
|
14
18
|
- Add GermanDetailsConverter
|
15
19
|
|
16
|
-
|
17
20
|
## 0.1.1 - January 8, 2015
|
18
21
|
|
19
22
|
- Add zero-padding to CheckDigit.spanish
|
data/README.md
CHANGED
@@ -138,7 +138,7 @@ To build an IBAN from local details:
|
|
138
138
|
|
139
139
|
```ruby
|
140
140
|
# Austria
|
141
|
-
iban = Ibandit::
|
141
|
+
iban = Ibandit::IBAN.new(
|
142
142
|
country_code: 'AT',
|
143
143
|
account_number: '234573201',
|
144
144
|
bank_code: '19043'
|
@@ -146,14 +146,14 @@ iban = Ibandit::IBANBuilder.build(
|
|
146
146
|
iban.iban # => "AT611904300234573201"
|
147
147
|
|
148
148
|
# Belgium
|
149
|
-
iban = Ibandit::
|
149
|
+
iban = Ibandit::IBAN.new(
|
150
150
|
country_code: 'BE',
|
151
151
|
account_number: '510-0075470-61'
|
152
152
|
)
|
153
153
|
iban.iban # => "BE62510007547061"
|
154
154
|
|
155
155
|
# Cyprus
|
156
|
-
iban = Ibandit::
|
156
|
+
iban = Ibandit::IBAN.new(
|
157
157
|
country_code: 'CY',
|
158
158
|
account_number: '1200527600',
|
159
159
|
bank_code: '002',
|
@@ -162,7 +162,7 @@ iban = Ibandit::IBANBuilder.build(
|
|
162
162
|
iban.iban # => "CY17002001280000001200527600"
|
163
163
|
|
164
164
|
# Germany
|
165
|
-
iban = Ibandit::
|
165
|
+
iban = Ibandit::IBAN.new(
|
166
166
|
country_code: 'DE',
|
167
167
|
bank_code: '37040044',
|
168
168
|
account_number: '0532013000'
|
@@ -170,14 +170,14 @@ iban = Ibandit::IBANBuilder.build(
|
|
170
170
|
iban.iban # => "DE89370400440532013000"
|
171
171
|
|
172
172
|
# Estonia
|
173
|
-
iban = Ibandit::
|
173
|
+
iban = Ibandit::IBAN.new(
|
174
174
|
country_code: 'EE',
|
175
175
|
account_number: '111020145685'
|
176
176
|
)
|
177
177
|
iban.iban # => "EE412200111020145685"
|
178
178
|
|
179
179
|
# Finland
|
180
|
-
iban = Ibandit::
|
180
|
+
iban = Ibandit::IBAN.new(
|
181
181
|
country_code: 'FI',
|
182
182
|
bank_code: '123456'
|
183
183
|
account_number: '785'
|
@@ -185,7 +185,7 @@ iban = Ibandit::IBANBuilder.build(
|
|
185
185
|
iban.iban # => "FI2112345600000785"
|
186
186
|
|
187
187
|
# France
|
188
|
-
iban = Ibandit::
|
188
|
+
iban = Ibandit::IBAN.new(
|
189
189
|
country_code: 'FR',
|
190
190
|
bank_code: '20041',
|
191
191
|
branch_code: '01005',
|
@@ -194,7 +194,7 @@ iban = Ibandit::IBANBuilder.build(
|
|
194
194
|
iban.iban # => "FR1420041010050500013M02606"
|
195
195
|
|
196
196
|
# United Kingdom
|
197
|
-
iban = Ibandit::
|
197
|
+
iban = Ibandit::IBAN.new(
|
198
198
|
country_code: 'GB',
|
199
199
|
bank_code: 'BARC', # optional if a BIC finder is configured
|
200
200
|
branch_code: '200000',
|
@@ -203,7 +203,7 @@ iban = Ibandit::IBANBuilder.build(
|
|
203
203
|
iban.iban # => "GB60BARC20000055779911"
|
204
204
|
|
205
205
|
# Ireland
|
206
|
-
iban = Ibandit::
|
206
|
+
iban = Ibandit::IBAN.new(
|
207
207
|
country_code: 'IE',
|
208
208
|
bank_code: 'AIBK', # optional if a BIC finder is configured
|
209
209
|
branch_code: '931152',
|
@@ -212,7 +212,7 @@ iban = Ibandit::IBANBuilder.build(
|
|
212
212
|
iban.iban # => "IE29AIBK93115212345678"
|
213
213
|
|
214
214
|
# Italy
|
215
|
-
iban = Ibandit::
|
215
|
+
iban = Ibandit::IBAN.new(
|
216
216
|
country_code: 'IT',
|
217
217
|
bank_code: '05428',
|
218
218
|
branch_code: '11101',
|
@@ -221,7 +221,7 @@ iban = Ibandit::IBANBuilder.build(
|
|
221
221
|
iban.iban # => "IT60X0542811101000000123456"
|
222
222
|
|
223
223
|
# Latvia
|
224
|
-
iban = Ibandit::
|
224
|
+
iban = Ibandit::IBAN.new(
|
225
225
|
country_code: 'LV',
|
226
226
|
account_number: '1234567890123',
|
227
227
|
bank_code: 'BANK'
|
@@ -229,7 +229,7 @@ iban = Ibandit::IBANBuilder.build(
|
|
229
229
|
iban.iban # => "LV72BANK1234567890123"
|
230
230
|
|
231
231
|
# Lithuania
|
232
|
-
iban = Ibandit::
|
232
|
+
iban = Ibandit::IBAN.new(
|
233
233
|
country_code: 'LT',
|
234
234
|
account_number: '11101001000',
|
235
235
|
bank_code: '10000'
|
@@ -237,7 +237,7 @@ iban = Ibandit::IBANBuilder.build(
|
|
237
237
|
iban.iban # => "LT1000011101001000"
|
238
238
|
|
239
239
|
# Luxembourg
|
240
|
-
iban = Ibandit::
|
240
|
+
iban = Ibandit::IBAN.new(
|
241
241
|
country_code: 'LU',
|
242
242
|
account_number: '1234567890123',
|
243
243
|
bank_code: 'BANK'
|
@@ -245,7 +245,7 @@ iban = Ibandit::IBANBuilder.build(
|
|
245
245
|
iban.iban # => "LU75BANK1234567890123"
|
246
246
|
|
247
247
|
# Monaco
|
248
|
-
iban = Ibandit::
|
248
|
+
iban = Ibandit::IBAN.new(
|
249
249
|
country_code: 'MC',
|
250
250
|
bank_code: '20041',
|
251
251
|
branch_code: '01005',
|
@@ -253,8 +253,17 @@ iban = Ibandit::IBANBuilder.build(
|
|
253
253
|
)
|
254
254
|
iban.iban # => "MC9320041010050500013M02606"
|
255
255
|
|
256
|
+
# Malta
|
257
|
+
iban = Ibandit::IBAN.new(
|
258
|
+
country_code: 'MT',
|
259
|
+
bank_code: 'MMEB', # optional if a BIC finder is configured
|
260
|
+
branch_code: '44093',
|
261
|
+
account_number: '9027293051'
|
262
|
+
)
|
263
|
+
iban.iban # => "MT98MMEB44093000000009027293051"
|
264
|
+
|
256
265
|
# The Netherlands
|
257
|
-
iban = Ibandit::
|
266
|
+
iban = Ibandit::IBAN.new(
|
258
267
|
country_code: 'NL',
|
259
268
|
account_number: '0417164300',
|
260
269
|
bank_code: 'ABNA'
|
@@ -262,7 +271,7 @@ iban = Ibandit::IBANBuilder.build(
|
|
262
271
|
iban.iban # => "NL91ABNA0417164300"
|
263
272
|
|
264
273
|
# Portugal
|
265
|
-
iban = Ibandit::
|
274
|
+
iban = Ibandit::IBAN.new(
|
266
275
|
country_code: 'PT',
|
267
276
|
bank_code: '0002',
|
268
277
|
branch_code: '0023',
|
@@ -271,7 +280,7 @@ iban = Ibandit::IBANBuilder.build(
|
|
271
280
|
iban.iban # => "PT50000200230023843000578"
|
272
281
|
|
273
282
|
# Slovakia
|
274
|
-
iban = Ibandit::
|
283
|
+
iban = Ibandit::IBAN.new(
|
275
284
|
country_code: 'SK',
|
276
285
|
bank_code: '1200',
|
277
286
|
account_number_prefix: '19',
|
@@ -280,7 +289,7 @@ iban = Ibandit::IBANBuilder.build(
|
|
280
289
|
iban.iban # => "SK3112000000198742637541"
|
281
290
|
|
282
291
|
# Slovenia
|
283
|
-
iban = Ibandit::
|
292
|
+
iban = Ibandit::IBAN.new(
|
284
293
|
country_code: 'SI',
|
285
294
|
bank_code: '19100',
|
286
295
|
account_number: '1234'
|
@@ -288,7 +297,7 @@ iban = Ibandit::IBANBuilder.build(
|
|
288
297
|
iban.iban # => "SI56191000000123438"
|
289
298
|
|
290
299
|
# Spain
|
291
|
-
iban = Ibandit::
|
300
|
+
iban = Ibandit::IBAN.new(
|
292
301
|
country_code: 'ES',
|
293
302
|
bank_code: '2310',
|
294
303
|
branch_code: '0001',
|
@@ -297,14 +306,14 @@ iban = Ibandit::IBANBuilder.build(
|
|
297
306
|
iban.iban # => "ES8023100001180000012345"
|
298
307
|
|
299
308
|
# Spain with 20 digit account number
|
300
|
-
iban = Ibandit::
|
309
|
+
iban = Ibandit::IBAN.new(
|
301
310
|
country_code: 'ES',
|
302
311
|
account_number: '23100001180000012345'
|
303
312
|
)
|
304
313
|
iban.iban # => "ES8023100001180000012345"
|
305
314
|
|
306
315
|
# San Marino
|
307
|
-
iban = Ibandit::
|
316
|
+
iban = Ibandit::IBAN.new(
|
308
317
|
country_code: 'SM',
|
309
318
|
bank_code: '05428',
|
310
319
|
branch_code: '11101',
|
data/TODO.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Ibandit
|
2
2
|
module IBANAssembler
|
3
|
-
SUPPORTED_COUNTRY_CODES = %w(AT BE CY DE EE ES FI FR GB IE IT LT LU LV MC
|
4
|
-
PT SI SK SM).freeze
|
3
|
+
SUPPORTED_COUNTRY_CODES = %w(AT BE CY DE EE ES FI FR GB IE IT LT LU LV MC MT
|
4
|
+
NL PT SI SK SM).freeze
|
5
5
|
|
6
6
|
EXCEPTION_COUNTRY_CODES = %w(IT SM BE).freeze
|
7
7
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Ibandit
|
2
2
|
module LocalDetailsCleaner
|
3
|
-
SUPPORTED_COUNTRY_CODES = %w(AT BE CY DE EE ES FI FR GB IE IT LT LU LV MC
|
4
|
-
PT SI SK SM).freeze
|
3
|
+
SUPPORTED_COUNTRY_CODES = %w(AT BE CY DE EE ES FI FR GB IE IT LT LU LV MC MT
|
4
|
+
NL PT SI SK SM).freeze
|
5
5
|
|
6
6
|
def self.clean(local_details)
|
7
7
|
country_code = local_details[:country_code]
|
@@ -31,7 +31,7 @@ module Ibandit
|
|
31
31
|
%i(bank_code account_number)
|
32
32
|
when 'BE', 'EE', 'ES'
|
33
33
|
%i(account_number)
|
34
|
-
when 'GB', 'IE'
|
34
|
+
when 'GB', 'IE', 'MT'
|
35
35
|
if Ibandit.bic_finder.nil? then %i(bank_code branch_code account_number)
|
36
36
|
else %i(branch_code account_number)
|
37
37
|
end
|
@@ -200,21 +200,6 @@ module Ibandit
|
|
200
200
|
}
|
201
201
|
end
|
202
202
|
|
203
|
-
def self.clean_lt_details(local_details)
|
204
|
-
# Lithuanian national bank details were replaced with IBANs in 2004.
|
205
|
-
local_details
|
206
|
-
end
|
207
|
-
|
208
|
-
def self.clean_lu_details(local_details)
|
209
|
-
# Luxembourgian national bank details were replaced with IBANs in 2002.
|
210
|
-
local_details
|
211
|
-
end
|
212
|
-
|
213
|
-
def self.clean_lv_details(local_details)
|
214
|
-
# Latvian national bank details were replaced with IBANs in 2004.
|
215
|
-
local_details
|
216
|
-
end
|
217
|
-
|
218
203
|
def self.clean_ie_details(local_details)
|
219
204
|
# Ireland uses the same local details as the United Kingdom
|
220
205
|
branch_code = local_details[:branch_code].gsub(/[-\s]/, '')
|
@@ -245,11 +230,47 @@ module Ibandit
|
|
245
230
|
}
|
246
231
|
end
|
247
232
|
|
233
|
+
def self.clean_lt_details(local_details)
|
234
|
+
# Lithuanian national bank details were replaced with IBANs in 2004.
|
235
|
+
local_details
|
236
|
+
end
|
237
|
+
|
238
|
+
def self.clean_lu_details(local_details)
|
239
|
+
# Luxembourgian national bank details were replaced with IBANs in 2002.
|
240
|
+
local_details
|
241
|
+
end
|
242
|
+
|
243
|
+
def self.clean_lv_details(local_details)
|
244
|
+
# Latvian national bank details were replaced with IBANs in 2004.
|
245
|
+
local_details
|
246
|
+
end
|
247
|
+
|
248
248
|
def self.clean_mc_details(local_details)
|
249
249
|
# Monaco uses the same local details method as France
|
250
250
|
clean_fr_details(local_details)
|
251
251
|
end
|
252
252
|
|
253
|
+
def self.clean_mt_details(local_details)
|
254
|
+
# Add leading zeros to account number if < 18 digits.
|
255
|
+
branch_code = local_details[:branch_code]
|
256
|
+
|
257
|
+
if local_details[:bank_code]
|
258
|
+
bank_code = local_details[:bank_code]
|
259
|
+
else
|
260
|
+
bic = Ibandit.find_bic('MT', branch_code)
|
261
|
+
bank_code = bic.nil? ? nil : bic.slice(0, 4)
|
262
|
+
end
|
263
|
+
|
264
|
+
account_number = local_details[:account_number].gsub(/[-\s]/, '')
|
265
|
+
account_number = account_number.rjust(18, '0')
|
266
|
+
|
267
|
+
{
|
268
|
+
bank_code: bank_code,
|
269
|
+
branch_code: branch_code,
|
270
|
+
account_number: account_number
|
271
|
+
}
|
272
|
+
end
|
273
|
+
|
253
274
|
def self.clean_nl_details(local_details)
|
254
275
|
# Add leading zeros to account number if < 10 digits.
|
255
276
|
{
|
data/lib/ibandit/version.rb
CHANGED
@@ -432,6 +432,44 @@ describe Ibandit::IBANAssembler do
|
|
432
432
|
end
|
433
433
|
end
|
434
434
|
|
435
|
+
context 'with MT as the country_code' do
|
436
|
+
let(:args) do
|
437
|
+
{
|
438
|
+
country_code: 'MT',
|
439
|
+
bank_code: 'MMEB',
|
440
|
+
branch_code: '44093',
|
441
|
+
account_number: '000000009027293051'
|
442
|
+
}
|
443
|
+
end
|
444
|
+
|
445
|
+
it { is_expected.to eq('MT98MMEB44093000000009027293051') }
|
446
|
+
|
447
|
+
it_behaves_like(
|
448
|
+
'allows round trips',
|
449
|
+
'MT98 MMEB 4409 3000 0000 0902 7293 051'
|
450
|
+
)
|
451
|
+
|
452
|
+
context 'without a branch_code' do
|
453
|
+
before { args.delete(:branch_code) }
|
454
|
+
it { is_expected.to be_nil }
|
455
|
+
end
|
456
|
+
|
457
|
+
context 'without an account_number' do
|
458
|
+
before { args.delete(:account_number) }
|
459
|
+
it { is_expected.to be_nil }
|
460
|
+
end
|
461
|
+
|
462
|
+
context 'without a bank_code' do
|
463
|
+
before { args.delete(:bank_code) }
|
464
|
+
it { is_expected.to be_nil }
|
465
|
+
end
|
466
|
+
|
467
|
+
context 'with a non-numeric branch code' do
|
468
|
+
before { args[:branch_code] = 'abc123' }
|
469
|
+
it { is_expected.to be_nil }
|
470
|
+
end
|
471
|
+
end
|
472
|
+
|
435
473
|
context 'with NL as the country_code' do
|
436
474
|
let(:args) do
|
437
475
|
{
|
@@ -546,6 +546,60 @@ describe Ibandit::LocalDetailsCleaner do
|
|
546
546
|
end
|
547
547
|
end
|
548
548
|
|
549
|
+
context 'Malta' do
|
550
|
+
let(:country_code) { 'MT' }
|
551
|
+
let(:bank_code) { 'MMEB' }
|
552
|
+
let(:branch_code) { '44093' }
|
553
|
+
let(:account_number) { '000000009027293051' }
|
554
|
+
|
555
|
+
it { is_expected.to eq(local_details) }
|
556
|
+
|
557
|
+
context 'with the account number spaced' do
|
558
|
+
let(:account_number) { '9027 2930 51' }
|
559
|
+
its([:account_number]) { is_expected.to eq('000000009027293051') }
|
560
|
+
end
|
561
|
+
|
562
|
+
context 'with the account number hyphenated' do
|
563
|
+
let(:account_number) { '9027-2930-51' }
|
564
|
+
its([:account_number]) { is_expected.to eq('000000009027293051') }
|
565
|
+
end
|
566
|
+
|
567
|
+
context 'without a branch code' do
|
568
|
+
let(:branch_code) { nil }
|
569
|
+
it { is_expected.to eq(local_details) }
|
570
|
+
end
|
571
|
+
|
572
|
+
context 'without a bank code' do
|
573
|
+
let(:bank_code) { nil }
|
574
|
+
it { is_expected.to eq(local_details) }
|
575
|
+
|
576
|
+
context 'with a BIC finder set' do
|
577
|
+
let(:bic_finder) { double }
|
578
|
+
before do
|
579
|
+
allow(bic_finder).to receive(:call).with('MT', '44093').
|
580
|
+
and_return('MMEBMTMTXXX')
|
581
|
+
Ibandit.bic_finder = bic_finder
|
582
|
+
end
|
583
|
+
after { Ibandit.bic_finder = nil }
|
584
|
+
|
585
|
+
its([:bank_code]) { is_expected.to eq('MMEB') }
|
586
|
+
end
|
587
|
+
end
|
588
|
+
|
589
|
+
context 'with a bank code and BIC finder set' do
|
590
|
+
let(:bank_code) { 'OVERRIDE' }
|
591
|
+
let(:bic_finder) { double }
|
592
|
+
before do
|
593
|
+
allow(bic_finder).to receive(:call).with('MT', '44093').
|
594
|
+
and_return('MMEBMTMTXXX')
|
595
|
+
Ibandit.bic_finder = bic_finder
|
596
|
+
end
|
597
|
+
after { Ibandit.bic_finder = nil }
|
598
|
+
|
599
|
+
its([:bank_code]) { is_expected.to eq('OVERRIDE') }
|
600
|
+
end
|
601
|
+
end
|
602
|
+
|
549
603
|
context 'Netherlands' do
|
550
604
|
let(:country_code) { 'NL' }
|
551
605
|
let(:bank_code) { 'ABNA' }
|
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.1
|
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-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|