ibandit 0.6.5 → 0.6.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 823a2e3a40462ece9f02dca4e2442017d1372b57
4
- data.tar.gz: 153d927db1dc73912738f0f49396a97fb8e17024
3
+ metadata.gz: f800e698be58f3378b478f197526c5d2bdec8770
4
+ data.tar.gz: f8650d0eca790ea52617ea1b46da45c5c7f47f3a
5
5
  SHA512:
6
- metadata.gz: 14cc8a274cd0b5d41249a4d3d043a582aba730b096438d206de9aa008f88672f8f451e0ba196b1780443b13cb592af93b3706c3125ee05e6531989ff80c20239
7
- data.tar.gz: 7c060ed0b1a379d0617210c8ab0e485a5c1f4ee32e66c706a27fbdd774c9c9926a8311f5ebac4aa3fb7d1d9005ce3ba9399a9b3baa4dd8c9a0a8734405a04e5a
6
+ metadata.gz: 07b6d6a4a99a90ebb8810b11aed7c8de97d8ce27c5c25a12902761650c49a88a2cd947f9e1fda776917a90d57cb20f55d9f871cd2d3977baf971bb831a9e9955
7
+ data.tar.gz: 0b895a47575ec3722376372b938218363d7bd996345932d4e6627242e5ca50b47680f7fd3cd425fca02769a59e42f7f08344660e8025d1b4068177e317576f35
data/CHANGELOG.md CHANGED
@@ -1,4 +1,6 @@
1
- ## Unreleased
1
+ ## 0.6.6 - July 31, 2015
2
+ - Add Croatia to LocalDetailsCleaner and IBANAssembler
3
+ - Add Czech Republic to LocalDetailsCleaner and IBANAssembler
2
4
 
3
5
  ## 0.6.5 - July 30, 2015
4
6
  - Add Romania to LocalDetailsCleaner and IBANAssembler
data/README.md CHANGED
@@ -183,6 +183,13 @@ iban = Ibandit::IBAN.new(
183
183
  )
184
184
  iban.iban # => "BG80BNBG96611020345678"
185
185
 
186
+ # Croatia
187
+ iban = Ibandit::IBAN.new(
188
+ country_code: 'HR',
189
+ account_number: '1001005-1863000160',
190
+ )
191
+ iban.iban # => "HR1210010051863000160"
192
+
186
193
  # Cyprus
