ruby_fints 0.0.3 → 0.0.4

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: '046070118a12bf407ebbc6d300d43a616c4c35a8'
4
- data.tar.gz: 1d25318affcfaf97965fe9b9ebcbd031da4010d7
3
+ metadata.gz: 11d1bcb250d24626e917803cca2cdfb4b39d04e1
4
+ data.tar.gz: d744254e59447312f943a4227b8276ca96b0cb52
5
5
  SHA512:
6
- metadata.gz: e751448855bf9f5b0763233671f022a7d724c3bd9f50aa8f9307d386b172e2d4cda3c27da04b42121117e575cfb34a977b2f3e6a94f66f0111e93dc35eb14979
7
- data.tar.gz: 1f0819503b91715b67b3a698c4b0b26350d8cde134abfef5143c806497745682efa64a3c79b3ec95e79a980dfa135bc7da84bb4a920a52864c2ea585ae103747
6
+ metadata.gz: 7229878143c1cb15a0b1183e115c21aa669b5591c537d98c9deb0e19ae0e9d9d4641427b3740f8104cd1261a36db9e368914cb09bb267ef40896b55973e37df2
7
+ data.tar.gz: d93a1fa1f7bc1f09b3c8aca544dfdccad4264e5b89ec3bb9722c72c4b877e8320bc7928e3aaad648b0bdcc467f473f49a17d1d5415e87c79dd8102732df18789
@@ -1,7 +1,8 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.2.7
5
- - 2.3.4
6
- - 2.4.1
4
+ - 2.2.9
5
+ - 2.3.7
6
+ - 2.4.4
7
+ - 2.5.1
7
8
  before_install: gem install bundler -v 1.14.6
data/README.md CHANGED
@@ -17,6 +17,7 @@ Banks tested:
17
17
  * Sparkasse
18
18
  * ING DiBa
19
19
  * GLS Bank
20
+ * comdirect
20
21
 
21
22
  Usage
22
23
  -----
@@ -37,6 +38,12 @@ accounts = f.get_sepa_accounts
37
38
  pp accounts
38
39
  # [{iban: 'DE12345678901234567890', bic: 'ABCDEFGH1DEF', accountnumber: '123456790', subaccount: '', blz: '123456789'}]
39
40
 
41
+ balance = f.get_balance(accounts[0])
42
+ pp balance
43
+ # {:amount=>1234.56,
44
+ # :currency=>"EUR",
45
+ # :date=>#<Date: 2018-08-21 ((2458352j,0s,0n),+0s,2299161j)>}
46
+
40
47
  statement = f.get_statement(accounts[0], Date.new(2017, 4, 3), Date.new(2017, 4, 4))
41
48
  pp statement.map(&:data)
42
49
 
@@ -40,6 +40,51 @@ module FinTS
40
40
  end
41
41
  end
42
42
 
43
+ def get_balance(account)
44
+ FinTS::Client.logger.info("Start fetching balance")
45
+
46
+ dialog = new_dialog
47
+ dialog.sync
48
+ dialog.init
49
+
50
+ msg = create_balance_message(dialog, account)
51
+ FinTS::Client.logger.debug("Send message: #{msg}")
52
+ resp = dialog.send_msg(msg)
53
+ dialog.send_end
54
+
55
+ # find segment and split up to balance part
56
+ seg = resp.find_segment('HISAL')
57
+ arr = Helper.split_for_data_elements(Helper.split_for_data_groups(seg)[4])
58
+
59
+ amount = arr[1].sub(',', '.').to_f
60
+ # 'C' for credit, 'D' for debit
61
+ amount *= -1 if arr[0] == 'D'
62
+
63
+ balance = {
64
+ amount: amount,
65
+ currency: arr[2],
66
+ date: Date.parse(arr[3])
67
+ }
68
+
69
+ FinTS::Client.logger.debug("Balance: #{balance}")
70
+ balance
71
+ end
72
+
73
+ def create_balance_message(dialog, account)
74
+ hversion = dialog.hksalversion
75
+
76
+ acc = if [4, 5, 6].include?(hversion)
77
+ [account[:accountnumber], account[:subaccount], '280', account[:blz]].join(':')
78
+ elsif hversion == 7
79
+ [account[:iban], account[:bic], account[:accountnumber], account[:subaccount], '280', account[:blz]].join(':')
80
+ else
81
+ raise ArgumentError, "Unsupported HKSAL version #{hversion}"
82
+ end
83
+
84
+ segment = Segment::HKSAL.new(3, hversion, acc)
85
+ new_message(dialog, [segment])
86
+ end
87
+
43
88
  def get_statement(account, start_date, end_date)
44
89
  FinTS::Client.logger.info("Start fetching from #{start_date} to #{end_date}")
45
90
 
@@ -13,5 +13,13 @@ module FinTS
13
13
  mt940 = Cmxl.parse(processed_data)
