ibandit 0.11.10 → 0.11.11
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 -0
- data/lib/ibandit/constants.rb +5 -0
- data/lib/ibandit/pseudo_iban_assembler.rb +5 -1
- data/lib/ibandit/pseudo_iban_splitter.rb +6 -1
- data/lib/ibandit/version.rb +1 -1
- data/spec/ibandit/constants_spec.rb +14 -0
- data/spec/ibandit/iban_spec.rb +56 -5
- data/spec/ibandit/pseudo_iban_assembler_spec.rb +12 -0
- data/spec/ibandit/pseudo_iban_splitter_spec.rb +36 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7cf488eed67769ff39b6249be1b7689359f9eb4a
|
4
|
+
data.tar.gz: 0f32aaf43214999c417badf26c730a334bdd3610
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20202b4dd9710f4912bbef1b0c7f108c1c65aa6c1fc6c279e9b4538df4e204e1aade6dd4c2ce5b28fe8351c46d24363c75125e2c1f7c75e57ce3dce2d6a54bac
|
7
|
+
data.tar.gz: f918279bb0f3943d334ae6f1fbc67f38357d3902a0e09af53f8187c7879232137a54b45ae0660f82472c30411a40519a6087f00414dee02e4ca6678c8d6e4ed7
|
data/CHANGELOG.md
CHANGED
data/lib/ibandit/constants.rb
CHANGED
@@ -10,6 +10,11 @@ module Ibandit
|
|
10
10
|
|
11
11
|
PSEUDO_IBAN_CHECK_DIGITS = "ZZ".freeze
|
12
12
|
|
13
|
+
PSEUDO_IBAN_PADDING_CHARACTER_FOR = {
|
14
|
+
"SE" => "X", # Using X for backwards compatibility
|
15
|
+
"AU" => "_", # Using _ because AU account numbers are alphanumeric
|
16
|
+
}.freeze
|
17
|
+
|
13
18
|
SUPPORTED_COUNTRY_CODES = (
|
14
19
|
CONSTRUCTABLE_IBAN_COUNTRY_CODES +
|
15
20
|
DECONSTRUCTABLE_IBAN_COUNTRY_CODES +
|
@@ -35,6 +35,10 @@ module Ibandit
|
|
35
35
|
Constants::PSEUDO_IBAN_COUNTRY_CODES.include?(@country_code)
|
36
36
|
end
|
37
37
|
|
38
|
+
def padding_character
|
39
|
+
Constants::PSEUDO_IBAN_PADDING_CHARACTER_FOR[@country_code]
|
40
|
+
end
|
41
|
+
|
38
42
|
def bank_code_valid?
|
39
43
|
param_valid?(@bank_code, :pseudo_iban_bank_code_length)
|
40
44
|
end
|
@@ -67,7 +71,7 @@ module Ibandit
|
|
67
71
|
|
68
72
|
def pad(number, length_key)
|
69
73
|
return if number.nil?
|
70
|
-
number.rjust(structure[length_key],
|
74
|
+
number.rjust(structure[length_key], padding_character)
|
71
75
|
end
|
72
76
|
|
73
77
|
def structure
|
@@ -65,12 +65,17 @@ module Ibandit
|
|
65
65
|
Constants::PSEUDO_IBAN_COUNTRY_CODES.include?(country_code)
|
66
66
|
end
|
67
67
|
|
68
|
+
def padding_character
|
69
|
+
Constants::PSEUDO_IBAN_PADDING_CHARACTER_FOR[country_code]
|
70
|
+
end
|
71
|
+
|
68
72
|
def structure
|
69
73
|
Ibandit.structures[country_code]
|
70
74
|
end
|
71
75
|
|
72
76
|
def remove_leading_padding(input)
|
73
|
-
|
77
|
+
return unless padding_character
|
78
|
+
input.gsub(/\A#{padding_character}+/, "")
|
74
79
|
end
|
75
80
|
end
|
76
81
|
end
|
data/lib/ibandit/version.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Ibandit::Constants do
|
4
|
+
Ibandit::Constants::PSEUDO_IBAN_COUNTRY_CODES.each do |country_code|
|
5
|
+
context country_code do
|
6
|
+
it "has padding character" do
|
7
|
+
padding =
|
8
|
+
Ibandit::Constants::PSEUDO_IBAN_PADDING_CHARACTER_FOR[country_code]
|
9
|
+
expect(padding).to_not be_nil
|
10
|
+
expect(padding.length).to eq(1)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/spec/ibandit/iban_spec.rb
CHANGED
@@ -202,19 +202,53 @@ describe Ibandit::IBAN do
|
|
202
202
|
its(:to_s) { is_expected.to eq("") }
|
203
203
|
end
|
204
204
|
|
205
|
-
context "and a 10 characters
|
206
|
-
let(:account_number) { "
|
205
|
+
context "and a 10 characters account number" do
|
206
|
+
let(:account_number) { "ABC1234567" }
|
207
207
|
|
208
208
|
its(:country_code) { is_expected.to eq("AU") }
|
209
209
|
its(:bank_code) { is_expected.to be_nil }
|
210
210
|
its(:branch_code) { is_expected.to eq("123456") }
|
211
|
-
its(:account_number) { is_expected.to eq("
|
211
|
+
its(:account_number) { is_expected.to eq("ABC1234567") }
|
212
212
|
its(:swift_bank_code) { is_expected.to be_nil }
|
213
213
|
its(:swift_branch_code) { is_expected.to eq("123456") }
|
214
|
-
its(:swift_account_number) { is_expected.to eq("
|
214
|
+
its(:swift_account_number) { is_expected.to eq("ABC1234567") }
|
215
215
|
its(:swift_national_id) { is_expected.to eq("123456") }
|
216
216
|
its(:iban) { is_expected.to be_nil }
|
217
|
-
its(:pseudo_iban) { is_expected.to eq("
|
217
|
+
its(:pseudo_iban) { is_expected.to eq("AUZZ123456ABC1234567") }
|
218
|
+
its(:valid?) { is_expected.to eq(true) }
|
219
|
+
its(:to_s) { is_expected.to eq("") }
|
220
|
+
end
|
221
|
+
|
222
|
+
context "and a 9 characters account number starting with X" do
|
223
|
+
let(:account_number) { "XX1234567" }
|
224
|
+
|
225
|
+
its(:country_code) { is_expected.to eq("AU") }
|
226
|
+
its(:bank_code) { is_expected.to be_nil }
|
227
|
+
its(:branch_code) { is_expected.to eq("123456") }
|
228
|
+
its(:account_number) { is_expected.to eq("0XX1234567") }
|
229
|
+
its(:swift_bank_code) { is_expected.to be_nil }
|
230
|
+
its(:swift_branch_code) { is_expected.to eq("123456") }
|
231
|
+
its(:swift_account_number) { is_expected.to eq("0XX1234567") }
|
232
|
+
its(:swift_national_id) { is_expected.to eq("123456") }
|
233
|
+
its(:iban) { is_expected.to be_nil }
|
234
|
+
its(:pseudo_iban) { is_expected.to eq("AUZZ1234560XX1234567") }
|
235
|
+
its(:valid?) { is_expected.to eq(true) }
|
236
|
+
its(:to_s) { is_expected.to eq("") }
|
237
|
+
end
|
238
|
+
|
239
|
+
context "and a 10 characters account number starting with X" do
|
240
|
+
let(:account_number) { "XX12345678" }
|
241
|
+
|
242
|
+
its(:country_code) { is_expected.to eq("AU") }
|
243
|
+
its(:bank_code) { is_expected.to be_nil }
|
244
|
+
its(:branch_code) { is_expected.to eq("123456") }
|
245
|
+
its(:account_number) { is_expected.to eq("XX12345678") }
|
246
|
+
its(:swift_bank_code) { is_expected.to be_nil }
|
247
|
+
its(:swift_branch_code) { is_expected.to eq("123456") }
|
248
|
+
its(:swift_account_number) { is_expected.to eq("XX12345678") }
|
249
|
+
its(:swift_national_id) { is_expected.to eq("123456") }
|
250
|
+
its(:iban) { is_expected.to be_nil }
|
251
|
+
its(:pseudo_iban) { is_expected.to eq("AUZZ123456XX12345678") }
|
218
252
|
its(:valid?) { is_expected.to eq(true) }
|
219
253
|
its(:to_s) { is_expected.to eq("") }
|
220
254
|
end
|
@@ -235,6 +269,23 @@ describe Ibandit::IBAN do
|
|
235
269
|
its(:pseudo_iban) { is_expected.to eq("AUZZ1234560123456789") }
|
236
270
|
its(:valid?) { is_expected.to eq(true) }
|
237
271
|
its(:to_s) { is_expected.to eq("") }
|
272
|
+
|
273
|
+
context "with a leading X on the account number" do
|
274
|
+
let(:arg) { "AUZZ123456XABCD12345" }
|
275
|
+
|
276
|
+
its(:country_code) { is_expected.to eq("AU") }
|
277
|
+
its(:bank_code) { is_expected.to be_nil }
|
278
|
+
its(:branch_code) { is_expected.to eq("123456") }
|
279
|
+
its(:account_number) { is_expected.to eq("XABCD12345") }
|
280
|
+
its(:swift_bank_code) { is_expected.to be_nil }
|
281
|
+
its(:swift_branch_code) { is_expected.to eq("123456") }
|
282
|
+
its(:swift_account_number) { is_expected.to eq("XABCD12345") }
|
283
|
+
its(:swift_national_id) { is_expected.to eq("123456") }
|
284
|
+
its(:iban) { is_expected.to be_nil }
|
285
|
+
its(:pseudo_iban) { is_expected.to eq("AUZZ123456XABCD12345") }
|
286
|
+
its(:valid?) { is_expected.to eq(true) }
|
287
|
+
its(:to_s) { is_expected.to eq("") }
|
288
|
+
end
|
238
289
|
end
|
239
290
|
|
240
291
|
context "when the input is an invalid Australian pseudo-IBAN" do
|
@@ -52,6 +52,18 @@ describe Ibandit::PseudoIBANAssembler do
|
|
52
52
|
it { is_expected.to eq("AUZZ123456A123456789") }
|
53
53
|
end
|
54
54
|
|
55
|
+
context "with valid parameters and padding" do
|
56
|
+
let(:local_details) do
|
57
|
+
{
|
58
|
+
country_code: "AU",
|
59
|
+
branch_code: "123456",
|
60
|
+
account_number: "XABC",
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
it { is_expected.to eq("AUZZ123456______XABC") }
|
65
|
+
end
|
66
|
+
|
55
67
|
context "without a branch code" do
|
56
68
|
let(:local_details) do
|
57
69
|
{
|
@@ -23,5 +23,41 @@ describe Ibandit::PseudoIBANSplitter do
|
|
23
23
|
its([:branch_code]) { is_expected.to eq("123456") }
|
24
24
|
its([:account_number]) { is_expected.to eq("123456789") }
|
25
25
|
end
|
26
|
+
|
27
|
+
context "for an australian pseudo-IBAN with padding" do
|
28
|
+
let(:pseudo_iban) { "AUZZ123456______XABC" }
|
29
|
+
|
30
|
+
its([:country_code]) { is_expected.to eq("AU") }
|
31
|
+
its([:bank_code]) { is_expected.to be_nil }
|
32
|
+
its([:branch_code]) { is_expected.to eq("123456") }
|
33
|
+
its([:account_number]) { is_expected.to eq("XABC") }
|
34
|
+
end
|
35
|
+
|
36
|
+
context "for an australian 10 character alphanumeric pseudo-iban" do
|
37
|
+
let(:pseudo_iban) { "AUZZ12345601234567AB" }
|
38
|
+
|
39
|
+
its([:country_code]) { is_expected.to eq("AU") }
|
40
|
+
its([:bank_code]) { is_expected.to be_nil }
|
41
|
+
its([:branch_code]) { is_expected.to eq("123456") }
|
42
|
+
its([:account_number]) { is_expected.to eq("01234567AB") }
|
43
|
+
end
|
44
|
+
|
45
|
+
context "for an australian 10 character pseudo-iban with an X" do
|
46
|
+
let(:pseudo_iban) { "AUZZ1234560X12345678" }
|
47
|
+
|
48
|
+
its([:country_code]) { is_expected.to eq("AU") }
|
49
|
+
its([:bank_code]) { is_expected.to be_nil }
|
50
|
+
its([:branch_code]) { is_expected.to eq("123456") }
|
51
|
+
its([:account_number]) { is_expected.to eq("0X12345678") }
|
52
|
+
end
|
53
|
+
|
54
|
+
context "for an australian 10 character pseudo-iban with a leading X" do
|
55
|
+
let(:pseudo_iban) { "AUZZ123456X123456789" }
|
56
|
+
|
57
|
+
its([:country_code]) { is_expected.to eq("AU") }
|
58
|
+
its([:bank_code]) { is_expected.to be_nil }
|
59
|
+
its([:branch_code]) { is_expected.to eq("123456") }
|
60
|
+
its([:account_number]) { is_expected.to eq("X123456789") }
|
61
|
+
end
|
26
62
|
end
|
27
63
|
end
|
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.11.
|
4
|
+
version: 0.11.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GoCardless
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -174,6 +174,7 @@ files:
|
|
174
174
|
- lib/ibandit/version.rb
|
175
175
|
- spec/fixtures/germany_integration_test_cases.json
|
176
176
|
- spec/fixtures/germany_unit_test_cases.json
|
177
|
+
- spec/ibandit/constants_spec.rb
|
177
178
|
- spec/ibandit/german_details_converter_spec.rb
|
178
179
|
- spec/ibandit/iban_assembler_spec.rb
|
179
180
|
- spec/ibandit/iban_spec.rb
|
@@ -205,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
205
206
|
version: '0'
|
206
207
|
requirements: []
|
207
208
|
rubyforge_project:
|
208
|
-
rubygems_version: 2.6.
|
209
|
+
rubygems_version: 2.6.13
|
209
210
|
signing_key:
|
210
211
|
specification_version: 4
|
211
212
|
summary: Convert national banking details into IBANs, and vice-versa.
|