banking_data 0.3.0 → 0.4.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/lib/banking_data.rb +1 -0
- data/lib/banking_data/austrian_bank.rb +36 -22
- data/lib/banking_data/bank.rb +11 -27
- data/lib/banking_data/german_bank.rb +25 -14
- data/lib/banking_data/query.rb +42 -0
- data/lib/banking_data/swiss_bank.rb +26 -16
- data/lib/banking_data/version.rb +1 -1
- data/spec/banking_data/german_bank_spec.rb +5 -1
- metadata +3 -2
data/lib/banking_data.rb
CHANGED
@@ -2,33 +2,47 @@ require 'active_support/core_ext/object/blank'
|
|
2
2
|
require 'active_support/core_ext/object/try'
|
3
3
|
|
4
4
|
class BankingData::AustrianBank < BankingData::Bank
|
5
|
-
|
5
|
+
extend ActiveModel::Naming
|
6
|
+
include ActiveModel::Conversion
|
7
|
+
include ActiveModel::AttributeMethods
|
6
8
|
|
7
|
-
|
9
|
+
LOCALE = :at
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
11
|
+
attr_accessor :bic, :blz
|
12
|
+
|
13
|
+
class << self
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
banks << new(bic: bic)
|
15
|
+
delegate :where, :only, to: :query
|
16
|
+
|
17
|
+
def all
|
18
|
+
@@all ||= get_all
|
18
19
|
end
|
19
|
-
banks
|
20
|
-
end
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
def get_all
|
22
|
+
banks = []
|
23
|
+
SmarterCSV.process(file, opts).each do |line|
|
24
|
+
if line[:kennzeichen] == 'Hauptanstalt'
|
25
|
+
blz = line[:bankleitzahl].try(:gsub, /"/, '')
|
26
|
+
bic = line[:'swift-code'].try(:gsub, /"/, '')
|
27
|
+
banks << new(bic: bic, blz: blz)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
banks
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def file
|
36
|
+
File.dirname(__FILE__) +
|
37
|
+
'/../../data/kiverzeichnis_gesamt_de_1381499802577.csv'
|
38
|
+
end
|
26
39
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
40
|
+
def opts
|
41
|
+
{
|
42
|
+
col_sep: ';',
|
43
|
+
file_encoding: 'iso-8859-1',
|
44
|
+
force_simple_split: true
|
45
|
+
}
|
46
|
+
end
|
33
47
|
end
|
34
48
|
end
|
data/lib/banking_data/bank.rb
CHANGED
@@ -1,37 +1,21 @@
|
|
1
1
|
module BankingData
|
2
2
|
class Bank
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
# BankingData::Bank.where(locale: :de).only(:bic)
|
8
|
-
def self.where(options = {})
|
9
|
-
locale = options.delete(:locale)
|
10
|
-
if locale == 'DE' || locale == :de
|
11
|
-
GermanBank.where(options)
|
12
|
-
elsif locale == 'AT' || locale == :at
|
13
|
-
AustrianBank.where(options)
|
14
|
-
elsif locale == 'CH' || locale == :ch
|
15
|
-
SwissBank.where(options)
|
16
|
-
elsif options.empty?
|
17
|
-
self
|
18
|
-
else
|
19
|
-
@@options = @@options.merge(options)
|
20
|
-
self
|
4
|
+
def initialize(attributes = {})
|
5
|
+
attributes.each do |name, value|
|
6
|
+
send("#{name}=", value)
|
21
7
|
end
|
22
8
|
end
|
23
9
|
|
24
|
-
|
25
|
-
options = @@options
|
26
|
-
@@options = {}
|
27
|
-
all.select { |bank| options.map { |k, v| bank.send(k) == v }.all? }
|
28
|
-
.map { |bank| attributes.map { |attr| bank.send(attr) } }
|
29
|
-
end
|
10
|
+
class << self
|
30
11
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
12
|
+
def where(options)
|
13
|
+
Query.new(options)
|
14
|
+
end
|
15
|
+
|
16
|
+
def query
|
17
|
+
Query.new(locale: self::LOCALE)
|
18
|
+
end
|
35
19
|
end
|
36
20
|
end
|
37
21
|
end
|
@@ -1,25 +1,36 @@
|
|
1
1
|
require 'active_support/core_ext/object/blank'
|
2
2
|
|
3
3
|
class BankingData::GermanBank < BankingData::Bank
|
4
|
-
|
4
|
+
extend ActiveModel::Naming
|
5
|
+
include ActiveModel::Conversion
|
6
|
+
include ActiveModel::AttributeMethods
|
7
|
+
|
8
|
+
LOCALE = :de
|
5
9
|
|
6
10
|
attr_accessor :bic, :blz
|
7
11
|
|
8
|
-
|
9
|
-
|
10
|
-
|
12
|
+
class << self
|
13
|
+
|
14
|
+
delegate :where, :only, to: :query
|
11
15
|
|
12
|
-
|
13
|
-
|
14
|
-
File.open(file).each_line do |line|
|
15
|
-
blz = line[0..7]
|
16
|
-
bic = line[139..149]
|
17
|
-
banks << new(bic: bic, blz: blz)
|
16
|
+
def all
|
17
|
+
@@all ||= get_all
|
18
18
|
end
|
19
|
-
banks
|
20
|
-
end
|
21
19
|
|
22
|
-
|
23
|
-
|
20
|
+
private
|
21
|
+
|
22
|
+
def get_all
|
23
|
+
banks = []
|
24
|
+
File.open(file).each_line do |line|
|
25
|
+
blz = line[0..7]
|
26
|
+
bic = line[139..149]
|
27
|
+
banks << new(bic: bic, blz: blz)
|
28
|
+
end
|
29
|
+
banks
|
30
|
+
end
|
31
|
+
|
32
|
+
def file
|
33
|
+
File.dirname(__FILE__) + '/../../data/BLZ_20130909.txt'
|
34
|
+
end
|
24
35
|
end
|
25
36
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'active_support/core_ext/class/subclasses'
|
2
|
+
|
3
|
+
module BankingData
|
4
|
+
class Query
|
5
|
+
|
6
|
+
delegate :each, :flatten, :map, :first, :last, to: :to_a
|
7
|
+
attr_accessor :options, :attributes, :locale
|
8
|
+
|
9
|
+
def initialize(options, only = nil)
|
10
|
+
@locale = options.delete(:locale)
|
11
|
+
@options = options
|
12
|
+
@attributes = only
|
13
|
+
end
|
14
|
+
|
15
|
+
def where(opts = {})
|
16
|
+
clone.tap do |query|
|
17
|
+
query.locale = opts.delete(:locale)
|
18
|
+
query.options = @options.merge(opts)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def only(*attrs)
|
23
|
+
clone.tap do |query|
|
24
|
+
query.attributes = attrs
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_a
|
29
|
+
data = bank.all
|
30
|
+
.select { |bank| @options.map { |k, v| bank.send(k) == v }.all? }
|
31
|
+
if @attributes
|
32
|
+
data.map { |bank| @attributes.map { |attr| bank.send(attr) } }
|
33
|
+
else
|
34
|
+
data
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def bank
|
39
|
+
Bank.subclasses.find { |bank_class| bank_class::LOCALE == locale }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -1,27 +1,37 @@
|
|
1
1
|
require 'active_support/core_ext/object/blank'
|
2
2
|
|
3
3
|
class BankingData::SwissBank < BankingData::Bank
|
4
|
-
|
4
|
+
extend ActiveModel::Naming
|
5
|
+
include ActiveModel::Conversion
|
6
|
+
include ActiveModel::AttributeMethods
|
5
7
|
|
6
|
-
|
8
|
+
LOCALE = :ch
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
10
|
+
attr_accessor :bic, :blz
|
11
|
+
|
12
|
+
class << self
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
delegate :where, :only, to: :query
|
15
|
+
|
16
|
+
def all
|
17
|
+
@@all ||= get_all
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_all
|
21
|
+
banks = []
|
22
|
+
File.read(file, encoding: 'iso-8859-1').lines.each do |line|
|
23
|
+
kennzeichen = line[7..10]
|
24
|
+
if kennzeichen == '0000'
|
25
|
+
blz = line[2..6].strip
|
26
|
+
bic = line[284..294]
|
27
|
+
banks << new(bic: bic, blz: blz)
|
28
|
+
end
|
19
29
|
end
|
30
|
+
banks
|
20
31
|
end
|
21
|
-
banks
|
22
|
-
end
|
23
32
|
|
24
|
-
|
25
|
-
|
33
|
+
def file
|
34
|
+
File.dirname(__FILE__) + '/../../data/bcbankenstamm.txt'
|
35
|
+
end
|
26
36
|
end
|
27
37
|
end
|
data/lib/banking_data/version.rb
CHANGED
@@ -13,7 +13,11 @@ module BankingData
|
|
13
13
|
['76350000', '37040044'].each do |blz|
|
14
14
|
it "includes #{blz}" do
|
15
15
|
expect(GermanBank.only(:blz).map(&:first)).to include(blz)
|
16
|
-
expect(
|
16
|
+
expect(GermanBank.only(:blz).flatten).to include(blz)
|
17
|
+
expect(Bank.where(locale: :de, blz: blz).only(:blz).first)
|
18
|
+
.to eq([blz])
|
19
|
+
expect(Bank.where(blz: blz, locale: :de).only(:blz).last)
|
20
|
+
.to eq([blz])
|
17
21
|
end
|
18
22
|
end
|
19
23
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: banking_data
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-10-
|
12
|
+
date: 2013-10-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -162,6 +162,7 @@ files:
|
|
162
162
|
- lib/banking_data/austrian_bank.rb
|
163
163
|
- lib/banking_data/bank.rb
|
164
164
|
- lib/banking_data/german_bank.rb
|
165
|
+
- lib/banking_data/query.rb
|
165
166
|
- lib/banking_data/swiss_bank.rb
|
166
167
|
- lib/banking_data/version.rb
|
167
168
|
- rubocop-todo.yml
|