ibandit 1.0.1 → 1.0.2
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 +37 -0
- data/.rubocop.yml +1 -1
- data/.rubocop_todo.yml +1 -1
- data/CHANGELOG.md +4 -0
- data/Gemfile +0 -4
- data/README.md +1 -1
- data/data/german_iban_rules.yml +1096 -1573
- data/data/raw/BLZ2.txt +16028 -17888
- data/ibandit.gemspec +3 -2
- data/lib/ibandit/german_details_converter.rb +21 -0
- data/lib/ibandit/iban.rb +6 -4
- data/lib/ibandit/version.rb +1 -1
- data/spec/fixtures/germany_integration_test_cases.json +21 -21
- data/spec/fixtures/germany_unit_test_cases.json +20 -6
- data/spec/ibandit/local_details_cleaner_spec.rb +1 -1
- data/spec/ibandit/structure_spec.rb +1 -1
- metadata +21 -7
- data/.travis.yml +0 -16
data/ibandit.gemspec
CHANGED
@@ -3,13 +3,14 @@
|
|
3
3
|
require File.expand_path("lib/ibandit/version", __dir__)
|
4
4
|
|
5
5
|
Gem::Specification.new do |gem|
|
6
|
+
gem.add_development_dependency "gc_ruboconfig", "~> 2.12.0"
|
6
7
|
gem.add_development_dependency "nokogiri", "~> 1.6"
|
7
8
|
gem.add_development_dependency "pry", "~> 0.10"
|
8
9
|
gem.add_development_dependency "pry-nav", "~> 0.2"
|
9
10
|
gem.add_development_dependency "rspec", "~> 3.3"
|
10
11
|
gem.add_development_dependency "rspec-its", "~> 1.2"
|
11
|
-
gem.add_development_dependency "
|
12
|
-
gem.add_development_dependency "sax-machine",
|
12
|
+
gem.add_development_dependency "rspec_junit_formatter", "~> 0.4.1"
|
13
|
+
gem.add_development_dependency "sax-machine", "~> 1.3"
|
13
14
|
|
14
15
|
gem.add_runtime_dependency "i18n"
|
15
16
|
|
@@ -957,6 +957,23 @@ module Ibandit
|
|
957
957
|
end
|
958
958
|
end
|
959
959
|
|
960
|
+
# New version of Rule004200 but with another range:
|
961
|
+
# For 10-digit Account Numbers, only the following Account Numbers are
|
962
|
+
# applicable to be issued / created into an IBAN with the
|
963
|
+
# standard-IBAN rule: nnn4400001 to nnn4499999
|
964
|
+
class Rule004201 < Rule004200
|
965
|
+
def converted_details
|
966
|
+
unpadded_account_number = @account_number.gsub(/\A0+/, "")
|
967
|
+
|
968
|
+
if unpadded_account_number.size == 10 &&
|
969
|
+
%w[4400001 4499999].include?(unpadded_account_number.slice(3, 10))
|
970
|
+
{ bank_code: @bank_code, account_number: @account_number }
|
971
|
+
else
|
972
|
+
super
|
973
|
+
end
|
974
|
+
end
|
975
|
+
end
|
976
|
+
|
960
977
|
class Rule004301 < BaseRule
|
961
978
|
def converted_details
|
962
979
|
{ bank_code: "66650085", account_number: @account_number }
|
@@ -1028,6 +1045,10 @@ module Ibandit
|
|
1028
1045
|
end
|
1029
1046
|
end
|
1030
1047
|
|
1048
|
+
class Rule004910 < BaseRule
|
1049
|
+
# Rule 0049 10 is actually about modulus checking, not IBAN construction
|
1050
|
+
end
|
1051
|
+
|
1031
1052
|
class Rule005000 < BaseRule
|
1032
1053
|
def converted_details
|
1033
1054
|
{ bank_code: "28550000", account_number: @account_number }
|
data/lib/ibandit/iban.rb
CHANGED
@@ -225,7 +225,7 @@ module Ibandit
|
|
225
225
|
return unless valid_country_code?
|
226
226
|
return unless structure[:bban_format]
|
227
227
|
|
228
|
-
if bban
|
228
|
+
if bban&.match?(Regexp.new(structure[:bban_format]))
|
229
229
|
true
|
230
230
|
else
|
231
231
|
@errors[:format] = Ibandit.translate(:invalid_format,
|
@@ -238,7 +238,7 @@ module Ibandit
|
|
238
238
|
return unless valid_bank_code_length?
|
239
239
|
return true if structure[:bank_code_length]&.zero?
|
240
240
|
|
241
|
-
if swift_bank_code
|
241
|
+
if swift_bank_code&.match?(Regexp.new(structure[:bank_code_format]))
|
242
242
|
true
|
243
243
|
else
|
244
244
|
@errors[:bank_code] = Ibandit.translate(:is_invalid)
|
@@ -250,7 +250,7 @@ module Ibandit
|
|
250
250
|
return unless valid_branch_code_length?
|
251
251
|
return true unless structure[:branch_code_format]
|
252
252
|
|
253
|
-
if swift_branch_code
|
253
|
+
if swift_branch_code&.match?(Regexp.new(structure[:branch_code_format]))
|
254
254
|
true
|
255
255
|
else
|
256
256
|
@errors[:branch_code] = Ibandit.translate(:is_invalid)
|
@@ -261,7 +261,9 @@ module Ibandit
|
|
261
261
|
def valid_account_number_format?
|
262
262
|
return unless valid_account_number_length?
|
263
263
|
|
264
|
-
if swift_account_number
|
264
|
+
if swift_account_number&.match?(
|
265
|
+
Regexp.new(structure[:account_number_format]),
|
266
|
+
)
|
265
267
|
true
|
266
268
|
else
|
267
269
|
@errors[:account_number] = Ibandit.translate(:is_invalid)
|
data/lib/ibandit/version.rb
CHANGED
@@ -22,15 +22,15 @@
|
|
22
22
|
{ "bank_code": "72020700", "account_number" : "1111111611" }
|
23
23
|
]
|
24
24
|
},
|
25
|
-
{
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
},
|
25
|
+
// {
|
26
|
+
// "convertor": "000300",
|
27
|
+
// "valid": [
|
28
|
+
// { "bank_code": "51010800", "account_number" : "1" }
|
29
|
+
// ],
|
30
|
+
// "invalid": [
|
31
|
+
// { "bank_code": "51010800", "account_number" : "6161604670" }
|
32
|
+
// ]
|
33
|
+
// },
|
34
34
|
{
|
35
35
|
"convertor": "000400",
|
36
36
|
"valid": [
|
@@ -101,12 +101,12 @@
|
|
101
101
|
{"bank_code":"51020000","account_number":"30009963","converted_bank_code":"50020200","converted_account_number":"30009963"}
|
102
102
|
]
|
103
103
|
},
|
104
|
-
{
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
},
|
104
|
+
// {
|
105
|
+
// "convertor": "000900",
|
106
|
+
// "valid": [
|
107
|
+
// {"bank_code":"68351976","account_number":"1116232594","converted_bank_code":"68351557","converted_account_number":"3047232594"}
|
108
|
+
// ]
|
109
|
+
// },
|
110
110
|
{
|
111
111
|
"convertor": "001001",
|
112
112
|
"valid": [
|
@@ -160,11 +160,11 @@
|
|
160
160
|
"valid": [
|
161
161
|
{ "bank_code": "39060180", "account_number": "556", "converted_account_number": "0120440110" }
|
162
162
|
]
|
163
|
-
},
|
164
|
-
{
|
165
|
-
"convertor": "001900",
|
166
|
-
"valid": [
|
167
|
-
{ "bank_code": "50130100", "account_number": "556", "converted_bank_code": "50120383" }
|
168
|
-
]
|
169
163
|
}
|
164
|
+
// {
|
165
|
+
// "convertor": "001900",
|
166
|
+
// "valid": [
|
167
|
+
// { "bank_code": "50130100", "account_number": "556", "converted_bank_code": "50120383" }
|
168
|
+
// ]
|
169
|
+
// }
|
170
170
|
]
|
@@ -136,12 +136,12 @@
|
|
136
136
|
{ "bank_code": "10010010", "account_number" : "556", "converted_account_number": "0120440110" }
|
137
137
|
]
|
138
138
|
},
|
139
|
-
{
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
},
|
139
|
+
// {
|
140
|
+
// "convertor": "001900",
|
141
|
+
// "valid": [
|
142
|
+
// { "bank_code": "10010010", "account_number" : "1234567890", "converted_bank_code": "50120383" }
|
143
|
+
// ]
|
144
|
+
// },
|
145
145
|
{
|
146
146
|
"convertor": "002002",
|
147
147
|
"valid": [
|
@@ -318,6 +318,20 @@
|
|
318
318
|
{ "bank_code": "10010010", "account_number" : "0040400000" },
|
319
319
|
{ "bank_code": "10010010", "account_number" : "0040412000" }
|
320
320
|
]
|
321
|
+
},
|
322
|
+
{
|
323
|
+
"convertor": "004201",
|
324
|
+
"valid": [
|
325
|
+
{ "bank_code": "10010010", "account_number" : "0050462000" },
|
326
|
+
{ "bank_code": "70020001", "account_number" : "0040402000" },
|
327
|
+
{ "bank_code": "70020001", "account_number" : "1004400001" }
|
328
|
+
],
|
329
|
+
"invalid": [
|
330
|
+
{ "bank_code": "10010010", "account_number" : "504620001" },
|
331
|
+
{ "bank_code": "10010010", "account_number" : "0040400000" },
|
332
|
+
{ "bank_code": "10010010", "account_number" : "0040412000" },
|
333
|
+
{ "bank_code": "70020001", "account_number" : "1035400001" }
|
334
|
+
]
|
321
335
|
},
|
322
336
|
{
|
323
337
|
"convertor": "004301",
|
@@ -286,7 +286,7 @@ describe Ibandit::LocalDetailsCleaner do
|
|
286
286
|
|
287
287
|
context "with unsupported account details" do
|
288
288
|
let(:account_number) { "7955791111" }
|
289
|
-
let(:bank_code) { "
|
289
|
+
let(:bank_code) { "99999999" }
|
290
290
|
|
291
291
|
it { is_expected.to eq(local_details_with_swift) }
|
292
292
|
end
|
@@ -9,7 +9,7 @@ describe "structures.yml" do
|
|
9
9
|
structures.each do |country, rules|
|
10
10
|
context country do
|
11
11
|
rules.each do |rule, value|
|
12
|
-
next unless rule
|
12
|
+
next unless rule.to_s.end_with?("_format")
|
13
13
|
|
14
14
|
it "builds #{rule} rule" do
|
15
15
|
expect { Regexp.new(value) }.to_not raise_exception
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ibandit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GoCardless
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: gc_ruboconfig
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.12.0
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.12.0
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: nokogiri
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,19 +95,19 @@ dependencies:
|
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '1.2'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: rspec_junit_formatter
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.
|
103
|
+
version: 0.4.1
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.
|
110
|
+
version: 0.4.1
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: sax-machine
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -131,10 +145,10 @@ executables: []
|
|
131
145
|
extensions: []
|
132
146
|
extra_rdoc_files: []
|
133
147
|
files:
|
148
|
+
- ".circleci/config.yml"
|
134
149
|
- ".gitignore"
|
135
150
|
- ".rubocop.yml"
|
136
151
|
- ".rubocop_todo.yml"
|
137
|
-
- ".travis.yml"
|
138
152
|
- CHANGELOG.md
|
139
153
|
- Gemfile
|
140
154
|
- LICENSE
|
@@ -209,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
209
223
|
- !ruby/object:Gem::Version
|
210
224
|
version: '0'
|
211
225
|
requirements: []
|
212
|
-
rubygems_version: 3.
|
226
|
+
rubygems_version: 3.0.3
|
213
227
|
signing_key:
|
214
228
|
specification_version: 4
|
215
229
|
summary: Convert national banking details into IBANs, and vice-versa.
|