banktools-se 2.5.0 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3d35e823a3680d5f4f656ab0849199916b481110
4
- data.tar.gz: 558d9b9047b302a807e28171fc515274c2461263
3
+ metadata.gz: 7718cc4bfa1982f2d41ca5a8e1a8ca872f647ba9
4
+ data.tar.gz: 61a4d355be53ebf5e0537b5b0a60b07af4869386
5
5
  SHA512:
6
- metadata.gz: af1599d7f2669a938268f304b4d104202b19aba78db344ef6affcfabca4c30c25895efe47c764111453b8a10b1cdc99778c5be87e57c63009dd689fb74dff44f
7
- data.tar.gz: e5eda874826d7e49d22cbf46e1102d45eb0cc451021e4d6f3e401d6027c3c7e99e5f394226d83ba305ad6243cf03f3c8b25fb81b4c139f4264bff812339fd145
6
+ metadata.gz: 309b92f8160559eee8e70e22c3d24c961210272d6d6122770ab6ff36fae38c3855fc95a0c495aaeb304ef3e9cdd03fb3feb9aedd2b8645ed658cc0551b6351b6
7
+ data.tar.gz: b4efc5ea6430a8a6dddabee2113f30f935587b948f9088cc21ac368693536e10efde30e7d9c395697948d186084582ba9dc0a4305a68be9ff1d449d6521de041
data/README.markdown CHANGED
@@ -46,9 +46,9 @@ Inspired by [iulianu/iban-tools](https://github.com/iulianu/iban-tools). Please
46
46
  # This feature is intended to try to find all OCR numbers in a noisy bank statement string.
47
47
  # By design it may find too many numbers (e.g. valid substrings of other numbers), so you should check results against actual outstanding invoices.
48
48
  # By default, it excludes OCRs shorter than 4 digits and longer than 19 digits, but this limit can be specified per below.
49
- BankTools::SE::OCR.find_all_in_string("OCR1230 and ref4564 and 7890") # => [ "1230", "4564" ]
49
+ BankTools::SE::OCR.find_all_in_string("OCR1230 and ref4564 and 7890") # => [ "1230", "4564", ]
50
50
  BankTools::SE::OCR.find_all_in_string("1230 and 123067", length_digit: true, pad: "0") # => [ "123067" ]
51
- BankTools::SE::OCR.find_all_in_string("00 and 18 and 1230", min_length: 2, max_length: 3) # => [ "00", "18" ]
51
+ BankTools::SE::OCR.find_all_in_string("00 and 18 and 1230", min_length: 2, max_length: 3) # => [ "00", "018", "18" ]
52
52
 
53
53
  # Plusgiro
54
54
 
@@ -112,13 +112,14 @@ Or install it yourself as:
112
112
 
113
113
  Possible improvements to make:
114
114
 
115
- * Luhn validation based on [BGC docs](http://web.archive.org/web/20130613010943/http://www.bgc.se/upload/Gemensamt/Trycksaker/Manualer/BG910.pdf).
115
+ * Luhn validation based on [these docs](https://www.bankgirot.se/globalassets/dokument/anvandarmanualer/bankernaskontonummeruppbyggnad_anvandarmanual_sv.pdf).
116
116
 
117
117
 
118
118
  ## Also see
119
119
 
120
120
  * [BankTools::DE (German)](https://github.com/barsoom/banktools-de)
121
121
  * [iban-tools](https://github.com/iulianu/iban-tools)
122
+ * [Bankgirocentral documentation](https://www.bankgirot.se/kundservice/handbocker/)
122
123
 
123
124
 
124
125
  ## Credits and license
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
- # http://web.archive.org/web/20130613010943/http://www.bgc.se/upload/Gemensamt/Trycksaker/Manualer/BG910.pdf
3
+ # https://www.bankgirot.se/globalassets/dokument/anvandarmanualer/bankernaskontonummeruppbyggnad_anvandarmanual_sv.pdf
4
4
 
5
5
  require "banktools-se/account/clearing_number"
6
6
 
@@ -1,4 +1,4 @@
1
- # http://web.archive.org/web/20111216065227/http://www.bgc.se/upload/Gemensamt/Trycksaker/Manualer/BG6070.pdf section 5.2
1
+ # https://www.bankgirot.se/globalassets/dokument/anvandarmanualer/bankgiroinbetalningar_anvandarmanual_sv_31okt2016.pdf section 5.2
2
2
 
3
3
  module BankTools
4
4
  module SE
@@ -66,14 +66,28 @@ module BankTools
66
66
 
67
67
  # max_length is 19 because that's the longest allowed integer by default in a Postgres integer column with Ruby on Rails. So attempting some queries with longer OCRs may cause exceptions.
68
68
  def self.find_all_in_string(string, length_digit: false, pad: "", min_length: 4, max_length: 19)
69
- expanded_string = [ string, *[ "\n", ";", "." ].map { |x| string.gsub(x, "") } ].join(" ")
69
+ # First, treat the input as one long string of digits.
70
+ # E.g. "1234 and 5678" becomes "12345678".
71
+ digit_string = string.gsub(/\D/, "")
72
+ digit_string_length = digit_string.length
70
73
 
71
- numbers = expanded_string.scan(/\d+/)
74
+ candidates = []
72
75
 
73
- expanded_numbers = with_numbers_found_by_removing_prefix_and_postfix(numbers).
74
- reject { |n| n.length < min_length || n.length > max_length }
76
+ # Then find all substrings of min_length, and of all other lengths, up to max_length.
77
+ # So e.g. find all four-digit substrings ("1234", "2345", …), all five-digit substrings and so on.
75
78
 
76
- expanded_numbers.select { |candidate|
79
+ 0.upto(digit_string.length - min_length) do |start_pos|
80
+ min_end_pos = [ start_pos + min_length, digit_string_length ].min - 1
81
+ max_end_pos = [ start_pos + max_length, digit_string_length ].min - 1
82
+
83
+ min_end_pos.upto(max_end_pos) do |end_pos|
84
+ candidates << digit_string.slice(start_pos..end_pos)
85
+ end
86
+ end
87
+
88
+ # Finally, limit these substrings to ones that are actually valid OCRs.
89
+
90
+ candidates.select { |candidate|
77
91
  begin
78
92
  to_number(candidate, length_digit: length_digit, pad: pad)
79
93
  true
@@ -1,5 +1,5 @@
1
1
  module BankTools
2
2
  module SE
3
- VERSION = "2.5.0"
3
+ VERSION = "2.6.0"
4
4
  end
5
5
  end
data/spec/account_spec.rb CHANGED
@@ -5,20 +5,20 @@ require "banktools-se"
5
5
 
6
6
  describe BankTools::SE::Account do
7
7
  it "should initialize" do
8
- BankTools::SE::Account.new("foo").should be_a(BankTools::SE::Account)
8
+ expect(BankTools::SE::Account.new("foo")).to be_a(BankTools::SE::Account)
9
9
  end
10
10
 
11
11
  describe "#valid?" do
12
12
  it "should be true with no errors" do
13
13
  account = BankTools::SE::Account.new("foo")
14
- account.stub(:errors).and_return([])
15
- account.should be_valid
14
+ allow(account).to receive(:errors).and_return([])
15
+ expect(account).to be_valid
16
16
  end
17
17
 
18
18
  it "should be false with errors" do
19
19
  account = BankTools::SE::Account.new("foo")
20
- account.stub(:errors).and_return([:error])
21
- account.should_not be_valid
20
+ allow(account).to receive(:errors).and_return([:error])
21
+ expect(account).not_to be_valid
22
22
  end
23
23
  end
24
24
 
@@ -68,99 +68,99 @@ describe BankTools::SE::Account do
68
68
 
69
69
  ].each do |number|
70
70
  it "should be empty for a valid number like #{number}" do
71
- BankTools::SE::Account.new(number).errors.should == []
71
+ expect(BankTools::SE::Account.new(number).errors).to eq([])
72
72
  end
73
73
  end
74
74
 
75
75
  it "should include :too_short for numbers shorter than the bank allows" do
76
- BankTools::SE::Account.new("11007").errors.should include(BankTools::SE::Errors::TOO_SHORT)
76
+ expect(BankTools::SE::Account.new("11007").errors).to include(BankTools::SE::Errors::TOO_SHORT)
77
77
  end
78
78
 
79
79
  it "should not include :too_short for Swedbank/Sparbanker numbers that can be zerofilled" do
80
- BankTools::SE::Account.new("8000-2-00000000").errors.should_not include(BankTools::SE::Errors::TOO_SHORT)
81
- BankTools::SE::Account.new("9300-2-00000000").errors.should_not include(BankTools::SE::Errors::TOO_SHORT)
82
- BankTools::SE::Account.new("9570-2-00000000").errors.should_not include(BankTools::SE::Errors::TOO_SHORT)
80
+ expect(BankTools::SE::Account.new("8000-2-00000000").errors).not_to include(BankTools::SE::Errors::TOO_SHORT)
81
+ expect(BankTools::SE::Account.new("9300-2-00000000").errors).not_to include(BankTools::SE::Errors::TOO_SHORT)
82
+ expect(BankTools::SE::Account.new("9570-2-00000000").errors).not_to include(BankTools::SE::Errors::TOO_SHORT)
83
83
  end
84
84
 
85
85
  it "should include :too_long for numbers longer than the bank allows" do
86
- BankTools::SE::Account.new("1100000000007").errors.should include(BankTools::SE::Errors::TOO_LONG)
86
+ expect(BankTools::SE::Account.new("1100000000007").errors).to include(BankTools::SE::Errors::TOO_LONG)
87
87
  end
88
88
 
89
89
  it "should not include :too_long for Swedbank/Sparbanker numbers with clearing checksum" do
90
- BankTools::SE::Account.new("8000-2-0000000000").errors.should_not include(BankTools::SE::Errors::TOO_LONG)
90
+ expect(BankTools::SE::Account.new("8000-2-0000000000").errors).not_to include(BankTools::SE::Errors::TOO_LONG)
91
91
  end
92
92
 
93
93
  it "should include :invalid_characters for numbers with other character than digits, spaces and dashes" do
94
- BankTools::SE::Account.new("1 2-3X").errors.should include(BankTools::SE::Errors::INVALID_CHARACTERS)
95
- BankTools::SE::Account.new("1 2-3").errors.should_not include(BankTools::SE::Errors::INVALID_CHARACTERS)
94
+ expect(BankTools::SE::Account.new("1 2-3X").errors).to include(BankTools::SE::Errors::INVALID_CHARACTERS)
95
+ expect(BankTools::SE::Account.new("1 2-3").errors).not_to include(BankTools::SE::Errors::INVALID_CHARACTERS)
96
96
  end
97
97
 
98
98
  it "should include :bad_checksum for Nordea personkonto if the serial Luhn/mod 10 checksum is incorrect" do
99
- BankTools::SE::Utils.valid_luhn?("800928-6249").should eq(true)
100
- BankTools::SE::Utils.valid_luhn?("3300-800928-6249").should eq(false)
101
- BankTools::SE::Account.new("3300-800928-6249").errors.should_not include(BankTools::SE::Errors::BAD_CHECKSUM)
99
+ expect(BankTools::SE::Utils.valid_luhn?("800928-6249")).to eq(true)
100
+ expect(BankTools::SE::Utils.valid_luhn?("3300-800928-6249")).to eq(false)
101
+ expect(BankTools::SE::Account.new("3300-800928-6249").errors).not_to include(BankTools::SE::Errors::BAD_CHECKSUM)
102
102
  end
103
103
 
104
104
  it "should include :unknown_clearing_number if the clearing number is unknown" do
105
- BankTools::SE::Account.new("10000000009").errors.should include(BankTools::SE::Errors::UNKNOWN_CLEARING_NUMBER)
106
- BankTools::SE::Account.new("11000000007").errors.should_not include(BankTools::SE::Errors::UNKNOWN_CLEARING_NUMBER)
105
+ expect(BankTools::SE::Account.new("10000000009").errors).to include(BankTools::SE::Errors::UNKNOWN_CLEARING_NUMBER)
106
+ expect(BankTools::SE::Account.new("11000000007").errors).not_to include(BankTools::SE::Errors::UNKNOWN_CLEARING_NUMBER)
107
107
  end
108
108
  end
109
109
 
110
110
  describe "#bank" do
111
111
  it "should return the bank for the current clearing number" do
112
- BankTools::SE::Account.new("11000000007").bank.should == "Nordea"
113
- BankTools::SE::Account.new("11550000001").bank.should == "Nordea"
114
- BankTools::SE::Account.new("11990000009").bank.should == "Nordea"
115
- BankTools::SE::Account.new("12000000005").bank.should == "Danske Bank"
112
+ expect(BankTools::SE::Account.new("11000000007").bank).to eq("Nordea")
113
+ expect(BankTools::SE::Account.new("11550000001").bank).to eq("Nordea")
114
+ expect(BankTools::SE::Account.new("11990000009").bank).to eq("Nordea")
115
+ expect(BankTools::SE::Account.new("12000000005").bank).to eq("Danske Bank")
116
116
  end
117
117
 
118
118
  it "should return nil for unknown clearing numbers" do
119
- BankTools::SE::Account.new("10000000009").bank.should be_nil
119
+ expect(BankTools::SE::Account.new("10000000009").bank).to be_nil
120
120
  end
121
121
  end
122
122
 
123
123
  describe "#clearing_number" do
124
124
  it "should be the first four digits" do
125
- BankTools::SE::Account.new("12345678").clearing_number.should == "1234"
125
+ expect(BankTools::SE::Account.new("12345678").clearing_number).to eq("1234")
126
126
  end
127
127
 
128
128
  it "should be the first five digits if there is a clearing number checksum" do
129
- BankTools::SE::Account.new("8000-2-0000000000").clearing_number.should == "8000-2"
129
+ expect(BankTools::SE::Account.new("8000-2-0000000000").clearing_number).to eq("8000-2")
130
130
  end
131
131
  end
132
132
 
133
133
  describe "#serial_number" do
134
134
  it "should be the digits after the first four digits" do
135
- BankTools::SE::Account.new("12345678").serial_number.should == "5678"
135
+ expect(BankTools::SE::Account.new("12345678").serial_number).to eq("5678")
136
136
  end
137
137
 
138
138
  it "should be the digits after the first five digits if there is a clearing number checksum" do
139
- BankTools::SE::Account.new("8000-2-0000000000").serial_number.should == "0000000000"
139
+ expect(BankTools::SE::Account.new("8000-2-0000000000").serial_number).to eq("0000000000")
140
140
  end
141
141
 
142
142
  it "should be the empty string if there aren't enough numbers" do
143
- BankTools::SE::Account.new("12").serial_number.should == ""
143
+ expect(BankTools::SE::Account.new("12").serial_number).to eq("")
144
144
  end
145
145
 
146
146
  end
147
147
 
148
148
  describe "#normalize" do
149
149
  it "should normalize to clearing number dash serial number" do
150
- account = BankTools::SE::Account.new("11000000007").normalize.should == "1100-0000007"
150
+ account = 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
154
- BankTools::SE::Account.new("8000-2-0000000000").normalize.should == "8000-2-0000000000"
154
+ expect(BankTools::SE::Account.new("8000-2-0000000000").normalize).to eq("8000-2-0000000000")
155
155
  end
156
156
 
157
157
  it "should not attempt to normalize invalid numbers" do
158
- account = BankTools::SE::Account.new(" 1-2-3 ").normalize.should == " 1-2-3 "
158
+ account = 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
- BankTools::SE::Account.new("8000-2-80000003").normalize.should == "8000-2-0080000003"
163
- BankTools::SE::Account.new("8000-2-8000000003").normalize.should == "8000-2-8000000003"
162
+ expect(BankTools::SE::Account.new("8000-2-80000003").normalize).to eq("8000-2-0080000003")
163
+ expect(BankTools::SE::Account.new("8000-2-8000000003").normalize).to eq("8000-2-8000000003")
164
164
  end
165
165
  end
166
166
  end
@@ -3,20 +3,20 @@ require "banktools-se"
3
3
 
4
4
  describe BankTools::SE::Bankgiro do
5
5
  it "should initialize" do
6
- BankTools::SE::Bankgiro.new("foo").should be_a(BankTools::SE::Bankgiro)
6
+ expect(BankTools::SE::Bankgiro.new("foo")).to be_a(BankTools::SE::Bankgiro)
7
7
  end
8
8
 
9
9
  describe "#valid?" do
10
10
  it "should be true with no errors" do
11
11
  account = BankTools::SE::Bankgiro.new("foo")
12
- account.stub(:errors).and_return([])
13
- account.should be_valid
12
+ allow(account).to receive(:errors).and_return([])
13
+ expect(account).to be_valid
14
14
  end
15
15
 
16
16
  it "should be false with errors" do
17
17
  account = BankTools::SE::Bankgiro.new("foo")
18
- account.stub(:errors).and_return([:error])
19
- account.should_not be_valid
18
+ allow(account).to receive(:errors).and_return([:error])
19
+ expect(account).not_to be_valid
20
20
  end
21
21
  end
22
22
 
@@ -28,59 +28,59 @@ describe BankTools::SE::Bankgiro do
28
28
  "640-5070",
29
29
  ].each do |number|
30
30
  it "should be empty for a valid number like #{number}" do
31
- BankTools::SE::Bankgiro.new(number).errors.should be_empty
31
+ expect(BankTools::SE::Bankgiro.new(number).errors).to be_empty
32
32
  end
33
33
  end
34
34
 
35
35
  it "should include :too_short for numbers shorter than 7 digits" do
36
- BankTools::SE::Bankgiro.new(nil).errors.should include(BankTools::SE::Errors::TOO_SHORT)
37
- BankTools::SE::Bankgiro.new("").errors.should include(BankTools::SE::Errors::TOO_SHORT)
38
- BankTools::SE::Bankgiro.new("54-0296").errors.should include(BankTools::SE::Errors::TOO_SHORT)
39
- BankTools::SE::Bankgiro.new("54---------0296").errors.should include(BankTools::SE::Errors::TOO_SHORT)
36
+ expect(BankTools::SE::Bankgiro.new(nil).errors).to include(BankTools::SE::Errors::TOO_SHORT)
37
+ expect(BankTools::SE::Bankgiro.new("").errors).to include(BankTools::SE::Errors::TOO_SHORT)
38
+ expect(BankTools::SE::Bankgiro.new("54-0296").errors).to include(BankTools::SE::Errors::TOO_SHORT)
39
+ expect(BankTools::SE::Bankgiro.new("54---------0296").errors).to include(BankTools::SE::Errors::TOO_SHORT)
40
40
  end
41
41
 
42
42
  it "should include :too_long for numbers longer than 8 digits" do
43
- BankTools::SE::Bankgiro.new("5402-96810").errors.should include(BankTools::SE::Errors::TOO_LONG)
43
+ expect(BankTools::SE::Bankgiro.new("5402-96810").errors).to include(BankTools::SE::Errors::TOO_LONG)
44
44
  end
45
45
 
46
46
  it "should include :invalid_characters for numbers with other character than digits, spaces and dashes" do
47
- BankTools::SE::Bankgiro.new("5402-9681X").errors.should include(BankTools::SE::Errors::INVALID_CHARACTERS)
48
- BankTools::SE::Bankgiro.new(" 5 4 0 2 - 9 6 8 1 ").errors.should_not include(BankTools::SE::Errors::INVALID_CHARACTERS)
47
+ expect(BankTools::SE::Bankgiro.new("5402-9681X").errors).to include(BankTools::SE::Errors::INVALID_CHARACTERS)
48
+ expect(BankTools::SE::Bankgiro.new(" 5 4 0 2 - 9 6 8 1 ").errors).not_to include(BankTools::SE::Errors::INVALID_CHARACTERS)
49
49
  end
50
50
 
51
51
  it "should include :bad_checksum if the Luhn/mod 10 checksum is incorrect" do
52
- BankTools::SE::Bankgiro.new("5402-9682").errors.should include(BankTools::SE::Errors::BAD_CHECKSUM)
52
+ expect(BankTools::SE::Bankgiro.new("5402-9682").errors).to include(BankTools::SE::Errors::BAD_CHECKSUM)
53
53
  end
54
54
  end
55
55
 
56
56
  describe "#normalize" do
57
57
  it "should normalize 7-digit numbers to NNN-NNNN" do
58
58
  account = BankTools::SE::Bankgiro.new(" 6-40 - 5070")
59
- account.normalize.should == "640-5070"
59
+ expect(account.normalize).to eq("640-5070")
60
60
  end
61
61
 
62
62
  it "should normalize 8-digit numbers to NNNN-NNNN" do
63
63
  account = BankTools::SE::Bankgiro.new(" 5-4-0-2-9-6- 81- ")
64
- account.normalize.should == "5402-9681"
64
+ expect(account.normalize).to eq("5402-9681")
65
65
  end
66
66
 
67
67
  it "should not attempt to normalize invalid numbers" do
68
68
  account = BankTools::SE::Bankgiro.new(" 1-2-3 ")
69
- account.normalize.should == " 1-2-3 "
69
+ expect(account.normalize).to eq(" 1-2-3 ")
70
70
  end
71
71
  end
72
72
 
73
73
  describe "#fundraising? (90-konto)" do
74
74
  it "should be true for the number series 900-nnnn to 904-nnnn" do
75
- BankTools::SE::Bankgiro.new("902-0033").should be_fundraising
75
+ expect(BankTools::SE::Bankgiro.new("902-0033")).to be_fundraising
76
76
  end
77
77
 
78
78
  it "should be false for invalid numbers in the right series" do
79
- BankTools::SE::Bankgiro.new("902-0034").should_not be_fundraising
79
+ expect(BankTools::SE::Bankgiro.new("902-0034")).not_to be_fundraising
80
80
  end
81
81
 
82
82
  it "should be false for numbers outside the right series" do
83
- BankTools::SE::Bankgiro.new("5402-9681").should_not be_fundraising
83
+ expect(BankTools::SE::Bankgiro.new("5402-9681")).not_to be_fundraising
84
84
  end
85
85
  end
86
86
  end
data/spec/ocr_spec.rb CHANGED
@@ -2,22 +2,22 @@ require "spec_helper"
2
2
  require "banktools-se"
3
3
 
4
4
  describe BankTools::SE::OCR do
5
- # http://web.archive.org/web/20111216065227/http://www.bgc.se/upload/Gemensamt/Trycksaker/Manualer/BG6070.pdf section 5.2
5
+ # https://www.bankgirot.se/globalassets/dokument/anvandarmanualer/bankgiroinbetalningar_anvandarmanual_sv_31okt2016.pdf section 5.2
6
6
  describe ".from_number" do
7
7
  it "adds a mod-10 check digit" do
8
- BankTools::SE::OCR.from_number("123").should eq "1230"
8
+ expect(BankTools::SE::OCR.from_number("123")).to eq "1230"
9
9
  end
10
10
 
11
11
  it "handles integer input" do
12
- BankTools::SE::OCR.from_number(123).should eq "1230"
12
+ expect(BankTools::SE::OCR.from_number(123)).to eq "1230"
13
13
  end
14
14
 
15
15
  it "can add an optional length digit" do
16
- BankTools::SE::OCR.from_number("1234567890", length_digit: true).should eq "123456789023"
16
+ expect(BankTools::SE::OCR.from_number("1234567890", length_digit: true)).to eq "123456789023"
17
17
  end
18
18
 
19
19
  it "can pad the number" do
20
- BankTools::SE::OCR.from_number("1234567890", length_digit: true, pad: "0").should eq "1234567890037"
20
+ expect(BankTools::SE::OCR.from_number("1234567890", length_digit: true, pad: "0")).to eq "1234567890037"
21
21
  end
22
22
 
23
23
  it "raises if resulting number is > 25 digits" do
@@ -31,19 +31,19 @@ describe BankTools::SE::OCR do
31
31
 
32
32
  describe ".to_number" do
33
33
  it "strips the mod-10 check digit" do
34
- BankTools::SE::OCR.to_number("1230").should eq "123"
34
+ expect(BankTools::SE::OCR.to_number("1230")).to eq "123"
35
35
  end
36
36
 
37
37
  it "handles integer input" do
38
- BankTools::SE::OCR.to_number(1230).should eq "123"
38
+ expect(BankTools::SE::OCR.to_number(1230)).to eq "123"
39
39
  end
40
40
 
41
41
  it "can strip an optional length digit" do
42
- BankTools::SE::OCR.to_number("123456789023", length_digit: true).should eq "1234567890"
42
+ expect(BankTools::SE::OCR.to_number("123456789023", length_digit: true)).to eq "1234567890"
43
43
  end
44
44
 
45
45
  it "strips the given padding" do
46
- BankTools::SE::OCR.to_number("1234567890037", length_digit: true, pad: "0").should eq "1234567890"
46
+ expect(BankTools::SE::OCR.to_number("1234567890037", length_digit: true, pad: "0")).to eq "1234567890"
47
47
  end
48
48
 
49
49
  it "raises if the given number is too short to be a valid OCR" do
@@ -74,32 +74,25 @@ describe BankTools::SE::OCR do
74
74
 
75
75
  describe ".find_all_in_string" do
76
76
  it "detects only number sequences that are valid OCRs" do
77
- expect(BankTools::SE::OCR.find_all_in_string("1230 1234 4564")).to eq [ "1230", "4564" ]
77
+ expect(BankTools::SE::OCR.find_all_in_string("1230 1234 4564")).to include "1230", "4564"
78
+ expect(BankTools::SE::OCR.find_all_in_string("1230 1234 4564")).not_to include "1234"
78
79
  end
79
80
 
80
81
  it "requires OCRs to comply with the specified length_digit and pad options" do
81
82
  string = "1230 4564 123067 456061"
82
- expect(BankTools::SE::OCR.find_all_in_string(string)).to eq [ "1230", "4564", "123067", "456061" ]
83
- expect(BankTools::SE::OCR.find_all_in_string(string, length_digit: true, pad: "0")).to eq [ "123067", "456061" ]
83
+ expect(BankTools::SE::OCR.find_all_in_string(string)).to include "1230", "4564", "123067", "456061"
84
+
85
+ expect(BankTools::SE::OCR.find_all_in_string(string, length_digit: true, pad: "0")).to include "123067", "456061"
86
+ expect(BankTools::SE::OCR.find_all_in_string(string, length_digit: true, pad: "0")).not_to include "1230", "4564"
84
87
  end
85
88
 
86
89
  it "finds digits among any non-digit characters" do
87
90
  expect(BankTools::SE::OCR.find_all_in_string("x1230x")).to eq [ "1230" ]
88
91
  end
89
92
 
90
- it "handles OCR numbers both separated and split by newlines" do
91
- expect(BankTools::SE::OCR.find_all_in_string("1230\n4564")).to include "1230", "4564", "12304564"
92
- expect(BankTools::SE::OCR.find_all_in_string("45\n64")).to eq [ "4564" ]
93
- end
94
-
95
- it "handles OCR numbers both separated and split by semicolons" do
96
- expect(BankTools::SE::OCR.find_all_in_string("1230;4564")).to include "1230", "4564", "12304564"
97
- expect(BankTools::SE::OCR.find_all_in_string("45;64")).to eq [ "4564" ]
98
- end
99
-
100
- it "handles OCR numbers both separated and split by '.'" do
101
- expect(BankTools::SE::OCR.find_all_in_string("1230.4564")).to include "1230", "4564", "12304564"
102
- expect(BankTools::SE::OCR.find_all_in_string("45.64")).to eq [ "4564" ]
93
+ it "handles OCR numbers both separated and split by non-digits" do
94
+ expect(BankTools::SE::OCR.find_all_in_string("12\n30\n4564")).to include "1230", "4564", "12304564"
95
+ expect(BankTools::SE::OCR.find_all_in_string("12;30.4564")).to include "1230", "4564", "12304564"
103
96
  end
104
97
 
105
98
  it "handles numbers smushed together" do
@@ -118,11 +111,13 @@ describe BankTools::SE::OCR do
118
111
  end
119
112
 
120
113
  it "lets you configure the accepted OCR min_length" do
121
- expect(BankTools::SE::OCR.find_all_in_string("12304564")).to eq [ "12304564", "04564", "1230", "4564" ]
122
- expect(BankTools::SE::OCR.find_all_in_string("12304564", min_length: 6)).to eq [ "12304564" ]
114
+ expect(BankTools::SE::OCR.find_all_in_string("12304564")).to include "1230", "12304564"
115
+
116
+ expect(BankTools::SE::OCR.find_all_in_string("12304564", min_length: 6)).to include "12304564"
117
+ expect(BankTools::SE::OCR.find_all_in_string("12304564", min_length: 6)).not_to include "1230"
123
118
 
124
119
  expect(BankTools::SE::OCR.find_all_in_string("1234")).to eq []
125
- expect(BankTools::SE::OCR.find_all_in_string("1234", min_length: 2)).to eq [ "34" ]
120
+ expect(BankTools::SE::OCR.find_all_in_string("1234", min_length: 2)).to include "34"
126
121
  end
127
122
 
128
123
  it "lets you configure the accepted OCR max_length" do
@@ -138,7 +133,8 @@ describe BankTools::SE::OCR do
138
133
  end
139
134
 
140
135
  it "excludes duplicates" do
141
- expect(BankTools::SE::OCR.find_all_in_string("1230 1230 4564")).to eq [ "1230", "4564" ]
136
+ results = BankTools::SE::OCR.find_all_in_string("1230 1230 4564")
137
+ expect(results.length).to eq results.uniq.length
142
138
  end
143
139
  end
144
140
  end
@@ -4,21 +4,21 @@ require "banktools-se"
4
4
  describe BankTools::SE::Plusgiro do
5
5
 
6
6
  it "should initialize" do
7
- BankTools::SE::Plusgiro.new("foo").should be_a(BankTools::SE::Plusgiro)
7
+ expect(BankTools::SE::Plusgiro.new("foo")).to be_a(BankTools::SE::Plusgiro)
8
8
  end
9
9
 
10
10
  describe "#valid?" do
11
11
 
12
12
  it "should be true with no errors" do
13
13
  account = BankTools::SE::Plusgiro.new("foo")
14
- account.stub(:errors).and_return([])
15
- account.should be_valid
14
+ allow(account).to receive(:errors).and_return([])
15
+ expect(account).to be_valid
16
16
  end
17
17
 
18
18
  it "should be false with errors" do
19
19
  account = BankTools::SE::Plusgiro.new("foo")
20
- account.stub(:errors).and_return([:error])
21
- account.should_not be_valid
20
+ allow(account).to receive(:errors).and_return([:error])
21
+ expect(account).not_to be_valid
22
22
  end
23
23
 
24
24
  end
@@ -30,28 +30,28 @@ describe BankTools::SE::Plusgiro do
30
30
  "4-2", # Sveriges riksbank
31
31
  ].each do |number|
32
32
  it "should be empty for a valid number like #{number}" do
33
- BankTools::SE::Plusgiro.new(number).errors.should be_empty
33
+ expect(BankTools::SE::Plusgiro.new(number).errors).to be_empty
34
34
  end
35
35
  end
36
36
 
37
37
  it "should include :too_short for numbers shorter than 2 digits" do
38
- BankTools::SE::Plusgiro.new(nil).errors.should include(BankTools::SE::Errors::TOO_SHORT)
39
- BankTools::SE::Plusgiro.new("").errors.should include(BankTools::SE::Errors::TOO_SHORT)
40
- BankTools::SE::Plusgiro.new("1").errors.should include(BankTools::SE::Errors::TOO_SHORT)
41
- BankTools::SE::Plusgiro.new("1---------").errors.should include(BankTools::SE::Errors::TOO_SHORT)
38
+ expect(BankTools::SE::Plusgiro.new(nil).errors).to include(BankTools::SE::Errors::TOO_SHORT)
39
+ expect(BankTools::SE::Plusgiro.new("").errors).to include(BankTools::SE::Errors::TOO_SHORT)
40
+ expect(BankTools::SE::Plusgiro.new("1").errors).to include(BankTools::SE::Errors::TOO_SHORT)
41
+ expect(BankTools::SE::Plusgiro.new("1---------").errors).to include(BankTools::SE::Errors::TOO_SHORT)
42
42
  end
43
43
 
44
44
  it "should include :too_long for numbers longer than 8 digits" do
45
- BankTools::SE::Plusgiro.new("410 54 68-51").errors.should include(BankTools::SE::Errors::TOO_LONG)
45
+ expect(BankTools::SE::Plusgiro.new("410 54 68-51").errors).to include(BankTools::SE::Errors::TOO_LONG)
46
46
  end
47
47
 
48
48
  it "should include :invalid_characters for numbers with other character than digits, spaces and dashes" do
49
- BankTools::SE::Plusgiro.new("410 54 68-5X").errors.should include(BankTools::SE::Errors::INVALID_CHARACTERS)
50
- BankTools::SE::Plusgiro.new("4 1 0 5 4 6 8 - 5 ").errors.should_not include(BankTools::SE::Errors::INVALID_CHARACTERS)
49
+ expect(BankTools::SE::Plusgiro.new("410 54 68-5X").errors).to include(BankTools::SE::Errors::INVALID_CHARACTERS)
50
+ expect(BankTools::SE::Plusgiro.new("4 1 0 5 4 6 8 - 5 ").errors).not_to include(BankTools::SE::Errors::INVALID_CHARACTERS)
51
51
  end
52
52
 
53
53
  it "should include :bad_checksum if the Luhn/mod 10 checksum is incorrect" do
54
- BankTools::SE::Plusgiro.new("410 54 68-6").errors.should include(BankTools::SE::Errors::BAD_CHECKSUM)
54
+ expect(BankTools::SE::Plusgiro.new("410 54 68-6").errors).to include(BankTools::SE::Errors::BAD_CHECKSUM)
55
55
  end
56
56
 
57
57
  end
@@ -60,22 +60,22 @@ describe BankTools::SE::Plusgiro do
60
60
 
61
61
  it "should normalize short numbers to the format N-N" do
62
62
  account = BankTools::SE::Plusgiro.new(" 4 - 2")
63
- account.normalize.should == "4-2"
63
+ expect(account.normalize).to eq("4-2")
64
64
  end
65
65
 
66
66
  it "should normalize odd-length numbers to the format NN NN NN-N" do
67
67
  account = BankTools::SE::Plusgiro.new("2865434")
68
- account.normalize.should == "28 65 43-4"
68
+ expect(account.normalize).to eq("28 65 43-4")
69
69
  end
70
70
 
71
71
  it "should normalize even-length numbers to the format NNN NN NN-N" do
72
72
  account = BankTools::SE::Plusgiro.new("41054685")
73
- account.normalize.should == "410 54 68-5"
73
+ expect(account.normalize).to eq("410 54 68-5")
74
74
  end
75
75
 
76
76
  it "should not attempt to normalize invalid numbers" do
77
77
  account = BankTools::SE::Plusgiro.new(" 1-2-3 ")
78
- account.normalize.should == " 1-2-3 "
78
+ expect(account.normalize).to eq(" 1-2-3 ")
79
79
  end
80
80
 
81
81
  end
@@ -83,15 +83,15 @@ describe BankTools::SE::Plusgiro do
83
83
  describe "#fundraising? (90-konto)" do
84
84
 
85
85
  it "should be true for the number series 90-nnnn" do
86
- BankTools::SE::Plusgiro.new("90 20 03-3").should be_fundraising
86
+ expect(BankTools::SE::Plusgiro.new("90 20 03-3")).to be_fundraising
87
87
  end
88
88
 
89
89
  it "should be false for invalid numbers in the right series" do
90
- BankTools::SE::Plusgiro.new("90 20 03-4").should_not be_fundraising
90
+ expect(BankTools::SE::Plusgiro.new("90 20 03-4")).not_to be_fundraising
91
91
  end
92
92
 
93
93
  it "should be false for numbers outside the right series" do
94
- BankTools::SE::Plusgiro.new("4-2").should_not be_fundraising
94
+ expect(BankTools::SE::Plusgiro.new("4-2")).not_to be_fundraising
95
95
  end
96
96
 
97
97
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  RSpec.configure do |config|
2
- config.treat_symbols_as_metadata_keys_with_true_values = true
3
2
  config.filter_run :focus => true
4
3
  config.run_all_when_everything_filtered = true
5
4
  end
data/spec/utils_spec.rb CHANGED
@@ -19,7 +19,7 @@ describe BankTools::SE::Utils, "valid_luhn?" do
19
19
  "5402-9681",
20
20
  ].each do |number|
21
21
  it "should allow a valid number like #{number}" do
22
- BankTools::SE::Utils.valid_luhn?(number).should eq(true)
22
+ expect(BankTools::SE::Utils.valid_luhn?(number)).to eq(true)
23
23
  end
24
24
  end
25
25
 
@@ -29,7 +29,7 @@ describe BankTools::SE::Utils, "valid_luhn?" do
29
29
  "5402-9682",
30
30
  ].each do |number|
31
31
  it "should disallow an invalid number like #{number}" do
32
- BankTools::SE::Utils.valid_luhn?(number).should eq(false)
32
+ expect(BankTools::SE::Utils.valid_luhn?(number)).to eq(false)
33
33
  end
34
34
  end
35
35
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: banktools-se
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henrik Nyh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-26 00:00:00.000000000 Z
11
+ date: 2016-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake