ibandit 1.1.0.1 → 1.3.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 +4 -4
- data/.circleci/config.yml +2 -2
- data/.rubocop.yml +5 -0
- data/.rubocop_todo.yml +12 -11
- data/.ruby-version +1 -0
- data/CHANGELOG.md +22 -0
- data/README.md +1 -1
- data/Rakefile +8 -0
- data/bin/build_structure_file.rb +73 -40
- data/data/german_iban_rules.yml +262 -157
- data/data/raw/BLZ2.txt +2072 -2231
- data/data/raw/IBAN_Registry.txt +53 -70
- data/data/raw/structure_additions.yml +3 -0
- data/data/raw/swedish_bank_lookup.yml +12 -2
- data/data/structures.yml +158 -43
- data/ibandit.gemspec +1 -1
- data/lib/ibandit/check_digit.rb +1 -1
- data/lib/ibandit/errors.rb +1 -0
- data/lib/ibandit/german_details_converter.rb +2 -2
- data/lib/ibandit/iban.rb +15 -6
- data/lib/ibandit/local_details_cleaner.rb +5 -3
- data/lib/ibandit/version.rb +1 -1
- data/spec/fixtures/germany_integration_test_cases.json +1 -1
- data/spec/ibandit/iban_assembler_spec.rb +1 -1
- data/spec/ibandit/iban_spec.rb +196 -5
- data/spec/ibandit/local_details_cleaner_spec.rb +6 -0
- metadata +10 -8
data/lib/ibandit/check_digit.rb
CHANGED
data/lib/ibandit/errors.rb
CHANGED
@@ -307,7 +307,7 @@ module Ibandit
|
|
307
307
|
end
|
308
308
|
|
309
309
|
def sum_of_weighted_values
|
310
|
-
weighted_values.
|
310
|
+
weighted_values.sum
|
311
311
|
end
|
312
312
|
|
313
313
|
def weighted_values
|
@@ -550,7 +550,7 @@ module Ibandit
|
|
550
550
|
end
|
551
551
|
|
552
552
|
def sum_of_weighted_digits
|
553
|
-
weighted_digits.
|
553
|
+
weighted_digits.sum
|
554
554
|
end
|
555
555
|
|
556
556
|
def weighted_digits
|
data/lib/ibandit/iban.rb
CHANGED
@@ -9,7 +9,8 @@ module Ibandit
|
|
9
9
|
:swift_account_number, :source
|
10
10
|
|
11
11
|
def initialize(argument)
|
12
|
-
|
12
|
+
case argument
|
13
|
+
when String
|
13
14
|
input = argument.to_s.gsub(/\s+/, "").upcase
|
14
15
|
|
15
16
|
pseudo_iban_splitter = PseudoIBANSplitter.new(input)
|
@@ -24,7 +25,7 @@ module Ibandit
|
|
24
25
|
@iban = input
|
25
26
|
extract_swift_details_from_iban!
|
26
27
|
end
|
27
|
-
|
28
|
+
when Hash
|
28
29
|
@source = :local_details
|
29
30
|
build_iban_from_local_details(argument)
|
30
31
|
else
|
@@ -225,7 +226,7 @@ module Ibandit
|
|
225
226
|
return unless valid_country_code?
|
226
227
|
return unless structure[:bban_format]
|
227
228
|
|
228
|
-
if bban&.match?(
|
229
|
+
if bban&.match?(entire_string_regex(structure[:bban_format]))
|
229
230
|
true
|
230
231
|
else
|
231
232
|
@errors[:format] = Ibandit.translate(:invalid_format,
|
@@ -238,7 +239,9 @@ module Ibandit
|
|
238
239
|
return unless valid_bank_code_length?
|
239
240
|
return true if structure[:bank_code_length]&.zero?
|
240
241
|
|
241
|
-
if swift_bank_code&.match?(
|
242
|
+
if swift_bank_code&.match?(
|
243
|
+
entire_string_regex(structure[:bank_code_format]),
|
244
|
+
)
|
242
245
|
true
|
243
246
|
else
|
244
247
|
@errors[:bank_code] = Ibandit.translate(:is_invalid)
|
@@ -250,7 +253,9 @@ module Ibandit
|
|
250
253
|
return unless valid_branch_code_length?
|
251
254
|
return true unless structure[:branch_code_format]
|
252
255
|
|
253
|
-
if swift_branch_code&.match?(
|
256
|
+
if swift_branch_code&.match?(
|
257
|
+
entire_string_regex(structure[:branch_code_format]),
|
258
|
+
)
|
254
259
|
true
|
255
260
|
else
|
256
261
|
@errors[:branch_code] = Ibandit.translate(:is_invalid)
|
@@ -262,7 +267,7 @@ module Ibandit
|
|
262
267
|
return unless valid_account_number_length?
|
263
268
|
|
264
269
|
if swift_account_number&.match?(
|
265
|
-
|
270
|
+
entire_string_regex(structure[:account_number_format]),
|
266
271
|
)
|
267
272
|
true
|
268
273
|
else
|
@@ -499,6 +504,10 @@ module Ibandit
|
|
499
504
|
Ibandit.structures[country_code]
|
500
505
|
end
|
501
506
|
|
507
|
+
def entire_string_regex(pattern)
|
508
|
+
Regexp.new("\\A#{pattern}\\z")
|
509
|
+
end
|
510
|
+
|
502
511
|
def formatted
|
503
512
|
iban.to_s.gsub(/(.{4})/, '\1 ').strip
|
504
513
|
end
|
@@ -89,7 +89,9 @@ module Ibandit
|
|
89
89
|
end
|
90
90
|
|
91
91
|
def self.clean_ca_details(local_details)
|
92
|
-
|
92
|
+
account_number = local_details[:account_number].tr("-", "")
|
93
|
+
|
94
|
+
return {} if account_number.length < 7 # minimum length
|
93
95
|
|
94
96
|
bank_code = if local_details[:bank_code].length == 3
|
95
97
|
local_details[:bank_code].rjust(4, "0")
|
@@ -98,7 +100,7 @@ module Ibandit
|
|
98
100
|
end
|
99
101
|
|
100
102
|
{
|
101
|
-
account_number:
|
103
|
+
account_number: account_number.rjust(12, "0"),
|
102
104
|
bank_code: bank_code,
|
103
105
|
}
|
104
106
|
end
|
@@ -512,7 +514,7 @@ module Ibandit
|
|
512
514
|
bank_code = local_details[:bank_code]
|
513
515
|
account_number = local_details[:account_number]
|
514
516
|
else
|
515
|
-
cleaned_acct_number = local_details[:account_number].gsub(
|
517
|
+
cleaned_acct_number = local_details[:account_number].gsub(/\s/, "")
|
516
518
|
|
517
519
|
bank_code = cleaned_acct_number.slice(2, 8)
|
518
520
|
account_number = cleaned_acct_number[10..-1]
|
data/lib/ibandit/version.rb
CHANGED
@@ -134,7 +134,7 @@
|
|
134
134
|
{
|
135
135
|
"convertor": "001400",
|
136
136
|
"valid": [
|
137
|
-
{ "bank_code": "
|
137
|
+
{ "bank_code": "30060601", "account_number": "60624", "converted_bank_code": "30060601" }
|
138
138
|
]
|
139
139
|
},
|
140
140
|
{
|
@@ -11,7 +11,7 @@ describe Ibandit::IBANAssembler do
|
|
11
11
|
account_number: iban.swift_account_number,
|
12
12
|
branch_code: iban.swift_branch_code,
|
13
13
|
bank_code: iban.swift_bank_code,
|
14
|
-
}.
|
14
|
+
}.compact
|
15
15
|
end
|
16
16
|
|
17
17
|
it "successfully reconstructs the IBAN" do
|
data/spec/ibandit/iban_spec.rb
CHANGED
@@ -112,6 +112,22 @@ describe Ibandit::IBAN do
|
|
112
112
|
its(:local_check_digits) { is_expected.to be_nil }
|
113
113
|
end
|
114
114
|
|
115
|
+
context "when the IBAN was created from a Belgian IBAN" do
|
116
|
+
let(:iban_code) { "BE62510007547061" }
|
117
|
+
|
118
|
+
its(:country_code) { is_expected.to eq("BE") }
|
119
|
+
its(:bank_code) { is_expected.to eq("510") }
|
120
|
+
its(:branch_code) { is_expected.to be_nil }
|
121
|
+
its(:account_number) { is_expected.to eq("510007547061") }
|
122
|
+
its(:account_number_suffix) { is_expected.to be_nil }
|
123
|
+
its(:swift_bank_code) { is_expected.to eq("510") }
|
124
|
+
its(:swift_branch_code) { is_expected.to be_nil }
|
125
|
+
its(:swift_account_number) { is_expected.to eq("510007547061") }
|
126
|
+
its(:swift_national_id) { is_expected.to eq("510") }
|
127
|
+
its(:local_check_digits) { is_expected.to eq("61") }
|
128
|
+
its(:bban) { is_expected.to eq("510007547061") }
|
129
|
+
end
|
130
|
+
|
115
131
|
context "when the IBAN was created with local details" do
|
116
132
|
let(:arg) do
|
117
133
|
{
|
@@ -452,6 +468,13 @@ describe Ibandit::IBAN do
|
|
452
468
|
its(:to_s) { is_expected.to eq("") }
|
453
469
|
end
|
454
470
|
|
471
|
+
context "and account number has invalid characters in" do
|
472
|
+
let(:account_number) { "123456XX789" }
|
473
|
+
let(:bank_code) { "0036" }
|
474
|
+
|
475
|
+
its(:valid?) { is_expected.to be false }
|
476
|
+
end
|
477
|
+
|
455
478
|
context "and a 12 digit account number" do
|
456
479
|
let(:account_number) { "012345678900" }
|
457
480
|
let(:bank_code) { "0036" }
|
@@ -2247,16 +2270,16 @@ describe Ibandit::IBAN do
|
|
2247
2270
|
|
2248
2271
|
context "with an invalid branch code" do
|
2249
2272
|
let(:iban_code) { "GB60BARC20000055779911" }
|
2273
|
+
let(:valid_bank_code) { true }
|
2274
|
+
let(:valid_branch_code) { false }
|
2275
|
+
let(:valid_account_number) { true }
|
2276
|
+
|
2250
2277
|
before { Ibandit.bic_finder = double(call: "BARCGB22XXX") }
|
2251
2278
|
|
2252
2279
|
after { Ibandit.bic_finder = nil }
|
2253
2280
|
|
2254
2281
|
before { iban.valid_local_modulus_check? }
|
2255
2282
|
|
2256
|
-
let(:valid_bank_code) { true }
|
2257
|
-
let(:valid_branch_code) { false }
|
2258
|
-
let(:valid_account_number) { true }
|
2259
|
-
|
2260
2283
|
it "calls valid_branch_code? with an IBAN object" do
|
2261
2284
|
expect(Ibandit.modulus_checker).
|
2262
2285
|
to receive(:valid_branch_code?).
|
@@ -3109,7 +3132,7 @@ describe Ibandit::IBAN do
|
|
3109
3132
|
end
|
3110
3133
|
|
3111
3134
|
context "for a valid Belgian IBAN" do
|
3112
|
-
let(:iban_code) { "
|
3135
|
+
let(:iban_code) { "BE68 5390 0754 7034" }
|
3113
3136
|
|
3114
3137
|
it { is_expected.to be_valid }
|
3115
3138
|
end
|
@@ -3156,6 +3179,18 @@ describe Ibandit::IBAN do
|
|
3156
3179
|
it { is_expected.to_not be_valid }
|
3157
3180
|
end
|
3158
3181
|
|
3182
|
+
context "for a valid Costa Rican IBAN" do
|
3183
|
+
let(:iban_code) { "CR05 0152 0200 1026 2840 66" }
|
3184
|
+
|
3185
|
+
it { is_expected.to be_valid }
|
3186
|
+
end
|
3187
|
+
|
3188
|
+
context "for an invalid Costa Rican IBAN" do
|
3189
|
+
let(:iban_code) { "CR05 0152 0200 1026 2840" }
|
3190
|
+
|
3191
|
+
it { is_expected.to_not be_valid }
|
3192
|
+
end
|
3193
|
+
|
3159
3194
|
context "for a valid Cypriot IBAN" do
|
3160
3195
|
let(:iban_code) { "CY17 0020 0128 0000 0012 0052 7600" }
|
3161
3196
|
|
@@ -3192,6 +3227,18 @@ describe Ibandit::IBAN do
|
|
3192
3227
|
it { is_expected.to_not be_valid }
|
3193
3228
|
end
|
3194
3229
|
|
3230
|
+
context "for a valid Dominican Republic IBAN" do
|
3231
|
+
let(:iban_code) { "DO28 BAGR 0000 0001 2124 5361 1324" }
|
3232
|
+
|
3233
|
+
it { is_expected.to be_valid }
|
3234
|
+
end
|
3235
|
+
|
3236
|
+
context "for an invalid Dominican Republic IBAN" do
|
3237
|
+
let(:iban_code) { "DO28 BAGR 0000 0001 2124 5361" }
|
3238
|
+
|
3239
|
+
it { is_expected.to_not be_valid }
|
3240
|
+
end
|
3241
|
+
|
3195
3242
|
context "for a valid Estonian IBAN" do
|
3196
3243
|
let(:iban_code) { "EE38 2200 2210 2014 5685" }
|
3197
3244
|
|
@@ -3576,6 +3623,18 @@ describe Ibandit::IBAN do
|
|
3576
3623
|
it { is_expected.to_not be_valid }
|
3577
3624
|
end
|
3578
3625
|
|
3626
|
+
context "for a valid Palestinian IBAN" do
|
3627
|
+
let(:iban_code) { "PS92 PALS 0000 0000 0400 1234 5670 2" }
|
3628
|
+
|
3629
|
+
it { is_expected.to be_valid }
|
3630
|
+
end
|
3631
|
+
|
3632
|
+
context "for an invalid Palestinian IBAN" do
|
3633
|
+
let(:iban_code) { "PS92 PALS 0000 0000 0400 1234 5670" }
|
3634
|
+
|
3635
|
+
it { is_expected.to_not be_valid }
|
3636
|
+
end
|
3637
|
+
|
3579
3638
|
context "for a valid Potuguese IBAN" do
|
3580
3639
|
let(:iban_code) { "PT50 0002 0123 1234 5678 9015 4" }
|
3581
3640
|
|
@@ -3600,6 +3659,30 @@ describe Ibandit::IBAN do
|
|
3600
3659
|
it { is_expected.to_not be_valid }
|
3601
3660
|
end
|
3602
3661
|
|
3662
|
+
context "for a valid Kosovan IBAN" do
|
3663
|
+
let(:iban_code) { "XK05 1212 0123 4567 8906" }
|
3664
|
+
|
3665
|
+
it { is_expected.to be_valid }
|
3666
|
+
end
|
3667
|
+
|
3668
|
+
context "for an invalid Kosovan IBAN" do
|
3669
|
+
let(:iban_code) { "XK05 1212 0123 4567 890" }
|
3670
|
+
|
3671
|
+
it { is_expected.to_not be_valid }
|
3672
|
+
end
|
3673
|
+
|
3674
|
+
context "for a valid Timor-Leste IBAN" do
|
3675
|
+
let(:iban_code) { "TL38 0080 0123 4567 8910 157" }
|
3676
|
+
|
3677
|
+
it { is_expected.to be_valid }
|
3678
|
+
end
|
3679
|
+
|
3680
|
+
context "for an invalid Timor-Leste IBAN" do
|
3681
|
+
let(:iban_code) { "TL38 0080 0123 4567 8910" }
|
3682
|
+
|
3683
|
+
it { is_expected.to_not be_valid }
|
3684
|
+
end
|
3685
|
+
|
3603
3686
|
context "for a valid Romanian IBAN" do
|
3604
3687
|
let(:iban_code) { "RO49 AAAA 1B31 0075 9384 0000" }
|
3605
3688
|
|
@@ -3755,6 +3838,114 @@ describe Ibandit::IBAN do
|
|
3755
3838
|
|
3756
3839
|
it { is_expected.to_not be_valid }
|
3757
3840
|
end
|
3841
|
+
|
3842
|
+
context "with a valid LC iban" do
|
3843
|
+
let(:iban_code) { "LC55 HEMM 0001 0001 0012 0012 0002 3015" }
|
3844
|
+
|
3845
|
+
it { is_expected.to be_valid }
|
3846
|
+
end
|
3847
|
+
|
3848
|
+
context "with an invalid LC iban" do
|
3849
|
+
let(:iban_code) { "LC55 HEMM 0001 0001 0012 0012 0002" }
|
3850
|
+
|
3851
|
+
it { is_expected.to_not be_valid }
|
3852
|
+
end
|
3853
|
+
|
3854
|
+
context "with a valid UA iban" do
|
3855
|
+
let(:iban_code) { "UA21 3223 1300 0002 6007 2335 6600 1" }
|
3856
|
+
|
3857
|
+
it { is_expected.to be_valid }
|
3858
|
+
end
|
3859
|
+
|
3860
|
+
context "with an invalid UA iban" do
|
3861
|
+
let(:iban_code) { "UA21 3223 1300 0002 6007 2335 6600 " }
|
3862
|
+
|
3863
|
+
it { is_expected.to_not be_valid }
|
3864
|
+
end
|
3865
|
+
|
3866
|
+
context "with a valid ST iban" do
|
3867
|
+
let(:iban_code) { "ST23 0001 0001 0051 8453 1014 6" }
|
3868
|
+
|
3869
|
+
it { is_expected.to be_valid }
|
3870
|
+
end
|
3871
|
+
|
3872
|
+
context "with an invalid ST iban" do
|
3873
|
+
let(:iban_code) { "ST23 0001 0001 0051 8453 1014" }
|
3874
|
+
|
3875
|
+
it { is_expected.to_not be_valid }
|
3876
|
+
end
|
3877
|
+
|
3878
|
+
context "with a valid SC iban" do
|
3879
|
+
let(:iban_code) { "SC18 SSCB 1101 0000 0000 0000 1497 USD" }
|
3880
|
+
|
3881
|
+
it { is_expected.to be_valid }
|
3882
|
+
end
|
3883
|
+
|
3884
|
+
context "with an invalid SC iban" do
|
3885
|
+
let(:iban_code) { "SC18 SSCB 1101 0000 0000 0000 USD" }
|
3886
|
+
|
3887
|
+
it { is_expected.to_not be_valid }
|
3888
|
+
end
|
3889
|
+
|
3890
|
+
context "with a valid IQ iban" do
|
3891
|
+
let(:iban_code) { "IQ98 NBIQ 8501 2345 6789 012" }
|
3892
|
+
|
3893
|
+
it { is_expected.to be_valid }
|
3894
|
+
end
|
3895
|
+
|
3896
|
+
context "with an invalid IQ iban" do
|
3897
|
+
let(:iban_code) { "IQ98 NBIQ 8501 2345 6789" }
|
3898
|
+
|
3899
|
+
it { is_expected.to_not be_valid }
|
3900
|
+
end
|
3901
|
+
|
3902
|
+
context "with a valid SV iban" do
|
3903
|
+
let(:iban_code) { "SV 62 CENR 00000000000000700025" }
|
3904
|
+
|
3905
|
+
it { is_expected.to be_valid }
|
3906
|
+
end
|
3907
|
+
|
3908
|
+
context "with an invalid SV iban" do
|
3909
|
+
let(:iban_code) { "SV 62 CENR 00000000000000700" }
|
3910
|
+
|
3911
|
+
it { is_expected.to_not be_valid }
|
3912
|
+
end
|
3913
|
+
|
3914
|
+
context "with a valid BY iban" do
|
3915
|
+
let(:iban_code) { "BY13 NBRB 3600 9000 0000 2Z00 AB00" }
|
3916
|
+
|
3917
|
+
it { is_expected.to be_valid }
|
3918
|
+
end
|
3919
|
+
|
3920
|
+
context "with an invalid BY iban" do
|
3921
|
+
let(:iban_code) { "BY13 NBRB 3600 9000 0000 2Z00" }
|
3922
|
+
|
3923
|
+
it { is_expected.to_not be_valid }
|
3924
|
+
end
|
3925
|
+
|
3926
|
+
context "with a valid VA iban" do
|
3927
|
+
let(:iban_code) { "VA59 001 1230 0001 2345 678" }
|
3928
|
+
|
3929
|
+
it { is_expected.to be_valid }
|
3930
|
+
end
|
3931
|
+
|
3932
|
+
context "with an invalid VA iban" do
|
3933
|
+
let(:iban_code) { "VA59 001 1230 0001 2345" }
|
3934
|
+
|
3935
|
+
it { is_expected.to_not be_valid }
|
3936
|
+
end
|
3937
|
+
|
3938
|
+
context "with a valid EG iban" do
|
3939
|
+
let(:iban_code) { "EG380019000500000000263180002" }
|
3940
|
+
|
3941
|
+
it { is_expected.to be_valid }
|
3942
|
+
end
|
3943
|
+
|
3944
|
+
context "with an invalid EG iban" do
|
3945
|
+
let(:iban_code) { "EG3800190005000000002631800" }
|
3946
|
+
|
3947
|
+
it { is_expected.to_not be_valid }
|
3948
|
+
end
|
3758
3949
|
end
|
3759
3950
|
|
3760
3951
|
describe "#local_check_digits" do
|
@@ -167,6 +167,12 @@ describe Ibandit::LocalDetailsCleaner do
|
|
167
167
|
its([:country_code]) { is_expected.to eq(country_code) }
|
168
168
|
its([:bank_code]) { is_expected.to eq("0036") }
|
169
169
|
its([:branch_code]) { is_expected.to eq("00063") }
|
170
|
+
|
171
|
+
context "with a hyphen" do
|
172
|
+
let(:account_number) { "0123456-789" }
|
173
|
+
|
174
|
+
its([:account_number]) { is_expected.to eq("000123456789") }
|
175
|
+
end
|
170
176
|
end
|
171
177
|
|
172
178
|
context "Cyprus" 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: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GoCardless
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gc_ruboconfig
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.
|
19
|
+
version: 2.24.0
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.
|
26
|
+
version: 2.24.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: nokogiri
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,10 +149,12 @@ files:
|
|
149
149
|
- ".gitignore"
|
150
150
|
- ".rubocop.yml"
|
151
151
|
- ".rubocop_todo.yml"
|
152
|
+
- ".ruby-version"
|
152
153
|
- CHANGELOG.md
|
153
154
|
- Gemfile
|
154
155
|
- LICENSE
|
155
156
|
- README.md
|
157
|
+
- Rakefile
|
156
158
|
- TODO.md
|
157
159
|
- bin/build_german_iban_rules.rb
|
158
160
|
- bin/build_structure_file.rb
|
@@ -208,7 +210,7 @@ homepage: https://github.com/gocardless/ibandit
|
|
208
210
|
licenses:
|
209
211
|
- MIT
|
210
212
|
metadata: {}
|
211
|
-
post_install_message:
|
213
|
+
post_install_message:
|
212
214
|
rdoc_options: []
|
213
215
|
require_paths:
|
214
216
|
- lib
|
@@ -223,8 +225,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
223
225
|
- !ruby/object:Gem::Version
|
224
226
|
version: '0'
|
225
227
|
requirements: []
|
226
|
-
rubygems_version: 3.
|
227
|
-
signing_key:
|
228
|
+
rubygems_version: 3.2.3
|
229
|
+
signing_key:
|
228
230
|
specification_version: 4
|
229
231
|
summary: Convert national banking details into IBANs, and vice-versa.
|
230
232
|
test_files: []
|