blz 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Binary file
data/lib/blz.rb ADDED
@@ -0,0 +1,10 @@
1
+ # Copyright (C) 2012 Oliver Eilhard
2
+ #
3
+ # This library is freely distributable under the terms of
4
+ # an MIT-style license.
5
+ # See COPYING or http://www.opensource.org/licenses/mit-license.php.
6
+ #
7
+ # Provides information about "Bankleitzahlen" (BLZ),
8
+ # a bank identifier code system used by German and Austrian banks.
9
+
10
+ require 'blz/bank'
data/lib/blz/bank.rb ADDED
@@ -0,0 +1,85 @@
1
+ # encoding: utf-8
2
+
3
+ module BLZ
4
+ # Represents a bank with a BLZ, a BIC, a name etc.
5
+ class Bank
6
+ # BLZ = a bank idenfier code widely used in DE and AT
7
+ attr_reader :blz
8
+ # Name of the bank
9
+ attr_reader :name
10
+ # Postal code
11
+ attr_reader :zip
12
+ # City
13
+ attr_reader :city
14
+ # Short name = short description of the bank
15
+ attr_reader :short_name
16
+ # BIC = bank identifier code (ISO 9362)
17
+ attr_reader :bic
18
+
19
+ # Initializes a single Bank record.
20
+ def initialize(blz, name, zip, city, short_name, bic)
21
+ @blz = blz
22
+ @name = name
23
+ @zip = zip
24
+ @city = city
25
+ @short_name = short_name
26
+ @bic = bic
27
+ end
28
+
29
+ # Returns an array of all Banks specified by +code+.
30
+ # The following options apply:
31
+ #
32
+ # exact:: Only return exact matches (false by default)
33
+ #
34
+ def self.find_by_blz(code, options = nil)
35
+ options ||= {}
36
+ exact = options.fetch(:exact, false)
37
+
38
+ self.all.inject([]) do |results, bank|
39
+ if bank.blz == code || (!exact && bank.blz.start_with?(code))
40
+ results << bank
41
+ end
42
+ results
43
+ end
44
+ end
45
+
46
+ # Returns an array of all Banks with a substring of +city+.
47
+ def self.find_by_city(substring)
48
+ self.all.inject([]) do |results, bank|
49
+ results << bank if bank.city.index(substring)
50
+ results
51
+ end
52
+ end
53
+
54
+ # Returns an array of all banks.
55
+ def self.all
56
+ # TODO is this the right way to do it?
57
+ Thread.current[:'BLZ::Bank.all'] ||= read_banks
58
+ end
59
+
60
+ # Returns a nice representation of the bank.
61
+ def to_s
62
+ [blz, name, "#{zip} #{city}", bic].reject { |s| s.empty? }.join ", "
63
+ end
64
+
65
+ private
66
+
67
+ def self.read_banks
68
+ banks = []
69
+ filename = File.join(File.dirname(__FILE__), '..', '..', 'data', 'blz.tsv')
70
+ File.foreach(filename) do |line|
71
+ columns = line.split /\t/
72
+ blz = columns[0].strip
73
+ name = columns[2].strip
74
+ zip = columns[3].strip
75
+ city = columns[4].strip
76
+ short_name = columns[5].strip
77
+ bic = columns[7].strip
78
+ banks << Bank.new(blz, name, zip, city, short_name, bic)
79
+ end
80
+ banks
81
+ end
82
+
83
+ end
84
+ end
85
+
data/test/test_bank.rb ADDED
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ require 'blz'
4
+ require 'test/unit'
5
+
6
+ class TestBank < Test::Unit::TestCase
7
+
8
+ def test_all_banks
9
+ assert !BLZ::Bank.all.nil?
10
+ assert sskm = BLZ::Bank.all.find { |b| b.blz == "70150000" }
11
+ assert_equal "Stadtsparkasse München", sskm.name
12
+ end
13
+
14
+ def test_search_by_exact_match
15
+ assert results = BLZ::Bank.find_by_blz("70150000", :exact => true)
16
+ assert_equal 1, results.size
17
+ assert_equal "70150000", results[0].blz
18
+ assert_equal "Stadtsparkasse München", results[0].name
19
+ assert_equal "St Spk München", results[0].short_name
20
+ assert_equal "80791", results[0].zip
21
+ assert_equal "München", results[0].city
22
+ assert_equal "SSKMDEMMXXX", results[0].bic
23
+ end
24
+
25
+ def test_search_by_prefix
26
+ assert results = BLZ::Bank.find_by_blz("7106")
27
+ assert results.size > 1
28
+ #assert_equal "Stadtsparkasse München", results[0].bezeichnung
29
+ end
30
+
31
+ def test_search_by_city
32
+ assert results = BLZ::Bank.find_by_city("München")
33
+ assert results.size > 1
34
+ assert results.find { |b| b.blz == "70150000" }
35
+ end
36
+
37
+ def test_to_s
38
+ assert results = BLZ::Bank.find_by_blz("70150000", :exact_only => true)
39
+ assert_equal 1, results.size
40
+ assert_equal "70150000, Stadtsparkasse München, 80791 München, SSKMDEMMXXX", results[0].to_s
41
+ end
42
+
43
+ end
44
+
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: blz
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Oliver Eilhard
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.2'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.2'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rdoc
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '2.5'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '2.5'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0.9'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0.9'
62
+ description: ! 'BLZ (Bankleitzahlen) is a small library for looking up
63
+
64
+ the widely used bank identifier code system in Germany
65
+
66
+ and Austria.
67
+
68
+
69
+ http://github.com/olivere/blz
70
+
71
+ '
72
+ email: oliver.eilhard@gmail.com
73
+ executables:
74
+ - blz
75
+ extensions: []
76
+ extra_rdoc_files:
77
+ - CHANGELOG.md
78
+ - LICENSE
79
+ - README.md
80
+ files:
81
+ - CHANGELOG.md
82
+ - Gemfile
83
+ - LICENSE
84
+ - README.md
85
+ - Rakefile
86
+ - bin/blz
87
+ - blz.gemspec
88
+ - data/blz.tsv
89
+ - data/blz_2012_06_04_xls.xlsx
90
+ - lib/blz.rb
91
+ - lib/blz/bank.rb
92
+ - test/test_bank.rb
93
+ homepage: http://github.com/olivere/blz
94
+ licenses: []
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ! '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 1.8.23
114
+ signing_key:
115
+ specification_version: 3
116
+ summary: BLZ (Bankleitzahlen) for Ruby
117
+ test_files: []