14
14
  mt940.flat_map(&:transactions)
15
15
  end
16
+
17
+ def self.split_for_data_groups(seg)
18
+ seg.split(/\+(?<!\?\+)/)
19
+ end
20
+
21
+ def self.split_for_data_elements(deg)
22
+ deg.split(/:(?<!\?:)/)
23
+ end
16
24
  end
17
25
  end
@@ -1,16 +1,20 @@
1
1
  module FinTS
2
2
  class HTTPSConnection
3
3
  def initialize(url)
4
- @url = url
4
+ @url = URI(url)
5
5
  end
6
6
 
7
7
  def send_msg(msg)
8
8
  message_string = msg.to_s.encode('iso-8859-1')
9
9
  FinTS::Client.logger.debug("<< #{message_string}")
10
10
  data = Base64.encode64(message_string)
11
- response = HTTParty.post(@url, body: data, headers: {'Content-Type' => 'text/plain', })
12
- if response.code < 200 || response.code > 299
13
- raise ConnectionError, "Bad status code #{response.code}"
11
+
12
+ response = Net::HTTP.start(@url.host, @url.port, use_ssl: @url.scheme == 'https') do |http|
13
+ http.post(@url.path, data, {'Content-Type' => 'text/plain'})
14
+ end
15
+ code = response.code.to_i
16
+ if code < 200 || code > 299
17
+ raise ConnectionError, "Bad status code #{code}"
14
18
  end
15
19
  res = Base64.decode64(response.body).force_encoding('iso-8859-1').encode('utf-8')
16
20
  FinTS::Client.logger.debug(">> #{res}")
@@ -0,0 +1,27 @@
1
+ module FinTS
2
+ module Segment
3
+ # HKSAL (Kontosaldo)
4
+ # Refs: http://www.hbci-zka.de/dokumente/spezifikation_deutsch/fintsv3/FinTS_3.0_Messages_Geschaeftsvorfaelle_2015-08-07_final_version.pdf
5
+ # Section C.2.1.2
6
+ class HKSAL < BaseSegment
7
+ def initialize(segno, version, account)
8
+ @version = version
9
+ data = [
10
+ account,
11
+ 'N'
12
+ ]
13
+ super(segno, data)
14
+ end
15
+
16
+ protected
17
+
18
+ def type
19
+ 'HKSAL'
20
+ end
21
+
22
+ def version
23
+ @version
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,4 +1,4 @@
1
1
  module FinTS
2
2
  GEM_NAME = 'ruby_fints'
3
- VERSION = '0.0.3'
3
+ VERSION = '0.0.4'
4
4
  end
@@ -1,5 +1,5 @@
1
1
  require 'base64'
2
- require 'httparty'
2
+ require 'net/http'
3
3
  require 'cmxl'
4
4
  require 'logger'
5
5
  require_relative 'fints/client'
@@ -17,6 +17,7 @@ require_relative 'fints/segment/base_segment'
17
17
  require_relative 'fints/segment/hkend'
18
18
  require_relative 'fints/segment/hkidn'
19
19
  require_relative 'fints/segment/hkkaz'
20
+ require_relative 'fints/segment/hksal'
20
21
  require_relative 'fints/segment/hkspa'
21
22
  require_relative 'fints/segment/hksyn'
22
23
  require_relative 'fints/segment/hkvvb'
@@ -13,7 +13,6 @@ Gem::Specification.new do |s|
13
13
  s.description = %q{FinTS (formerly known as HBCI) is a protocol to programmatically interface with German banks. This gem is a translation of https://github.com/raphaelm/python-fints into Ruby.}
14
14
 
15
15
  s.add_runtime_dependency 'cmxl', '~> 0.2'
16
- s.add_runtime_dependency 'httparty', '~> 0.10'
17
16
  s.add_development_dependency 'rake'
18
17
  s.add_development_dependency 'minitest'
19
18
  s.add_development_dependency 'webmock'
@@ -7,4 +7,4 @@ require 'ruby_fints'
7
7
  require 'minitest/autorun'
8
8
  require 'webmock/minitest'
9
9
  require 'delorean'
10
- require 'mocha/mini_test'
10
+ require 'mocha/minitest'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_fints
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marvin Killing
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-02 00:00:00.000000000 Z
11
+ date: 2018-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cmxl
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.2'
27
- - !ruby/object:Gem::Dependency
28
- name: httparty
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '0.10'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '0.10'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rake
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -151,6 +137,7 @@ files:
151
137
  - lib/fints/segment/hkend.rb
152
138
  - lib/fints/segment/hkidn.rb
153
139
  - lib/fints/segment/hkkaz.rb
140
+ - lib/fints/segment/hksal.rb
154
141
  - lib/fints/segment/hkspa.rb
155
142
  - lib/fints/segment/hksyn.rb
156
143
  - lib/fints/segment/hkvvb.rb