sepa_clearer 0.0.2 → 0.1.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
  SHA1:
3
- metadata.gz: 5ab7c92f7cf252703f2f0ab62a13f89d317a2801
4
- data.tar.gz: 0b7158c517ba56c29c28a8a801b44a0adba5198e
3
+ metadata.gz: cbd32af62350c9dfef2b8ff7cd7a694d1619716b
4
+ data.tar.gz: 5e93b7e97b94e34c3c45e7ae66b250e860676f29
5
5
  SHA512:
6
- metadata.gz: 33a42b42f3cb089a71e71cc594c9fe52ca135e0225454233d9594bbbceee3cbb80d95a8945b7b24e07dac4a90f0e7e313fa44dd955c90da774460aaf1b1c11ee
7
- data.tar.gz: 1f07d8f9ed72c4f41a07efb28c275ad5e1c690245248b39f5a2287dbefdb7b807fced7225ca5f6419d6af1b921853a720bcbdb29aef943a2ee697c2b6f2abea1
6
+ metadata.gz: bd98140704cdd382443eaec4db7c95003b1ed393a12a137eff2eae2ea377be2fbe05de044af4b50da20750da36a75969b6e1b4bd22342849202490ff719a0fd4
7
+ data.tar.gz: 0dc263db105322307eeac665494ad5ebab9ca8a20b8e3fd105122f626d63833eefcc77e9c1102e292cce4caffcc5fcdc7c96d517e69714973ef6c202a4a82b3e
data/CHANGELOG.md CHANGED
@@ -1,6 +1,13 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ v0.1.0
5
+ ------
6
+
7
+ * Replace in-memory datastore with sqlite3 based one. The class api should be
8
+ the same.
9
+
10
+
4
11
  v0.0.2
5
12
  ------
6
13
 
data/README.md CHANGED
@@ -5,15 +5,16 @@ system. The gem currently supports only "Deutsche Bundesbank" as a clearer. You
5
5
  can fetch all providers and their capabilities or fetch only a unique provider
6
6
  by his BIC.
7
7
 
8
- Currently the gem fetches all data into memory which can be quite heavy. You
9
- might want to store it in your local database for quick and easy access.
8
+ The gem comes with a sqlite3 database which contains all data. In order to access
9
+ it, you need to have sqlite3 installed.
10
10
 
11
+ __Last data update: 2014-07-07__
11
12
 
12
13
  ## Installation
13
14
 
14
15
  Add this line to your application's Gemfile:
15
16
 
16
- gem 'sepa-clearer'
17
+ gem 'sepa_clearer'
17
18
 
18
19
  And then execute:
19
20
 
@@ -21,21 +22,26 @@ And then execute:
21
22
 
22
23
  Or install it yourself as:
23
24
 
24
- $ gem install sepa-clearer
25
+ $ gem install sepa_clearer
25
26
 
26
27
 
27
28
  ## Usage
29
+ require 'sepa_clearer'
28
30
 
29
31
  # Create a new cleaer instance
30
- clearer = SepaClearer::Clearer.new('DeutscheBundesbank')
32
+ clearer = SepaClearer::Clearer.new
31
33
 
32
34
  # Fetch all payment providers
33
35
  clearer.all
34
36
  # => [<PaymentProvider: …>, <PaymentProvider: …>]
35
37
 
36
38
  # Fetch a single provider by his identifier code. The BIC is normalized (uppercase and 11 letters filled with X)
37
- clearer.find_by_bic('DEIRGENDWAS')
38
- # => <PaymentProvider: @bic="DEIRGENDWAS", @name="Your Provider", @supports=[:core, :cor1]>
39
+ provider = clearer.find_by_bic('DEIRGENDWAS')
40
+ # => <PaymentProvider: @bic="DEIRGENDWAS", @name="YOUR PROVIDER", @sct=false, @core=true, @cor1=true, @b2b=false>
41
+
42
+ # Get all capabilities
43
+ provider.capabilities
44
+ # => [:core, :cor1]
39
45
 
40
46
 
41
47
  ## Update clearer list
Binary file
@@ -1,20 +1,62 @@
1
+ require 'sqlite3'
2
+
1
3
  module SepaClearer
2
4
  class Clearer
3
- def initialize(clearer = 'DeutscheBundesbank')
4
- @klass = SepaClearer.const_get(clearer).new
5
+ attr_accessor :db
6
+
7
+ # Make sure we always have the correct order of columns
8
+ ATTRIBUTES = [:name, :bic, :sct, :core, :cor1, :b2b]
9
+
10
+ def initialize(db_name = 'deutsche_bundesbank')
11
+ self.db = SQLite3::Database.new File.join(File.dirname(__FILE__), '../..', "data/#{db_name}.db")
12
+ end
13
+
14
+ def add(provider)
15
+ data = boolean_to_integers(provider.to_a)
16
+ db.execute "INSERT INTO payment_providers (#{ATTRIBUTES.join(',')}) VALUES (?, ?, ?, ?, ?, ?)", data
5
17
  end
