sepa_clearer 0.0.1
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 +7 -0
- data/.gitignore +22 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +56 -0
- data/Rakefile +2 -0
- data/bin/update_data +12 -0
- data/data/deutsche_bundesbank.csv +48021 -0
- data/lib/sepa_clearer/clearer.rb +20 -0
- data/lib/sepa_clearer/deutsche_bundesbank.rb +30 -0
- data/lib/sepa_clearer/payment_provider.rb +13 -0
- data/lib/sepa_clearer/version.rb +3 -0
- data/lib/sepa_clearer.rb +7 -0
- data/sepa-clearer.gemspec +24 -0
- data/spec/clearer_spec.rb +39 -0
- data/spec/deutsche_bundesbank_spec.rb +22 -0
- data/spec/payment_provider_spec.rb +19 -0
- data/spec/spec_helper.rb +25 -0
- metadata +110 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
module SepaClearer
|
2
|
+
class Clearer
|
3
|
+
def initialize(clearer = 'DeutscheBundesbank')
|
4
|
+
@klass = SepaClearer.const_get(clearer).new
|
5
|
+
end
|
6
|
+
|
7
|
+
def all
|
8
|
+
@klass.data
|
9
|
+
end
|
10
|
+
|
11
|
+
def find_by_bic(bic)
|
12
|
+
normalized_bic = normalize_bic(bic)
|
13
|
+
@klass.data.find { |provider| provider.bic == normalized_bic }
|
14
|
+
end
|
15
|
+
|
16
|
+
def normalize_bic(bic)
|
17
|
+
bic.to_s.ljust(11, 'X').upcase
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
3
|
+
module SepaClearer
|
4
|
+
class DeutscheBundesbank
|
5
|
+
CAPABILITIES_MAPPING = {
|
6
|
+
service_sct: :sct,
|
7
|
+
service_sdd: :core,
|
8
|
+
service_cor1: :cor1,
|
9
|
+
service_b2b: :b2b
|
10
|
+
}
|
11
|
+
|
12
|
+
def data(file = 'data/deutsche_bundesbank.csv')
|
13
|
+
@data ||= begin
|
14
|
+
[].tap do |data|
|
15
|
+
CSV.foreach(file, { headers: true, col_sep: ';', header_converters: :symbol }) do |row|
|
16
|
+
data.push PaymentProvider.new(*parse_raw_data(row))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
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
|
+
]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module SepaClearer
|
2
|
+
class PaymentProvider
|
3
|
+
SERVICES = [:sct, :core, :cor1, :b2b]
|
4
|
+
|
5
|
+
attr_accessor :name, :bic, :capabilities
|
6
|
+
|
7
|
+
def initialize(name, bic, capabilities)
|
8
|
+
self.name = name
|
9
|
+
self.bic = bic
|
10
|
+
self.capabilities = capabilities
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/sepa_clearer.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'sepa_clearer/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "sepa_clearer"
|
8
|
+
spec.version = SepaClearer::VERSION
|
9
|
+
spec.authors = ["Maximilian Schulz"]
|
10
|
+
spec.email = ["m.schulz@kulturfluss.de"]
|
11
|
+
spec.summary = %q{List of all available SEPA clearers and their supported features}
|
12
|
+
spec.description = %q{This gem maintains a list of all RPS SEPA clearers available via the Deutsche Bundesbank.}
|
13
|
+
spec.homepage = "http://opensource.railslove.com/sepa-clearer"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
22
|
+
spec.add_development_dependency "rake", "~> 0"
|
23
|
+
spec.add_development_dependency "rspec", "~> 3"
|
24
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SepaClearer::Clearer do
|
4
|
+
describe '#all' do
|
5
|
+
it 'returns an array of payment providers' do
|
6
|
+
expect(subject.all.first).to be_kind_of(SepaClearer::PaymentProvider)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#find_by_bic' do
|
11
|
+
it 'returns the provider with the given BIC' do
|
12
|
+
expect(subject.find_by_bic('AABAFI22TMS')).to be_kind_of(SepaClearer::PaymentProvider)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'returns nil if no object matches the BIC' do
|
16
|
+
expect(subject.find_by_bic('MYTHINGY')).to eq(nil)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'normalizes thebic before searching' do
|
20
|
+
allow(subject).to receive(:normalize_bic).and_return('AAA')
|
21
|
+
expect(subject.find_by_bic('MYTHINGY')).to eq(nil)
|
22
|
+
expect(subject).to have_received(:normalize_bic)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#normalize_bic' do
|
27
|
+
it 'makes all letters uppercase' do
|
28
|
+
expect(subject.normalize_bic('lowercaseid')).to eq('LOWERCASEID')
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'always uses 11 letter BICs' do
|
32
|
+
expect(subject.normalize_bic('SHORT')).to eq('SHORTXXXXXX')
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'handles nil values' do
|
36
|
+
expect(subject.normalize_bic(nil)).to eq('XXXXXXXXXXX')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SepaClearer::DeutscheBundesbank do
|
4
|
+
describe '#parse_raw_data' do
|
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]])
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'cleans up the name' do
|
11
|
+
expect(subject.parse_raw_data(data)[0]).to eq('My Org')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'returns the BIC' do
|
15
|
+
expect(subject.parse_raw_data(data)[1]).to eq('QWERTZ12345')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'maps the capabilities' do
|
19
|
+
expect(subject.parse_raw_data(data)[2]).to eq([:sct])
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SepaClearer::PaymentProvider do
|
4
|
+
describe '.new' do
|
5
|
+
subject(:provider) { described_class.new('Testorg', 'SOMEVALIDID', [:core]) }
|
6
|
+
|
7
|
+
it 'sets the proper name' do
|
8
|
+
expect(provider.name).to eq('Testorg')
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'sets the proper BIC' do
|
12
|
+
expect(provider.bic).to eq('SOMEVALIDID')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'sets the proper capabilities' do
|
16
|
+
expect(provider.capabilities).to eq([:core])
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'sepa_clearer'
|
2
|
+
|
3
|
+
RSpec.configure do |config|
|
4
|
+
config.filter_run :focus
|
5
|
+
config.run_all_when_everything_filtered = true
|
6
|
+
|
7
|
+
if config.files_to_run.one?
|
8
|
+
config.default_formatter = 'doc'
|
9
|
+
end
|
10
|
+
|
11
|
+
config.profile_examples = 3
|
12
|
+
|
13
|
+
config.order = :random
|
14
|
+
|
15
|
+
Kernel.srand config.seed
|
16
|
+
|
17
|
+
config.expect_with :rspec do |expectations|
|
18
|
+
expectations.syntax = :expect
|
19
|
+
end
|
20
|
+
|
21
|
+
config.mock_with :rspec do |mocks|
|
22
|
+
mocks.syntax = :expect
|
23
|
+
mocks.verify_partial_doubles = true
|
24
|
+
end
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sepa_clearer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Maximilian Schulz
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-07-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3'
|
55
|
+
description: This gem maintains a list of all RPS SEPA clearers available via the
|
56
|
+
Deutsche Bundesbank.
|
57
|
+
email:
|
58
|
+
- m.schulz@kulturfluss.de
|
59
|
+
executables:
|
60
|
+
- update_data
|
61
|
+
extensions: []
|
62
|
+
extra_rdoc_files: []
|
63
|
+
files:
|
64
|
+
- ".gitignore"
|
65
|
+
- Gemfile
|
66
|
+
- LICENSE.txt
|
67
|
+
- README.md
|
68
|
+
- Rakefile
|
69
|
+
- bin/update_data
|
70
|
+
- data/deutsche_bundesbank.csv
|
71
|
+
- lib/sepa_clearer.rb
|
72
|
+
- lib/sepa_clearer/clearer.rb
|
73
|
+
- lib/sepa_clearer/deutsche_bundesbank.rb
|
74
|
+
- lib/sepa_clearer/payment_provider.rb
|
75
|
+
- lib/sepa_clearer/version.rb
|
76
|
+
- sepa-clearer.gemspec
|
77
|
+
- spec/clearer_spec.rb
|
78
|
+
- spec/deutsche_bundesbank_spec.rb
|
79
|
+
- spec/payment_provider_spec.rb
|
80
|
+
- spec/spec_helper.rb
|
81
|
+
homepage: http://opensource.railslove.com/sepa-clearer
|
82
|
+
licenses:
|
83
|
+
- MIT
|
84
|
+
metadata: {}
|
85
|
+
post_install_message:
|
86
|
+
rdoc_options: []
|
87
|
+
require_paths:
|
88
|
+
- lib
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
requirements: []
|
100
|
+
rubyforge_project:
|
101
|
+
rubygems_version: 2.2.2
|
102
|
+
signing_key:
|
103
|
+
specification_version: 4
|
104
|
+
summary: List of all available SEPA clearers and their supported features
|
105
|
+
test_files:
|
106
|
+
- spec/clearer_spec.rb
|
107
|
+
- spec/deutsche_bundesbank_spec.rb
|
108
|
+
- spec/payment_provider_spec.rb
|
109
|
+
- spec/spec_helper.rb
|
110
|
+
has_rdoc:
|