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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae26d83c75f488a904bc1dcaffada866c129f7f923a4083ef4c2886c58c4d605
4
- data.tar.gz: 1a52ea7948ea5d90c0df16501455015ff8c870f22f00b64ca7ccf64f050aba83
3
+ metadata.gz: f5d38b29a0e8e17173e684e2aa57595210cd8239a3faad83881e09a2155b47ec
4
+ data.tar.gz: 536681543fe7547f8c5589a09929c3c4273f3de5126f8b56ff88edebea2c02d5
5
5
  SHA512:
6
- metadata.gz: 4ea749b95887d14fce1fa99b3f34537f497706ea1670050014cf94064830b6e23a1db8c3a71caeaab0282a559879562ea4305d9507608f1ad01f04c0ffa859fc
7
- data.tar.gz: 3aef88169d2c7be49fcfa7d88148db48db4a2ff2d9f8822cc9898ee03f9fad0cc0b4e7f9197ce0410f1021c3459172b8159d99d49269f20a0f06c98b882f8eb7
6
+ metadata.gz: 24b822afa750fd939f09245cecdc18eaf04dbedf9a7a04e8f246c0d5c4d264906817b63f89a7f93b1a73b1dc4d867791c09bb27277546a8536ae055744cd1aed
7
+ data.tar.gz: 2c3c2217e150f37beb61215d64407af6b592bddca513204d520c06c07e5a6da8ae3ee40147d5d2ffeb6b34cea9a553f9239f4e5e51d2d8c05f3d337e9b4adc19
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
@@ -7,18 +7,24 @@ on:
7
7
  branches: [ master ]
8
8
 
9
9
  jobs:
10
- test:
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: ["3.0", "2.7", "2.6", "2.5"]
22
+ ruby-version: ${{ fromJson(needs.ruby-versions.outputs.versions) }}
17
23
 
18
24
  steps:
19
- - uses: actions/checkout@v2
25
+ - uses: actions/checkout@v4
20
26
  - name: Set up Ruby ${{ matrix.ruby-version }}
21
- uses: ruby/setup-ruby@ae9cb3b565e36682a2c6045e4f664388da4c73aa
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", github: "barsoom/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" },
@@ -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
- [ clearing_number, serial_number ].join("-")
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 { |x| x.empty? }
32
+ pairs = pairs.split(/(\d\d)/).reject(&:empty?)
33
33
  [ pre, pairs.join(" "), "-", post ].join
34
34
  else
35
35
  number
@@ -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 { |x| x.to_i }
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.inject(0) { |m, x| m + x }
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 { |x| x.to_i }
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.inject(0) { |m, x| m + x }
22
+ sum = digits.reduce(0) { |m, x| m + x }
23
23
  mod = 10 - sum % 10
24
24
  mod == 10 ? 0 : mod
25
25
  end
@@ -1,5 +1,5 @@
1
1
  module BankTools
2
2
  module SE
3
- VERSION = "3.1.1"
3
+ VERSION = "3.3.0"
4
4
  end
5
5
  end
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
- account = expect(BankTools::SE::Account.new("11000000007").normalize).to eq("1100-0000007")
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
- account = expect(BankTools::SE::Account.new(" 1-2-3 ").normalize).to eq(" 1-2-3 ")
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
@@ -1,7 +1,6 @@
1
- require "spec_helper"
2
1
  require "banktools-se"
3
2
 
4
- describe BankTools::SE::Bankgiro do
3
+ RSpec.describe BankTools::SE::Bankgiro do
5
4
  it "should initialize" do
6
5
  expect(BankTools::SE::Bankgiro.new("foo")).to be_a(BankTools::SE::Bankgiro)
7
6
  end
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
@@ -1,7 +1,6 @@
1
- require "spec_helper"
2
1
  require "banktools-se"
3
2
 
4
- describe BankTools::SE::Plusgiro do
3
+ RSpec.describe BankTools::SE::Plusgiro do
5
4
 
6
5
  it "should initialize" do
7
6
  expect(BankTools::SE::Plusgiro.new("foo")).to be_a(BankTools::SE::Plusgiro)
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  RSpec.configure do |config|
2
2
  config.filter_run focus: true
3
3
  config.run_all_when_everything_filtered = true
4
+ config.disable_monkey_patching!
4
5
  end
data/spec/utils_spec.rb CHANGED
@@ -1,7 +1,6 @@
1
- require "spec_helper"
2
1
  require "banktools-se/utils"
3
2
 
4
- describe BankTools::SE::Utils, "valid_luhn?" do
3
+ RSpec.describe BankTools::SE::Utils, "valid_luhn?" do
5
4
 
6
5
  [
7
6
  "00",
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.1.1
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: 2021-11-19 00:00:00.000000000 Z
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.2.28
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: []