6
18
 
7
19
  def all
8
- @klass.data
20
+ db.execute("SELECT #{ATTRIBUTES.join(',')} FROM payment_providers ORDER BY name").map do |row|
21
+ PaymentProvider.new(hash_from_result(row))
22
+ end
9
23
  end
10
24
 
11
25
  def find_by_bic(bic)
12
- normalized_bic = normalize_bic(bic)
13
- @klass.data.find { |provider| provider.bic == normalized_bic }
26
+ db.execute("SELECT #{ATTRIBUTES.join(',')} FROM payment_providers WHERE bic = ?", normalize_bic(bic)).map do |row|
27
+ PaymentProvider.new(hash_from_result(row))
28
+ end.first
14
29
  end
15
30
 
16
31
  def normalize_bic(bic)
17
32
  bic.to_s.ljust(11, 'X').upcase
18
33
  end
34
+
35
+ protected
36
+
37
+ def hash_from_result(raw_array)
38
+ raw_array_with_boolean = integers_to_boolean(raw_array)
39
+ Hash[ATTRIBUTES.zip(raw_array_with_boolean)]
40
+ end
41
+
42
+ def boolean_to_integers(array)
43
+ array.map do |element|
44
+ if element.kind_of?(TrueClass) || element.kind_of?(FalseClass)
45
+ element ? 1 : 0
46
+ else
47
+ element
48
+ end
49
+ end
50
+ end
51
+
52
+ def integers_to_boolean(array)
53
+ array.map do |element|
54
+ if element.kind_of?(Integer)
55
+ element == 1
56
+ else
57
+ element
58
+ end
59
+ end
60
+ end
19
61
  end
20
62
  end
@@ -2,12 +2,12 @@ require 'csv'
2
2
 
3
3
  module SepaClearer
4
4
  class DeutscheBundesbank
5
- CAPABILITIES_MAPPING = {
6
- service_sct: :sct,
7
- service_sdd: :core,
8
- service_cor1: :cor1,
9
- service_b2b: :b2b
10
- }
5
+ MAPPING = {
6
+ service_sct: :sct,
7
+ service_sdd: :core,
8
+ service_cor1: :cor1,
9
+ service_b2b: :b2b
10
+ }
11
11
 
12
12
  def data(file = nil)
13
13
  @data ||= begin
@@ -20,11 +20,10 @@ module SepaClearer
20
20
  end
21
21
 
22
22
  def parse_raw_data(data)
23
- [
24
- data[:name].strip.chomp,
25
- data[:bic],
26
- CAPABILITIES_MAPPING.map { |key, service| data[key] == '1' ? service : nil }.compact
27
- ]
23
+ MAPPING.reduce({}) { |hsh,(key, service)| hsh[service] = (data[key] == '1'); hsh }.merge({
24
+ name: data[:name].strip.chomp,
25
+ bic: data[:bic].strip.chomp,
26
+ })
28
27
  end
29
28
 
30
29
  def default_data_file
@@ -2,12 +2,30 @@ module SepaClearer
2
2
  class PaymentProvider
3
3
  SERVICES = [:sct, :core, :cor1, :b2b]
4
4
 
5
- attr_accessor :name, :bic, :capabilities
5
+ attr_accessor :name, :bic, :sct, :core, :cor1, :b2b
6
6
 
7
- def initialize(name, bic, capabilities)
8
- self.name = name
9
- self.bic = bic
10
- self.capabilities = capabilities
7
+ def initialize(options = {})
8
+ self.name = options[:name]
9
+ self.bic = options[:bic]
10
+ self.sct = options[:sct] || false
11
+ self.core = options[:core] || false
12
+ self.cor1 = options[:cor1] || false
13
+ self.b2b = options[:b2b] || false
14
+ end
15
+
16
+ def capabilities
17
+ SERVICES.map { |s| [s, send(s)] }.select { |_,v| v }.map { |k,v| k }
18
+ end
19
+
20
+ def to_hash
21
+ {
22
+ name: name,
23
+ bic: bic,
24
+ sct: sct,
25
+ core: core,
26
+ cor1: cor1,
27
+ b2b: b2b,
28
+ }
11
29
  end
12
30
  end
13
31
  end
@@ -1,3 +1,3 @@
1
1
  module SepaClearer
2
- VERSION = '0.0.2'
2
+ VERSION = '0.1.0'
3
3
  end
data/sepa-clearer.gemspec CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_dependency "sqlite3"
21
22
  spec.add_development_dependency "bundler", "~> 1.6"
22
23
  spec.add_development_dependency "rake", "~> 0"
23
24
  spec.add_development_dependency "rspec", "~> 3"
