banktools-se 3.1.1 → 3.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/.github/dependabot.yml +6 -0
- data/.github/workflows/ci.yml +10 -4
- data/.rspec +1 -0
- data/CHANGELOG.md +12 -0
- data/Gemfile +6 -3
- data/banktools-se.gemspec +0 -5
- data/lib/banktools-se/account/clearing_number.rb +1 -0
- data/lib/banktools-se/account.rb +9 -2
- data/lib/banktools-se/plusgiro.rb +1 -1
- data/lib/banktools-se/utils.rb +4 -4
- data/lib/banktools-se/version.rb +1 -1
- data/spec/account_spec.rb +22 -5
- data/spec/bankgiro_spec.rb +1 -2
- data/spec/ocr_spec.rb +1 -2
- data/spec/plusgiro_spec.rb +1 -2
- data/spec/spec_helper.rb +1 -0
- data/spec/utils_spec.rb +1 -2
- metadata +6 -64
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5d38b29a0e8e17173e684e2aa57595210cd8239a3faad83881e09a2155b47ec
|
4
|
+
data.tar.gz: 536681543fe7547f8c5589a09929c3c4273f3de5126f8b56ff88edebea2c02d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 24b822afa750fd939f09245cecdc18eaf04dbedf9a7a04e8f246c0d5c4d264906817b63f89a7f93b1a73b1dc4d867791c09bb27277546a8536ae055744cd1aed
|
7
|
+
data.tar.gz: 2c3c2217e150f37beb61215d64407af6b592bddca513204d520c06c07e5a6da8ae3ee40147d5d2ffeb6b34cea9a553f9239f4e5e51d2d8c05f3d337e9b4adc19
|
data/.github/workflows/ci.yml
CHANGED
@@ -7,18 +7,24 @@ on:
|
|
7
7
|
branches: [ master ]
|
8
8
|
|
9
9
|
jobs:
|
10
|
-
|
10
|
+
ruby-versions:
|
11
|
+
uses: ruby/actions/.github/workflows/ruby_versions.yml@master
|
12
|
+
with:
|
13
|
+
min_version: 3.1
|
14
|
+
engine: cruby
|
11
15
|
|
16
|
+
test:
|
17
|
+
needs: ruby-versions
|
12
18
|
runs-on: ubuntu-latest
|
13
19
|
|
14
20
|
strategy:
|
15
21
|
matrix:
|
16
|
-
ruby-version:
|
22
|
+
ruby-version: ${{ fromJson(needs.ruby-versions.outputs.versions) }}
|
17
23
|
|
18
24
|
steps:
|
19
|
-
- uses: actions/checkout@
|
25
|
+
- uses: actions/checkout@v4
|
20
26
|
- name: Set up Ruby ${{ matrix.ruby-version }}
|
21
|
-
uses: ruby/setup-ruby@
|
27
|
+
uses: ruby/setup-ruby@v1
|
22
28
|
with:
|
23
29
|
ruby-version: ${{ matrix.ruby-version }}
|
24
30
|
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 3.3.0
|
4
|
+
|
5
|
+
- Add Lunar Bank clearing number range. [#14](https://github.com/barsoom/banktools-se/pull/14). Thanks, @andyglim!
|
6
|
+
|
7
|
+
## 3.2.0
|
8
|
+
|
9
|
+
- Add Account#normalize keyword arguments `digits_only`, `clearing_checksum`. [#11](https://github.com/barsoom/banktools-se/pull/11)
|
10
|
+
|
11
|
+
## 3.1.1
|
12
|
+
|
13
|
+
- Require MFA for privileged Rubygems actions.
|
14
|
+
|
3
15
|
## 3.1.0
|
4
16
|
|
5
17
|
- Add more banks to the range in `BankTools::SE::Account::ClearingNumber`. See [#7]. Thanks, Milen Dimitrov!
|
data/Gemfile
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
|
-
# Specify your gem's dependencies in bank-tools-se.gemspec
|
4
3
|
gemspec
|
5
4
|
|
6
|
-
group :development do
|
7
|
-
gem "barsoom_utils"
|
5
|
+
group :development, :test do
|
6
|
+
gem "barsoom_utils"
|
7
|
+
gem "guard"
|
8
|
+
gem "guard-rspec"
|
9
|
+
gem "rake"
|
10
|
+
gem "rspec"
|
8
11
|
gem "rubocop"
|
9
12
|
end
|
data/banktools-se.gemspec
CHANGED
@@ -14,9 +14,4 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
15
|
s.require_paths = [ "lib" ]
|
16
16
|
s.metadata = { "rubygems_mfa_required" => "true" }
|
17
|
-
|
18
|
-
s.add_development_dependency "rake"
|
19
|
-
s.add_development_dependency "rspec"
|
20
|
-
s.add_development_dependency "guard"
|
21
|
-
s.add_development_dependency "guard-rspec"
|
22
17
|
end
|
@@ -53,6 +53,7 @@ module BankTools
|
|
53
53
|
9680..9689 => { name: "Bluestep Finance" },
|
54
54
|
9690..9699 => { name: "Folkia" },
|
55
55
|
9700..9709 => { name: "Ekobanken" },
|
56
|
+
9710..9719 => { name: "Lunar Bank" },
|
56
57
|
9720..9729 => { name: "Netfonds Bank (ub)" },
|
57
58
|
9750..9759 => { name: "Northmill Bank" },
|
58
59
|
9770..9779 => { name: "FTCS" },
|
data/lib/banktools-se/account.rb
CHANGED
@@ -36,9 +36,16 @@ module BankTools
|
|
36
36
|
errors
|
37
37
|
end
|
38
38
|
|
39
|
-
def normalize
|
39
|
+
def normalize(digits_only: false, clearing_checksum: true)
|
40
40
|
if valid?
|
41
|
-
|
41
|
+
clearing_number_part =
|
42
|
+
if clearing_checksum
|
43
|
+
clearing_number
|
44
|
+
else
|
45
|
+
digits[0, 4]
|
46
|
+
end
|
47
|
+
result = [ clearing_number_part, serial_number ].join("-")
|
48
|
+
digits_only ? result.gsub(/\D/, "") : result
|
42
49
|
else
|
43
50
|
number
|
44
51
|
end
|
@@ -29,7 +29,7 @@ module BankTools
|
|
29
29
|
def normalize
|
30
30
|
if valid?
|
31
31
|
pre, pairs, post = digits.split(/(\d{2}*)(\d)$/)
|
32
|
-
pairs = pairs.split(/(\d\d)/).reject
|
32
|
+
pairs = pairs.split(/(\d\d)/).reject(&:empty?)
|
33
33
|
[ pre, pairs.join(" "), "-", post ].join
|
34
34
|
else
|
35
35
|
number
|
data/lib/banktools-se/utils.rb
CHANGED
@@ -4,22 +4,22 @@ module BankTools
|
|
4
4
|
|
5
5
|
# Based on http://blog.internautdesign.com/2007/4/18/ruby-luhn-check-aka-mod-10-formula
|
6
6
|
def self.valid_luhn?(number)
|
7
|
-
digits = number.to_s.scan(/\d/).reverse.map
|
7
|
+
digits = number.to_s.scan(/\d/).reverse.map(&:to_i)
|
8
8
|
digits = digits.each_with_index.map { |d, i|
|
9
9
|
d *= 2 if i.odd?
|
10
10
|
d > 9 ? d - 9 : d
|
11
11
|
}
|
12
|
-
sum = digits.
|
12
|
+
sum = digits.reduce(0) { |m, x| m + x }
|
13
13
|
sum % 10 == 0
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.luhn_checksum(number)
|
17
|
-
digits = number.to_s.scan(/\d/).reverse.map
|
17
|
+
digits = number.to_s.scan(/\d/).reverse.map(&:to_i)
|
18
18
|
digits = digits.each_with_index.map { |d, i|
|
19
19
|
d *= 2 if i.even?
|
20
20
|
d > 9 ? d - 9 : d
|
21
21
|
}
|
22
|
-
sum = digits.
|
22
|
+
sum = digits.reduce(0) { |m, x| m + x }
|
23
23
|
mod = 10 - sum % 10
|
24
24
|
mod == 10 ? 0 : mod
|
25
25
|
end
|
data/lib/banktools-se/version.rb
CHANGED
data/spec/account_spec.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require "spec_helper"
|
4
3
|
require "banktools-se"
|
5
4
|
|
6
|
-
describe BankTools::SE::Account do
|
5
|
+
RSpec.describe BankTools::SE::Account do
|
7
6
|
it "should initialize" do
|
8
7
|
expect(BankTools::SE::Account.new("foo")).to be_a(BankTools::SE::Account)
|
9
8
|
end
|
@@ -65,7 +64,7 @@ describe BankTools::SE::Account do
|
|
65
64
|
"9550-0000000", # Avanza Bank.
|
66
65
|
"9570-0000000000", # Sparbanken Syd.
|
67
66
|
"9960-00", # Nordea/Plusgirot.
|
68
|
-
|
67
|
+
"9710-0000000", # Lunar Bank.
|
69
68
|
].each do |number|
|
70
69
|
it "should be empty for a valid number like #{number}" do
|
71
70
|
expect(BankTools::SE::Account.new(number).errors).to eq([])
|
@@ -113,6 +112,7 @@ describe BankTools::SE::Account do
|
|
113
112
|
expect(BankTools::SE::Account.new("11550000001").bank).to eq("Nordea")
|
114
113
|
expect(BankTools::SE::Account.new("11990000009").bank).to eq("Nordea")
|
115
114
|
expect(BankTools::SE::Account.new("12000000005").bank).to eq("Danske Bank")
|
115
|
+
expect(BankTools::SE::Account.new("97100000000").bank).to eq("Lunar Bank")
|
116
116
|
end
|
117
117
|
|
118
118
|
it "should return nil for unknown clearing numbers" do
|
@@ -147,7 +147,7 @@ describe BankTools::SE::Account do
|
|
147
147
|
|
148
148
|
describe "#normalize" do
|
149
149
|
it "should normalize to clearing number dash serial number" do
|
150
|
-
|
150
|
+
expect(BankTools::SE::Account.new("11000000007").normalize).to eq("1100-0000007")
|
151
151
|
end
|
152
152
|
|
153
153
|
it "should keep any Swedbank/Sparbanker clearing checksum" do
|
@@ -155,12 +155,29 @@ describe BankTools::SE::Account do
|
|
155
155
|
end
|
156
156
|
|
157
157
|
it "should not attempt to normalize invalid numbers" do
|
158
|
-
|
158
|
+
expect(BankTools::SE::Account.new(" 1-2-3 ").normalize).to eq(" 1-2-3 ")
|
159
159
|
end
|
160
160
|
|
161
161
|
it "should prepend zeroes to the serial number if necessary" do
|
162
162
|
expect(BankTools::SE::Account.new("8000-2-80000003").normalize).to eq("8000-2-0080000003")
|
163
163
|
expect(BankTools::SE::Account.new("8000-2-8000000003").normalize).to eq("8000-2-8000000003")
|
164
164
|
end
|
165
|
+
|
166
|
+
context "using digits_only: true" do
|
167
|
+
it "normalizes without any non-digit separators" do
|
168
|
+
expect(BankTools::SE::Account.new("1100-0000007").normalize(digits_only: true)).to eq("11000000007")
|
169
|
+
expect(BankTools::SE::Account.new("11000000007").normalize(digits_only: true)).to eq("11000000007")
|
170
|
+
end
|
171
|
+
|
172
|
+
it "does not attempt to normalize invalid numbers" do
|
173
|
+
expect(BankTools::SE::Account.new(" 1-2-3 ").normalize(digits_only: true)).to eq(" 1-2-3 ")
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
context "using clearing_checksum: false" do
|
178
|
+
it "drops any Swedbank/Sparbanker clearing checksum (fifth digit and hyphen)" do
|
179
|
+
expect(BankTools::SE::Account.new("8000-2-0000000000").normalize(clearing_checksum: false)).to eq("8000-0000000000")
|
180
|
+
end
|
181
|
+
end
|
165
182
|
end
|
166
183
|
end
|
data/spec/bankgiro_spec.rb
CHANGED
data/spec/ocr_spec.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
require "spec_helper"
|
2
1
|
require "banktools-se"
|
3
2
|
|
4
|
-
describe BankTools::SE::OCR do
|
3
|
+
RSpec.describe BankTools::SE::OCR do
|
5
4
|
# https://www.bankgirot.se/globalassets/dokument/anvandarmanualer/bankgiroinbetalningar_anvandarmanual_sv_31okt2016.pdf section 5.2
|
6
5
|
describe ".from_number" do
|
7
6
|
it "adds a mod-10 check digit" do
|
data/spec/plusgiro_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
data/spec/utils_spec.rb
CHANGED
metadata
CHANGED
@@ -1,80 +1,24 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: banktools-se
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henrik Nyh
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: rake
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rspec
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: guard
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: guard-rspec
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
description:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
11
|
+
dependencies: []
|
70
12
|
email:
|
71
13
|
- henrik@barsoom.se
|
72
14
|
executables: []
|
73
15
|
extensions: []
|
74
16
|
extra_rdoc_files: []
|
75
17
|
files:
|
18
|
+
- ".github/dependabot.yml"
|
76
19
|
- ".github/workflows/ci.yml"
|
77
20
|
- ".gitignore"
|
21
|
+
- ".rspec"
|
78
22
|
- ".rubocop.yml"
|
79
23
|
- CHANGELOG.md
|
80
24
|
- Gemfile
|
@@ -100,7 +44,6 @@ homepage: ''
|
|
100
44
|
licenses: []
|
101
45
|
metadata:
|
102
46
|
rubygems_mfa_required: 'true'
|
103
|
-
post_install_message:
|
104
47
|
rdoc_options: []
|
105
48
|
require_paths:
|
106
49
|
- lib
|
@@ -115,8 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
58
|
- !ruby/object:Gem::Version
|
116
59
|
version: '0'
|
117
60
|
requirements: []
|
118
|
-
rubygems_version: 3.
|
119
|
-
signing_key:
|
61
|
+
rubygems_version: 3.6.8
|
120
62
|
specification_version: 4
|
121
63
|
summary: Validate and normalize Swedish bank account numbers, plusgiro and bankgiro.
|
122
64
|
test_files: []
|