banktools-se 0.0.1 → 0.2.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.
- data/README.markdown +16 -5
- data/lib/banktools-se/account.rb +34 -46
- data/lib/banktools-se/bankgiro.rb +4 -4
- data/lib/banktools-se/errors.rb +11 -0
- data/lib/banktools-se/plusgiro.rb +4 -4
- data/lib/banktools-se/utils.rb +1 -2
- data/lib/banktools-se/version.rb +1 -1
- data/lib/banktools-se.rb +1 -0
- data/spec/account_spec.rb +29 -39
- data/spec/bankgiro_spec.rb +8 -8
- data/spec/plusgiro_spec.rb +8 -8
- metadata +47 -75
data/README.markdown
CHANGED
@@ -6,6 +6,8 @@ Ruby gem to validate, normalize/prettify and to some extent interpret
|
|
6
6
|
* Swedish plusgiro numbers
|
7
7
|
* Swedish bankgiro numbers
|
8
8
|
|
9
|
+
This gem does what it can to weed out invalid numbers but errs on the side of allowing too much, in the absence of good specifications, so be advised that a "valid" number might still be incorrect.
|
10
|
+
|
9
11
|
Inspired by [iulianu/iban-tools](https://github.com/iulianu/iban-tools). Please consider contributing gems for your country.
|
10
12
|
|
11
13
|
|
@@ -60,11 +62,13 @@ to install it.
|
|
60
62
|
|
61
63
|
# Bank account
|
62
64
|
|
63
|
-
valid_account = BankTools::SE::Account.new("
|
65
|
+
valid_account = BankTools::SE::Account.new("11000000000")
|
64
66
|
valid_account.valid? # => true
|
65
67
|
valid_account.errors # => []
|
68
|
+
valid_account.normalize # => "1100-0000000"
|
66
69
|
valid_account.bank # => "Nordea"
|
67
|
-
valid_account.
|
70
|
+
valid_account.clearing_number # => "1100"
|
71
|
+
valid_account.serial_number # => "0000000"
|
68
72
|
|
69
73
|
bad_account = BankTools::SE::Account.new(" 0000-0000000X ")
|
70
74
|
bad_account.valid? # => false
|
@@ -73,13 +77,21 @@ to install it.
|
|
73
77
|
bad_account.normalize # => " 0000-0000000X "
|
74
78
|
|
75
79
|
|
80
|
+
# Error codes
|
81
|
+
|
82
|
+
BankTools::SE::Errors::TOO_SHORT # => :too_short
|
83
|
+
BankTools::SE::Errors::TOO_LONG # => :too_long
|
84
|
+
BankTools::SE::Errors::INVALID_CHARACTERS # => :invalid_characters
|
85
|
+
BankTools::SE::Errors::BAD_CHECKSUM # => :bad_checksum
|
86
|
+
BankTools::SE::Errors::UNKNOWN_CLEARING_NUMBER # => :unknown_clearing_number
|
87
|
+
|
88
|
+
|
76
89
|
## TODO
|
77
90
|
|
78
91
|
Possible improvements to make:
|
79
92
|
|
80
|
-
* Handle [Swedbank zerofill](http://www.danskebank.se/sv-se/eBanking-content/text-pages/Pages/Bankliste2.aspx).
|
81
93
|
* Handle [Sparbanken zerofill](http://www.danskebank.se/sv-se/eBanking-content/text-pages/Pages/Bankliste2.aspx).
|
82
|
-
*
|
94
|
+
* Luhn validation based on [BGC docs](http://www.bgc.se/upload/Gemensamt/Trycksaker/Manualer/BG910.pdf).
|
83
95
|
|
84
96
|
|
85
97
|
## Credits and license
|
@@ -105,4 +117,3 @@ By [Henrik Nyh](http://henrik.nyh.se/) for [Barsoom](http://barsoom.se) under th
|
|
105
117
|
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
106
118
|
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
107
119
|
> THE SOFTWARE.
|
108
|
-
|
data/lib/banktools-se/account.rb
CHANGED
@@ -4,13 +4,7 @@ module BankTools
|
|
4
4
|
module SE
|
5
5
|
class Account
|
6
6
|
|
7
|
-
# http://
|
8
|
-
# Max lengths from
|
9
|
-
# http://www.danskebank.se/sv-se/eBanking-content/text-pages/Pages/Bankliste2.aspx
|
10
|
-
# Min lengths are educated guesses based on the above and
|
11
|
-
# http://sv.wikipedia.org/wiki/Bankkonto
|
12
|
-
# When it's uncertain, let's error on the side of allowing too much.
|
13
|
-
# 1..99 means we have no idea.
|
7
|
+
# http://www.bgc.se/upload/Gemensamt/Trycksaker/Manualer/BG910.pdf
|
14
8
|
|
15
9
|
DEFAULT_SERIAL_NUMBER_LENGTH = 7
|
16
10
|
|
@@ -18,10 +12,8 @@ module BankTools
|
|
18
12
|
1100..1199 => { :name => "Nordea" },
|
19
13
|
1200..1399 => { :name => "Danske Bank" },
|
20
14
|
1400..2099 => { :name => "Nordea" },
|
21
|
-
2300..
|
22
|
-
|
23
|
-
2311..2399 => { :name => "JP Nordiska", :serial_number_length => 1..99 },
|
24
|
-
2950..2950 => { :name => "Sambox", :serial_number_length => 1..99 },
|
15
|
+
2300..2399 => { :name => "Ålandsbanken" },
|
16
|
+
2400..2499 => { :name => "Danske Bank" },
|
25
17
|
3000..3299 => { :name => "Nordea" },
|
26
18
|
3300..3300 => { :name => "Nordea", :serial_number_length => 10, :luhn_for_serial => true }, # Personkonto.
|
27
19
|
3301..3399 => { :name => "Nordea" },
|
@@ -31,39 +23,33 @@ module BankTools
|
|
31
23
|
3783..4999 => { :name => "Nordea" },
|
32
24
|
5000..5999 => { :name => "SEB" },
|
33
25
|
6000..6999 => { :name => "Handelsbanken", :serial_number_length => 9 },
|
34
|
-
7000..
|
35
|
-
|
36
|
-
|
37
|
-
8000..8999 => { :name => "Swedbank och fristående Sparbanker", :serial_number_length => 10, :checksum_for_clearing => true },
|
26
|
+
7000..7999 => { :name => "Swedbank" },
|
27
|
+
# Can be fewer chars but must be zero-filled, so let's call it 10.
|
28
|
+
8000..8999 => { :name => "Swedbank", :serial_number_length => 10, :checksum_for_clearing => true },
|
38
29
|
9020..9029 => { :name => "Länsförsäkringar Bank" },
|
39
30
|
9040..9049 => { :name => "Citibank" },
|
40
|
-
9050..9059 => { :name => "HSB Bank", :serial_number_length => 1..99 },
|
41
31
|
9060..9069 => { :name => "Länsförsäkringar Bank" },
|
42
|
-
|
43
|
-
|
44
|
-
9100..9100 => { :name => "Nordnet Bank" },
|
32
|
+
9090..9099 => { :name => "Royal Bank of Scotland" },
|
33
|
+
9100..9109 => { :name => "Nordnet Bank" },
|
45
34
|
9120..9124 => { :name => "SEB" },
|
46
35
|
9130..9149 => { :name => "SEB" },
|
47
36
|
9150..9169 => { :name => "Skandiabanken" },
|
48
37
|
9170..9179 => { :name => "Ikano Bank" },
|
49
|
-
9180..9189 => { :name => "Danske Bank" },
|
38
|
+
9180..9189 => { :name => "Danske Bank", :serial_number_length => 10 },
|
50
39
|
9190..9199 => { :name => "Den Norske Bank" },
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
9260..9269 => { :name => "Gjensidige NOR Sparebank", :serial_number_length => 1..99 },
|
40
|
+
9230..9239 => { :name => "Marginalen Bank" },
|
41
|
+
9250..9259 => { :name => "SBAB" },
|
42
|
+
9260..9269 => { :name => "Den Norske Bank" },
|
55
43
|
9270..9279 => { :name => "ICA Banken" },
|
56
44
|
9280..9289 => { :name => "Resurs Bank" },
|
57
|
-
9290..9299 => { :name => "Coop Bank", :serial_number_length => 1..99 },
|
58
45
|
9300..9349 => { :name => "Sparbanken Öresund", :serial_number_length => 10 },
|
59
|
-
9400..
|
60
|
-
9460..
|
61
|
-
|
62
|
-
9500..
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
9960..9969 => { :name => "Plusgirot Bank", :serial_number_length => 10 },
|
46
|
+
9400..9449 => { :name => "Forex Bank" },
|
47
|
+
9460..9469 => { :name => "GE Money Bank" },
|
48
|
+
9470..9479 => { :name => "Fortis Bank" },
|
49
|
+
9500..9549 => { :name => "Nordea/Plusgirot", :serial_number_length => 1..10 },
|
50
|
+
9550..9569 => { :name => "Avanza Bank" },
|
51
|
+
9570..9579 => { :name => "Sparbanken Syd", :serial_number_length => 10 },
|
52
|
+
9960..9969 => { :name => "Nordea/Plusgirot", :serial_number_length => 1..10 },
|
67
53
|
}
|
68
54
|
|
69
55
|
attr_reader :number
|
@@ -79,15 +65,15 @@ module BankTools
|
|
79
65
|
def errors
|
80
66
|
errors = []
|
81
67
|
|
82
|
-
errors <<
|
83
|
-
errors <<
|
84
|
-
errors <<
|
68
|
+
errors << Errors::TOO_SHORT if serial_number.length < min_length
|
69
|
+
errors << Errors::TOO_LONG if serial_number.length > max_length
|
70
|
+
errors << Errors::INVALID_CHARACTERS if number.to_s.match(/[^0-9 -]/)
|
85
71
|
|
86
72
|
if luhn_for_serial?
|
87
|
-
errors <<
|
73
|
+
errors << Errors::BAD_CHECKSUM unless BankTools::SE::Utils.valid_luhn?(serial_number)
|
88
74
|
end
|
89
75
|
|
90
|
-
errors <<
|
76
|
+
errors << Errors::UNKNOWN_CLEARING_NUMBER unless bank
|
91
77
|
|
92
78
|
errors
|
93
79
|
end
|
@@ -105,22 +91,24 @@ module BankTools
|
|
105
91
|
end
|
106
92
|
|
107
93
|
def clearing_number
|
108
|
-
|
94
|
+
[
|
95
|
+
digits[0,4],
|
96
|
+
checksum_for_clearing? ? digits[4,1] : nil
|
97
|
+
].compact.join("-")
|
109
98
|
end
|
110
99
|
|
111
100
|
def serial_number
|
112
|
-
|
113
|
-
if checksum_for_clearing? && value.length == max_length
|
114
|
-
value[1..-1]
|
115
|
-
else
|
116
|
-
value
|
117
|
-
end
|
101
|
+
digits.slice(clearing_number_length..-1) || ""
|
118
102
|
end
|
119
103
|
|
120
104
|
private
|
121
105
|
|
106
|
+
def clearing_number_length
|
107
|
+
checksum_for_clearing? ? 5 : 4
|
108
|
+
end
|
109
|
+
|
122
110
|
def bank_data
|
123
|
-
number =
|
111
|
+
number = digits[0,4].to_i
|
124
112
|
_, found_data = CLEARING_NUMBER_MAP.find do |interval, data|
|
125
113
|
interval.include?(number)
|
126
114
|
end
|
@@ -17,10 +17,10 @@ module BankTools
|
|
17
17
|
def errors
|
18
18
|
errors = []
|
19
19
|
|
20
|
-
errors <<
|
21
|
-
errors <<
|
22
|
-
errors <<
|
23
|
-
errors <<
|
20
|
+
errors << Errors::TOO_SHORT if digits.length < 7
|
21
|
+
errors << Errors::TOO_LONG if digits.length > 8
|
22
|
+
errors << Errors::INVALID_CHARACTERS if number.to_s.match(/[^0-9 -]/)
|
23
|
+
errors << Errors::BAD_CHECKSUM unless BankTools::SE::Utils.valid_luhn?(number)
|
24
24
|
|
25
25
|
errors
|
26
26
|
end
|
@@ -18,10 +18,10 @@ module BankTools
|
|
18
18
|
def errors
|
19
19
|
errors = []
|
20
20
|
|
21
|
-
errors <<
|
22
|
-
errors <<
|
23
|
-
errors <<
|
24
|
-
errors <<
|
21
|
+
errors << Errors::TOO_SHORT if digits.length < 2
|
22
|
+
errors << Errors::TOO_LONG if digits.length > 8
|
23
|
+
errors << Errors::INVALID_CHARACTERS if number.to_s.match(/[^0-9 -]/)
|
24
|
+
errors << Errors::BAD_CHECKSUM unless BankTools::SE::Utils.valid_luhn?(number)
|
25
25
|
|
26
26
|
errors
|
27
27
|
end
|
data/lib/banktools-se/utils.rb
CHANGED
@@ -3,10 +3,9 @@ module BankTools
|
|
3
3
|
module Utils
|
4
4
|
|
5
5
|
# Based on http://blog.internautdesign.com/2007/4/18/ruby-luhn-check-aka-mod-10-formula
|
6
|
-
require "enumerator"
|
7
6
|
def self.valid_luhn?(number)
|
8
7
|
digits = number.to_s.scan(/\d/).reverse.map { |x| x.to_i }
|
9
|
-
digits = digits.
|
8
|
+
digits = digits.each_with_index.map { |d, i|
|
10
9
|
d *= 2 if i.odd?
|
11
10
|
d > 9 ? d - 9 : d
|
12
11
|
}
|
data/lib/banktools-se/version.rb
CHANGED
data/lib/banktools-se.rb
CHANGED
data/spec/account_spec.rb
CHANGED
@@ -28,14 +28,10 @@ describe BankTools::SE::Account do
|
|
28
28
|
describe "#errors" do
|
29
29
|
[
|
30
30
|
"1100-0000000", # Nordea.
|
31
|
-
"1155-0000000", # Nordea.
|
32
|
-
"1199-0000000", # Nordea.
|
33
31
|
"1200-0000000", # Danske Bank.
|
34
32
|
"1400-0000000", # Nordea.
|
35
|
-
"2300-
|
36
|
-
"
|
37
|
-
"2311-00", # JP Nordiska.
|
38
|
-
"2950-00", # Sambox.
|
33
|
+
"2300-0000000", # Ålandsbanken.
|
34
|
+
"2400-0000000", # Danske Bank.
|
39
35
|
"3000-0000000", # Nordea.
|
40
36
|
"3300-800928-6249", # Nordea personkonto.
|
41
37
|
"3301-0000000", # Nordea.
|
@@ -46,39 +42,31 @@ describe BankTools::SE::Account do
|
|
46
42
|
"5000-0000000", # SEB.
|
47
43
|
"6000-000000000", # Handelsbanken.
|
48
44
|
"7000-0000000", # Swedbank.
|
49
|
-
"7121-0000000", # Sparbanken i Enköping.
|
50
|
-
"7123-0000000", # Swedbank.
|
51
|
-
"8000-0000000000", # Swedbank/Sparbanker.
|
52
45
|
"8000-2-0000000000", # Swedbank/Sparbanker with clearing number checksum.
|
53
46
|
"9020-0000000", # Länsförsäkringar Bank.
|
54
47
|
"9040-0000000", # Citibank.
|
55
|
-
"9050-00", # HSB Bank.
|
56
48
|
"9060-0000000", # Länsförsäkringar Bank.
|
57
|
-
"
|
58
|
-
"9090-00", # ABN AMBRO.
|
49
|
+
"9090-0000000", # Royal Bank of Scotland.
|
59
50
|
"9100-0000000", # Nordnet Bank.
|
60
51
|
"9120-0000000", # SEB.
|
61
52
|
"9130-0000000", # SEB.
|
62
53
|
"9150-0000000", # Skandiabanken.
|
63
54
|
"9170-0000000", # Ikano Bank.
|
64
|
-
"9180-
|
55
|
+
"9180-0000000000", # Danske Bank.
|
65
56
|
"9190-0000000", # Den Norske Bank.
|
66
|
-
"
|
67
|
-
"
|
68
|
-
"
|
69
|
-
"9260-00", # Gjensidige NOR Sparebank.
|
57
|
+
"9230-0000000", # Marginalen.
|
58
|
+
"9250-0000000", # SBAB.
|
59
|
+
"9260-0000000", # Den Norske Bank.
|
70
60
|
"9270-0000000", # ICA Banken.
|
71
61
|
"9280-0000000", # Resurs Bank.
|
72
|
-
"9290-00", # Coop Bank.
|
73
62
|
"9300-0000000000", # Sparbanken Öresund.
|
74
63
|
"9400-0000000", # Forex Bank.
|
75
64
|
"9460-0000000", # GE Money Bank.
|
76
|
-
"
|
77
|
-
"9500-
|
78
|
-
"9548-00", # Ekobanken.
|
79
|
-
"9549-00", # JAK Medlemsbank.
|
65
|
+
"9470-0000000", # Fortis Bank.
|
66
|
+
"9500-00", # Nordea/Plusgirot.
|
80
67
|
"9550-0000000", # Avanza Bank.
|
81
|
-
"
|
68
|
+
"9570-0000000000", # Sparbanken Syd.
|
69
|
+
"9960-00", # Nordea/Plusgirot.
|
82
70
|
|
83
71
|
].each do |number|
|
84
72
|
it "should be empty for a valid number like #{number}" do
|
@@ -87,31 +75,31 @@ describe BankTools::SE::Account do
|
|
87
75
|
end
|
88
76
|
|
89
77
|
it "should include :too_short for numbers shorter than the bank allows" do
|
90
|
-
BankTools::SE::Account.new("11007").errors.should include(
|
78
|
+
BankTools::SE::Account.new("11007").errors.should include(BankTools::SE::Errors::TOO_SHORT)
|
91
79
|
end
|
92
80
|
|
93
81
|
it "should include :too_long for numbers longer than the bank allows" do
|
94
|
-
BankTools::SE::Account.new("1100000000007").errors.should include(
|
82
|
+
BankTools::SE::Account.new("1100000000007").errors.should include(BankTools::SE::Errors::TOO_LONG)
|
95
83
|
end
|
96
84
|
|
97
85
|
it "should not include :too_long for Swedbank/Sparbanker numbers with clearing checksum" do
|
98
|
-
BankTools::SE::Account.new("8000-2-0000000000").errors.should_not include(
|
86
|
+
BankTools::SE::Account.new("8000-2-0000000000").errors.should_not include(BankTools::SE::Errors::TOO_LONG)
|
99
87
|
end
|
100
88
|
|
101
89
|
it "should include :invalid_characters for numbers with other character than digits, spaces and dashes" do
|
102
|
-
BankTools::SE::Account.new("1 2-3X").errors.should include(
|
103
|
-
BankTools::SE::Account.new("1 2-3").errors.should_not include(
|
90
|
+
BankTools::SE::Account.new("1 2-3X").errors.should include(BankTools::SE::Errors::INVALID_CHARACTERS)
|
91
|
+
BankTools::SE::Account.new("1 2-3").errors.should_not include(BankTools::SE::Errors::INVALID_CHARACTERS)
|
104
92
|
end
|
105
93
|
|
106
94
|
it "should include :bad_checksum for Nordea personkonto if the serial Luhn/mod 10 checksum is incorrect" do
|
107
95
|
BankTools::SE::Utils.valid_luhn?("800928-6249").should be_true
|
108
96
|
BankTools::SE::Utils.valid_luhn?("3300-800928-6249").should be_false
|
109
|
-
BankTools::SE::Account.new("3300-800928-6249").errors.should_not include(
|
97
|
+
BankTools::SE::Account.new("3300-800928-6249").errors.should_not include(BankTools::SE::Errors::BAD_CHECKSUM)
|
110
98
|
end
|
111
99
|
|
112
100
|
it "should include :unknown_clearing_number if the clearing number is unknown" do
|
113
|
-
BankTools::SE::Account.new("10000000009").errors.should include(
|
114
|
-
BankTools::SE::Account.new("11000000007").errors.should_not include(
|
101
|
+
BankTools::SE::Account.new("10000000009").errors.should include(BankTools::SE::Errors::UNKNOWN_CLEARING_NUMBER)
|
102
|
+
BankTools::SE::Account.new("11000000007").errors.should_not include(BankTools::SE::Errors::UNKNOWN_CLEARING_NUMBER)
|
115
103
|
end
|
116
104
|
|
117
105
|
end
|
@@ -137,6 +125,10 @@ describe BankTools::SE::Account do
|
|
137
125
|
BankTools::SE::Account.new("12345678").clearing_number.should == "1234"
|
138
126
|
end
|
139
127
|
|
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"
|
130
|
+
end
|
131
|
+
|
140
132
|
end
|
141
133
|
|
142
134
|
describe "#serial_number" do
|
@@ -145,13 +137,12 @@ describe BankTools::SE::Account do
|
|
145
137
|
BankTools::SE::Account.new("12345678").serial_number.should == "5678"
|
146
138
|
end
|
147
139
|
|
148
|
-
it "should be the
|
149
|
-
BankTools::SE::Account.new("
|
140
|
+
it "should be the digits after the first five digits if there is a clearing number checksum" do
|
141
|
+
BankTools::SE::Account.new("8000-2-0000000000").serial_number.should == "0000000000"
|
150
142
|
end
|
151
143
|
|
152
|
-
it "should
|
153
|
-
BankTools::SE::Account.new("
|
154
|
-
BankTools::SE::Account.new("8000-0000000000").serial_number.should == "0000000000"
|
144
|
+
it "should be the empty string if there aren't enough numbers" do
|
145
|
+
BankTools::SE::Account.new("12").serial_number.should == ""
|
155
146
|
end
|
156
147
|
|
157
148
|
end
|
@@ -162,9 +153,8 @@ describe BankTools::SE::Account do
|
|
162
153
|
account = BankTools::SE::Account.new("11000000007").normalize.should == "1100-0000007"
|
163
154
|
end
|
164
155
|
|
165
|
-
it "should
|
166
|
-
BankTools::SE::Account.new("8000-2-0000000000").normalize.should == "8000-0000000000"
|
167
|
-
BankTools::SE::Account.new("8000-0000000000").normalize.should == "8000-0000000000"
|
156
|
+
it "should keep any Swedbank/Sparbanker clearing checksum" do
|
157
|
+
BankTools::SE::Account.new("8000-2-0000000000").normalize.should == "8000-2-0000000000"
|
168
158
|
end
|
169
159
|
|
170
160
|
it "should not attempt to normalize invalid numbers" do
|
data/spec/bankgiro_spec.rb
CHANGED
@@ -36,23 +36,23 @@ describe BankTools::SE::Bankgiro do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it "should include :too_short for numbers shorter than 7 digits" do
|
39
|
-
BankTools::SE::Bankgiro.new(nil).errors.should include(
|
40
|
-
BankTools::SE::Bankgiro.new("").errors.should include(
|
41
|
-
BankTools::SE::Bankgiro.new("54-0296").errors.should include(
|
42
|
-
BankTools::SE::Bankgiro.new("54---------0296").errors.should include(
|
39
|
+
BankTools::SE::Bankgiro.new(nil).errors.should include(BankTools::SE::Errors::TOO_SHORT)
|
40
|
+
BankTools::SE::Bankgiro.new("").errors.should include(BankTools::SE::Errors::TOO_SHORT)
|
41
|
+
BankTools::SE::Bankgiro.new("54-0296").errors.should include(BankTools::SE::Errors::TOO_SHORT)
|
42
|
+
BankTools::SE::Bankgiro.new("54---------0296").errors.should include(BankTools::SE::Errors::TOO_SHORT)
|
43
43
|
end
|
44
44
|
|
45
45
|
it "should include :too_long for numbers longer than 8 digits" do
|
46
|
-
BankTools::SE::Bankgiro.new("5402-96810").errors.should include(
|
46
|
+
BankTools::SE::Bankgiro.new("5402-96810").errors.should include(BankTools::SE::Errors::TOO_LONG)
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should include :invalid_characters for numbers with other character than digits, spaces and dashes" do
|
50
|
-
BankTools::SE::Bankgiro.new("5402-9681X").errors.should include(
|
51
|
-
BankTools::SE::Bankgiro.new(" 5 4 0 2 - 9 6 8 1 ").errors.should_not include(
|
50
|
+
BankTools::SE::Bankgiro.new("5402-9681X").errors.should include(BankTools::SE::Errors::INVALID_CHARACTERS)
|
51
|
+
BankTools::SE::Bankgiro.new(" 5 4 0 2 - 9 6 8 1 ").errors.should_not include(BankTools::SE::Errors::INVALID_CHARACTERS)
|
52
52
|
end
|
53
53
|
|
54
54
|
it "should include :bad_checksum if the Luhn/mod 10 checksum is incorrect" do
|
55
|
-
BankTools::SE::Bankgiro.new("5402-9682").errors.should include(
|
55
|
+
BankTools::SE::Bankgiro.new("5402-9682").errors.should include(BankTools::SE::Errors::BAD_CHECKSUM)
|
56
56
|
end
|
57
57
|
|
58
58
|
end
|
data/spec/plusgiro_spec.rb
CHANGED
@@ -35,23 +35,23 @@ describe BankTools::SE::Plusgiro do
|
|
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(
|
39
|
-
BankTools::SE::Plusgiro.new("").errors.should include(
|
40
|
-
BankTools::SE::Plusgiro.new("1").errors.should include(
|
41
|
-
BankTools::SE::Plusgiro.new("1---------").errors.should include(
|
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)
|
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(
|
45
|
+
BankTools::SE::Plusgiro.new("410 54 68-51").errors.should 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(
|
50
|
-
BankTools::SE::Plusgiro.new("4 1 0 5 4 6 8 - 5 ").errors.should_not include(
|
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)
|
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(
|
54
|
+
BankTools::SE::Plusgiro.new("410 54 68-6").errors.should include(BankTools::SE::Errors::BAD_CHECKSUM)
|
55
55
|
end
|
56
56
|
|
57
57
|
end
|
metadata
CHANGED
@@ -1,75 +1,56 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: banktools-se
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 1
|
10
|
-
version: 0.0.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Henrik Nyh
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-05-10 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: rspec
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70242598104220 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
33
22
|
type: :development
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: guard
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: *70242598104220
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: guard
|
27
|
+
requirement: &70242598103800 !ruby/object:Gem::Requirement
|
39
28
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
segments:
|
45
|
-
- 0
|
46
|
-
version: "0"
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
47
33
|
type: :development
|
48
|
-
version_requirements: *id002
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: guard-rspec
|
51
34
|
prerelease: false
|
52
|
-
|
35
|
+
version_requirements: *70242598103800
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: guard-rspec
|
38
|
+
requirement: &70242598103380 !ruby/object:Gem::Requirement
|
53
39
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
|
58
|
-
segments:
|
59
|
-
- 0
|
60
|
-
version: "0"
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
61
44
|
type: :development
|
62
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70242598103380
|
63
47
|
description:
|
64
|
-
email:
|
48
|
+
email:
|
65
49
|
- henrik@barsoom.se
|
66
50
|
executables: []
|
67
|
-
|
68
51
|
extensions: []
|
69
|
-
|
70
52
|
extra_rdoc_files: []
|
71
|
-
|
72
|
-
files:
|
53
|
+
files:
|
73
54
|
- .gitignore
|
74
55
|
- Gemfile
|
75
56
|
- Guardfile
|
@@ -79,6 +60,7 @@ files:
|
|
79
60
|
- lib/banktools-se.rb
|
80
61
|
- lib/banktools-se/account.rb
|
81
62
|
- lib/banktools-se/bankgiro.rb
|
63
|
+
- lib/banktools-se/errors.rb
|
82
64
|
- lib/banktools-se/plusgiro.rb
|
83
65
|
- lib/banktools-se/utils.rb
|
84
66
|
- lib/banktools-se/version.rb
|
@@ -87,41 +69,31 @@ files:
|
|
87
69
|
- spec/plusgiro_spec.rb
|
88
70
|
- spec/spec_helper.rb
|
89
71
|
- spec/utils_spec.rb
|
90
|
-
|
91
|
-
homepage: ""
|
72
|
+
homepage: ''
|
92
73
|
licenses: []
|
93
|
-
|
94
74
|
post_install_message:
|
95
75
|
rdoc_options: []
|
96
|
-
|
97
|
-
require_paths:
|
76
|
+
require_paths:
|
98
77
|
- lib
|
99
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
79
|
none: false
|
101
|
-
requirements:
|
102
|
-
- -
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
|
105
|
-
|
106
|
-
- 0
|
107
|
-
version: "0"
|
108
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
85
|
none: false
|
110
|
-
requirements:
|
111
|
-
- -
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
|
114
|
-
segments:
|
115
|
-
- 0
|
116
|
-
version: "0"
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
117
90
|
requirements: []
|
118
|
-
|
119
91
|
rubyforge_project: banktools-se
|
120
|
-
rubygems_version: 1.5
|
92
|
+
rubygems_version: 1.8.5
|
121
93
|
signing_key:
|
122
94
|
specification_version: 3
|
123
95
|
summary: Validate and normalize Swedish bank account numbers, plusgiro and bankgiro.
|
124
|
-
test_files:
|
96
|
+
test_files:
|
125
97
|
- spec/account_spec.rb
|
126
98
|
- spec/bankgiro_spec.rb
|
127
99
|
- spec/plusgiro_spec.rb
|