data/spec/clearer_spec.rb CHANGED
@@ -16,11 +16,15 @@ describe SepaClearer::Clearer do
16
16
  expect(subject.find_by_bic('MYTHINGY')).to eq(nil)
17
17
  end
18
18
 
19
- it 'normalizes thebic before searching' do
19
+ it 'normalizes the bic before searching' do
20
20
  allow(subject).to receive(:normalize_bic).and_return('AAA')
21
21
  expect(subject.find_by_bic('MYTHINGY')).to eq(nil)
22
22
  expect(subject).to have_received(:normalize_bic)
23
23
  end
24
+
25
+ it 'returns an initialize object' do
26
+ expect(subject.find_by_bic('AABAFI22TMS').name).to eq('BANK OF ALAND PLC')
27
+ end
24
28
  end
25
29
 
26
30
  describe '#normalize_bic' do
@@ -3,20 +3,24 @@ require 'spec_helper'
3
3
  describe SepaClearer::DeutscheBundesbank do
4
4
  describe '#parse_raw_data' do
5
5
  let(:data) { { name: "My Org \n", bic: 'QWERTZ12345', service_sct: '1' } }
6
- it 'returns an array' do
7
- expect(subject.parse_raw_data(data)).to eq(['My Org', 'QWERTZ12345', [:sct]])
6
+
7
+ it 'returns a hash' do
8
+ expect(subject.parse_raw_data(data)).to be_kind_of(Hash)
8
9
  end
9
10
 
10
11
  it 'cleans up the name' do
11
- expect(subject.parse_raw_data(data)[0]).to eq('My Org')
12
+ expect(subject.parse_raw_data(data)[:name]).to eq('My Org')
12
13
  end
13
14
 
14
15
  it 'returns the BIC' do
15
- expect(subject.parse_raw_data(data)[1]).to eq('QWERTZ12345')
16
+ expect(subject.parse_raw_data(data)[:bic]).to eq('QWERTZ12345')
16
17
  end
17
18
 
18
19
  it 'maps the capabilities' do
19
- expect(subject.parse_raw_data(data)[2]).to eq([:sct])
20
+ expect(subject.parse_raw_data(data)[:sct]).to eq(true)
21
+ expect(subject.parse_raw_data(data)[:core]).to eq(false)
22
+ expect(subject.parse_raw_data(data)[:cor1]).to eq(false)
23
+ expect(subject.parse_raw_data(data)[:b2b]).to eq(false)
20
24
  end
21
25
  end
22
26
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe SepaClearer::PaymentProvider do
4
4
  describe '.new' do
5
- subject(:provider) { described_class.new('Testorg', 'SOMEVALIDID', [:core]) }
5
+ subject(:provider) { described_class.new(name: 'Testorg', bic: 'SOMEVALIDID') }
6
6
 
7
7
  it 'sets the proper name' do
8
8
  expect(provider.name).to eq('Testorg')
@@ -12,8 +12,35 @@ describe SepaClearer::PaymentProvider do
12
12
  expect(provider.bic).to eq('SOMEVALIDID')
13
13
  end
14
14
 
15
- it 'sets the proper capabilities' do
16
- expect(provider.capabilities).to eq([:core])
15
+ it 'does not set any capabilities' do
16
+ expect(provider.capabilities).to eq([])
17
+ end
18
+ end
19
+
20
+ describe '#capabilities' do
21
+ subject(:provider) { described_class.new(sct: true, core: false, cor1: true, b2b: true) }
22
+
23
+ it 'returns all capabilities' do
24
+ expect(provider.capabilities).to eq([:sct, :cor1, :b2b])
25
+ end
26
+ end
27
+
28
+ describe '#to_hash' do
29
+ subject(:provider) { described_class.new(name: 'test', bic: 'bic', sct: true, core: false, cor1: true, b2b: true) }
30
+
31
+ it 'returns a hash' do
32
+ expect(provider.to_hash).to be_kind_of(Hash)
33
+ end
34
+
35
+ it 'sets correct values' do
36
+ expect(provider.to_hash).to match({
37
+ name: 'test',
38
+ bic: 'bic',
39
+ sct: true,
40
+ core: false,
41
+ cor1: true,
42
+ b2b: true
43
+ })
17
44
  end
18
45
  end
19
46
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sepa_clearer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maximilian Schulz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-17 00:00:00.000000000 Z
11
+ date: 2014-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sqlite3
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -69,6 +83,7 @@ files:
69
83
  - Rakefile
70
84
  - bin/update_data
71
85
  - data/deutsche_bundesbank.csv
86
+ - data/deutsche_bundesbank.db
72
87
  - lib/sepa_clearer.rb
73
88
  - lib/sepa_clearer/clearer.rb
74
89
  - lib/sepa_clearer/deutsche_bundesbank.rb