187
194
  iban = Ibandit::IBAN.new(
188
195
  country_code: 'CY',
@@ -192,13 +199,14 @@ iban = Ibandit::IBAN.new(
192
199
  )
193
200
  iban.iban # => "CY17002001280000001200527600"
194
201
 
195
- # Germany
202
+ # Czech Republic
196
203
  iban = Ibandit::IBAN.new(
197
- country_code: 'DE',
198
- bank_code: '37040044',
199
- account_number: '0532013000'
204
+ country_code: 'CZ',
205
+ bank_code: '0800',
206
+ account_number_prefix: '19',
207
+ account_number: '2000145399'
200
208
  )
201
- iban.iban # => "DE89370400440532013000"
209
+ iban.iban # => "CZ6508000000192000145399"
202
210
 
203
211
  # Denmark
204
212
  iban = Ibandit::IBAN.new(
@@ -231,14 +239,13 @@ iban = Ibandit::IBAN.new(
231
239
  )
232
240
  iban.iban # => "FR1420041010050500013M02606"
233
241
 
234
- # United Kingdom
242
+ # Germany
235
243
  iban = Ibandit::IBAN.new(
236
- country_code: 'GB',
237
- bank_code: 'BARC', # optional if a BIC finder is configured
238
- branch_code: '200000',
239
- account_number: '55779911'
244
+ country_code: 'DE',
245
+ bank_code: '37040044',
246
+ account_number: '0532013000'
240
247
  )
241
- iban.iban # => "GB60BARC20000055779911"
248
+ iban.iban # => "DE89370400440532013000"
242
249
 
243
250
  # Greece
244
251
  iban = Ibandit::IBAN.new(
@@ -390,15 +397,6 @@ iban = Ibandit::IBAN.new(
390
397
  iban.iban # => "SI56191000000123438"
391
398
 
392
399
  # Spain
393
- iban = Ibandit::IBAN.new(
394
- country_code: 'ES',
395
- bank_code: '2310',
396
- branch_code: '0001',
397
- account_number: '180000012345'
398
- )
399
- iban.iban # => "ES8023100001180000012345"
400
-
401
- # Spain with 20 digit account number
402
400
  iban = Ibandit::IBAN.new(
403
401
  country_code: 'ES',
404
402
  account_number: '23100001180000012345'
@@ -411,6 +409,15 @@ iban = Ibandit::IBAN.new(
411
409
  account_number: '7507-1211203'
412
410
  )
413
411
  iban.iban # => "SE2680000000075071211203"
412
+
413
+ # United Kingdom
414
+ iban = Ibandit::IBAN.new(
415
+ country_code: 'GB',
416
+ bank_code: 'BARC', # optional if a BIC finder is configured
417
+ branch_code: '200000',
418
+ account_number: '55779911'
419
+ )
420
+ iban.iban # => "GB60BARC20000055779911"
414
421
  ```
415
422
 
416
423
  ## Other libraries
@@ -102,6 +102,23 @@ module Ibandit
102
102
  result < 10 ? result.to_s : '0'
103
103
  end
104
104
 
105
+ # Currently unused in this gem. This method calculates the last digit
106
+ # of a Croatian account number when given the initial digits.
107
+ def self.croatian(string)
108
+ calculation = string.chars.map.reduce(10) do |total, char|
109
+ unless char.to_i.to_s == char
110
+ raise InvalidCharacterError,
111
+ "Unexpected non-numeric character '#{char}'"
112
+ end
113
+
114
+ calc = (char.to_i + total) % 10
115
+ calc = calc == 0 ? 10 : calc
116
+ (calc * 2) % 11
117
+ end
118
+
119
+ ((11 - calculation) % 10).to_s
120
+ end
121
+
105
122
  # Currently unused in this gem. This method calculates the penultimate digit
106
123
  # of an Icelandic kennitala (included in the account number) when given the
107
124
  # first 8 digits.
@@ -1,7 +1,7 @@
1
1
  module Ibandit
2
2
  module IBANAssembler
3
- SUPPORTED_COUNTRY_CODES = %w(AT BE BG CY DE DK EE ES FI FR GB GR HU IE IS IT
4
- LT LU LV MC MT NL NO PL PT RO SE SI SK
3
+ SUPPORTED_COUNTRY_CODES = %w(AT BE BG CY CZ DE DK EE ES FI FR GB GR HR HU IE
4
+ IS IT LT LU LV MC MT NL NO PL PT RO SE SI SK
5
5
  SM).freeze
6
6
 
7
7
  EXCEPTION_COUNTRY_CODES = %w(IT SM BE).freeze
@@ -85,7 +85,7 @@ module Ibandit
85
85
 
86
86
  def self.required_fields(country_code)
87
87
  case country_code
88
- when *%w(AT CY DE DK EE FI IS LT LU LV NL NO PL RO SE SI SK)
88
+ when *%w(AT CY CZ DE DK EE FI HR IS LT LU LV NL NO PL RO SE SI SK)
89
89
  %i(bank_code account_number)
90
90
  when 'BE'
91
91
  %i(account_number)
@@ -100,7 +100,7 @@ module Ibandit
100
100
  when 'BE' then %i(bank_code account_number)
101
101
  when 'CY' then %i(bank_code branch_code account_number)
102
102
  when 'IT' then %i(bank_code branch_code account_number check_digit)
103
- when 'SK' then %i(bank_code account_number account_number_prefix)
103
+ when 'CZ', 'SK' then %i(bank_code account_number account_number_prefix)
104
104
  else required_fields(country_code)
105
105
  end
106
106
  end
@@ -1,7 +1,7 @@
1
1
  module Ibandit
2
2
  module LocalDetailsCleaner
3
- SUPPORTED_COUNTRY_CODES = %w(AT BE BG CY DE DK EE ES FI FR GB GR HU IE IS IT
4
- LT LU LV MC MT NL NO PL PT RO SE SI SK
3
+ SUPPORTED_COUNTRY_CODES = %w(AT BE BG CY CZ DE DK EE ES FI FR GB GR HR HU IE
4
+ IS IT LT LU LV MC MT NL NO PL PT RO SE SI SK
5
5
  SM).freeze
6
6
 
7
7
  def self.clean(local_details)
@@ -30,7 +30,7 @@ module Ibandit
30
30
  case country_code
31
31
  when 'AT', 'CY', 'DE', 'FI', 'LT', 'LU', 'LV', 'NL', 'RO', 'SI', 'SK'
32
32
  %i(bank_code account_number)
33
- when 'BE', 'DK', 'EE', 'ES', 'HU', 'IS', 'NO', 'PL', 'SE'
33
+ when 'BE', 'CZ', 'DK', 'EE', 'ES', 'HR', 'HU', 'IS', 'NO', 'PL', 'SE'
34
34
  %i(account_number)
35
35
  when 'GB', 'IE', 'MT'
36
36
  if Ibandit.bic_finder.nil? then %i(bank_code branch_code account_number)
@@ -95,6 +95,26 @@ module Ibandit
95
95
  }
96
96
  end
97
97
 
98
+ def self.clean_cz_details(local_details)
99
+ # The SWIFT definition of a Czech IBAN includes both the account
100
+ # number prefix and the account number. This method therefore supports
101
+ # passing those fields concatenated.
102
+ account_number =
103
+ if local_details.include?(:account_number_prefix)
104
+ [
105
+ local_details[:account_number_prefix].rjust(6, '0'),
106
+ local_details[:account_number].rjust(10, '0')
107
+ ].join
108
+ else
109
+ local_details[:account_number].tr('-', '').rjust(16, '0')
110
+ end
111
+
112
+ {
113
+ bank_code: local_details[:bank_code],
114
+ account_number: account_number
115
+ }
116
+ end
117
+
98
118
  def self.clean_de_details(local_details)
99
119
  # Account number may be up to 10 digits long.
100
120
  # Add leading zeros to account number if < 10 digits.
@@ -233,6 +253,20 @@ module Ibandit
233
253
  local_details
234
254
  end
235
255
 
256
+ def self.clean_hr_details(local_details)
257
+ # This method supports being passed the component IBAN parts, as defined
258
+ # by SWIFT, or a single traditional-format string split by a '-'.
259
+ return local_details if local_details[:bank_code]
260
+ return local_details unless local_details[:account_number].include?('-')
261
+
262
+ bank_code, account_number = local_details[:account_number].split('-', 2)
263
+
264
+ {
265
+ bank_code: bank_code,
266
+ account_number: account_number
267
+ }
268
+ end
269
+
236
270
  def self.clean_hu_details(local_details)
237
271
  # This method supports being passed the component IBAN parts, as defined
238
272
  # by SWIFT, or a single 16 or 24 digit string.
@@ -423,23 +457,8 @@ module Ibandit
423
457
  end
424
458
 
425
459
  def self.clean_sk_details(local_details)
426
- # The SWIFT definition of a Slovakian IBAN includes both the account
427
- # number prefix and the account number. This method therefore supports
428
- # passing those fields concatenated.
429
- account_number =
430
- if local_details.include?(:account_number_prefix)
431
- [
432
- local_details[:account_number_prefix].rjust(6, '0'),
433
- local_details[:account_number].rjust(10, '0')
434
- ].join
435
- else
436
- local_details[:account_number].tr('-', '').rjust(16, '0')
437
- end
438
-
439
- {
440
- bank_code: local_details[:bank_code],
441
- account_number: account_number
442
- }
460
+ # Slovakia uses the same local details method as the Czech Republic
461
+ clean_cz_details(local_details)
443
462
  end
444
463
 
445
464
  def self.clean_sm_details(local_details)
@@ -1,3 +1,3 @@
1
1
  module Ibandit
2
- VERSION = '0.6.5'.freeze
2
+ VERSION = '0.6.6'.freeze
3
3
  end
@@ -126,6 +126,28 @@ describe Ibandit::CheckDigit do
126
126
  end
127
127
  end
128
128
 
129
+ describe '.croatian' do
130
+ subject { described_class.croatian(account_number) }
131
+
132
+ let(:account_number) { '0823' }
133
+ it { is_expected.to eq('5') }
134
+
135
+ context 'with another account number (double checking!)' do
136
+ let(:account_number) { '100100' }
137
+ it { is_expected.to eq('5') }
138
+ end
139
+
140
+ context 'with all zeros' do
141
+ let(:account_number) { '186300016' }
142
+ it { is_expected.to eq('0') }
143
+ end
144
+
145
+ context 'with a non-numeric character' do
146
+ let(:account_number) { '1BAD2014' }
147
+ specify { expect { subject }.to raise_error(/non-numeric character/) }
148
+ end
149
+ end
150
+
129
151
  describe '.icelandic' do
130
152
  subject { described_class.icelandic(kennitala) }
131
153
 
@@ -123,6 +123,30 @@ describe Ibandit::IBANAssembler do
123
123
  end
124
124
  end
125
125
 
126
+ context 'with CZ as the country_code' do
127
+ let(:args) do
128
+ {
129
+ country_code: 'CZ',
130
+ bank_code: '0800',
131
+ account_number: '0000192000145399'
132
+ }
133
+ end
134
+
135
+ it { is_expected.to eq('CZ6508000000192000145399') }
136
+
137
+ it_behaves_like 'allows round trips', 'CZ65 0800 0000 1920 0014 5399'
138
+
139
+ context 'without a bank_code' do
140
+ before { args.delete(:bank_code) }
141
+ it { is_expected.to be_nil }
142
+ end
143
+
144
+ context 'without an account_number' do
145
+ before { args.delete(:account_number) }
146
+ it { is_expected.to be_nil }
147
+ end
148
+ end
149
+
126
150
  context 'with DE as the country_code' do
127
151
  let(:args) do
128
152
  { country_code: 'DE',
@@ -339,6 +363,28 @@ describe Ibandit::IBANAssembler do
339
363
  end
340
364
  end
341
365
 
366
+ context 'with HR as the country_code' do
367
+ let(:args) do
368
+ { country_code: 'HR',
369
+ bank_code: '1001005',
370
+ account_number: '1863000160' }
371
+ end
372
+
373
+ it { is_expected.to eq('HR1210010051863000160') }
374
+
375
+ it_behaves_like 'allows round trips', 'HR12 1001 0051 8630 0016 0'
376
+
377
+ context 'without a bank_code' do
378
+ before { args.delete(:bank_code) }
379
+ it { is_expected.to be_nil }
380
+ end
381
+
382
+ context 'without an account_number' do
383
+ before { args.delete(:account_number) }
384
+ it { is_expected.to be_nil }
385
+ end
386
+ end
387
+
342
388
  context 'with HU as the country_code' do
343
389
  let(:args) do
344
390
  {
@@ -152,6 +152,37 @@ describe Ibandit::LocalDetailsCleaner do
152
152
  end
153
153
  end
154
154
 
155
+ context 'Czech Republic' do
156
+ let(:country_code) { 'CZ' }
157
+ let(:bank_code) { '0800' }
158
+ let(:account_number) { '0000192000145399' }
159
+
160
+ it { is_expected.to eq(local_details) }
161
+
162
+ context 'with an account number prefix' do
163
+ let(:prefix) { '000019' }
164
+ let(:account_number) { '2000145399' }
165
+ before { local_details.merge!(account_number_prefix: prefix) }
166
+
167
+ its([:account_number]) { is_expected.to eq('0000192000145399') }
168
+
169
+ context 'which needs zero-padding' do
170
+ let(:prefix) { '19' }
171
+ its([:account_number]) { is_expected.to eq('0000192000145399') }
172
+ end
173
+ end
174
+
175
+ context 'without a bank code' do
176
+ let(:bank_code) { nil }
177
+ it { is_expected.to eq(local_details) }
178
+ end
179
+
180
+ context 'without an account number' do
181
+ let(:account_number) { nil }
182
+ it { is_expected.to eq(local_details) }
183
+ end
184
+ end
185
+
155
186
  context 'Germany' do
156
187
  let(:country_code) { 'DE' }
157
188
  let(:bank_code) { '37040044' }
@@ -422,6 +453,33 @@ describe Ibandit::LocalDetailsCleaner do
422
453
  end
423
454
  end
424
455
 
456
+ context 'Croatia' do
457
+ let(:country_code) { 'HR' }
458
+ let(:bank_code) { '1001005' }
459
+ let(:account_number) { '1863000160' }
460
+
461
+ it { is_expected.to eq(local_details) }
462
+
463
+ context 'with bank code in the account number' do
464
+ let(:bank_code) { nil }
465
+ let(:branch_code) { nil }
466
+ let(:account_number) { '1001005-1863000160' }
467
+
468
+ its([:bank_code]) { is_expected.to eq('1001005') }
469
+ its([:account_number]) { is_expected.to eq('1863000160') }
470
+
471
+ context 'with a badly formatted account number' do
472
+ let(:account_number) { '1863000160' }
473
+ it { is_expected.to eq(local_details) }
474
+ end
475
+ end
476
+
477
+ context 'without an account number' do
478
+ let(:account_number) { nil }
479
+ it { is_expected.to eq(local_details) }
480
+ end
481
+ end
482
+
425
483
  context 'Hungary' do
426
484
  let(:country_code) { 'HU' }
427
485
  let(:bank_code) { '117' }
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.6.5
4
+ version: 0.6.6
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-07-30 00:00:00.000000000 Z
11
+ date: 2015-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec