ofx 0.3.4 → 0.3.5
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 +4 -4
- data/lib/ofx/account.rb +3 -7
- data/lib/ofx/balance.rb +5 -4
- data/lib/ofx/errors.rb +2 -0
- data/lib/ofx/foundation.rb +4 -1
- data/lib/ofx/parser/ofx102.rb +6 -6
- data/lib/ofx/parser/ofx211.rb +8 -4
- data/lib/ofx/parser.rb +18 -17
- data/lib/ofx/sign_on.rb +3 -4
- data/lib/ofx/statement.rb +3 -7
- data/lib/ofx/status.rb +4 -4
- data/lib/ofx/transaction.rb +4 -12
- data/lib/ofx/version.rb +3 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1f7e1315a8e1fe59c9e97b5bb1bd470f5ba977463f3311e3eb76ecdc707afd7
|
4
|
+
data.tar.gz: f8463316d6ef710908701765feabbd884e7f5ee87b0ceb2188cef1284705ed23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4883a274bcb8fcbd35b363183f9ddf896994278ade919f038d698ccd1164dd78b947ee500d3b66b27dc6c22ba719ba6144317a1fbacf66a724d35e3bc14845bd
|
7
|
+
data.tar.gz: 7f40b8abdde571151fe54015a243e8f569116178dc7ed0113639900bbfe4e976ca4f62ccb32dbdaa72e2ce5ddd5794fd85f50bf1dc455ac20a61c893c0e5dd49
|
data/lib/ofx/account.rb
CHANGED
@@ -1,11 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module OFX
|
2
4
|
class Account < Foundation
|
3
|
-
attr_accessor :balance
|
4
|
-
attr_accessor :bank_id
|
5
|
-
attr_accessor :currency
|
6
|
-
attr_accessor :id
|
7
|
-
attr_accessor :transactions
|
8
|
-
attr_accessor :type
|
9
|
-
attr_accessor :available_balance
|
5
|
+
attr_accessor :balance, :bank_id, :currency, :id, :transactions, :type, :available_balance
|
10
6
|
end
|
11
7
|
end
|
data/lib/ofx/balance.rb
CHANGED
data/lib/ofx/errors.rb
CHANGED
data/lib/ofx/foundation.rb
CHANGED
data/lib/ofx/parser/ofx102.rb
CHANGED
@@ -23,7 +23,7 @@ module OFX
|
|
23
23
|
'INFO' => :info,
|
24
24
|
'WARN' => :warn,
|
25
25
|
'ERROR' => :error
|
26
|
-
}.
|
26
|
+
}.freeze
|
27
27
|
|
28
28
|
attr_reader :headers, :body, :html
|
29
29
|
|
@@ -134,7 +134,7 @@ module OFX
|
|
134
134
|
check_number: element.search('checknum').inner_text,
|
135
135
|
ref_number: element.search('refnum').inner_text,
|
136
136
|
posted_at: build_date(element.search('dtposted').inner_text),
|
137
|
-
occurred_at
|
137
|
+
occurred_at: occurred_at,
|
138
138
|
type: build_type(element),
|
139
139
|
sic: element.search('sic').inner_text
|
140
140
|
})
|
@@ -164,7 +164,7 @@ module OFX
|
|
164
164
|
offset = '+0000'
|
165
165
|
end
|
166
166
|
|
167
|
-
date <<
|
167
|
+
date << " #{offset}"
|
168
168
|
|
169
169
|
Time.parse(date)
|
170
170
|
end
|
@@ -178,9 +178,9 @@ module OFX
|
|
178
178
|
end
|
179
179
|
|
180
180
|
OFX::Balance.new({
|
181
|
-
amount
|
181
|
+
amount: ammount,
|
182
182
|
amount_in_pennies: (amount * 100).to_i,
|
183
|
-
posted_at:
|
183
|
+
posted_at: posted_at
|
184
184
|
})
|
185
185
|
end
|
186
186
|
|
@@ -189,7 +189,7 @@ module OFX
|
|
189
189
|
amount = to_decimal(node.search('availbal > balamt').inner_text)
|
190
190
|
|
191
191
|
OFX::Balance.new({
|
192
|
-
amount
|
192
|
+
amount: amount,
|
193
193
|
amount_in_pennies: (amount * 100).to_i,
|
194
194
|
posted_at: build_date(node.search('availbal > dtasof').inner_text)
|
195
195
|
})
|
data/lib/ofx/parser/ofx211.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module OFX
|
2
4
|
module Parser
|
3
5
|
class OFX211 < OFX102
|
4
|
-
VERSION =
|
6
|
+
VERSION = '2.1.1'
|
5
7
|
|
6
8
|
def self.parse_headers(header_text)
|
7
9
|
doc = Nokogiri::XML(header_text)
|
@@ -9,7 +11,7 @@ module OFX
|
|
9
11
|
# Nokogiri can't search for processing instructions, so we
|
10
12
|
# need to do this manually.
|
11
13
|
doc.children.each do |e|
|
12
|
-
if e.type == Nokogiri::XML::Node::PI_NODE && e.name ==
|
14
|
+
if e.type == Nokogiri::XML::Node::PI_NODE && e.name == 'OFX'
|
13
15
|
# Getting the attributes from the element doesn't seem to
|
14
16
|
# work either.
|
15
17
|
return extract_headers(e.text)
|
@@ -19,13 +21,14 @@ module OFX
|
|
19
21
|
nil
|
20
22
|
end
|
21
23
|
|
22
|
-
private
|
23
24
|
def self.extract_headers(text)
|
24
25
|
headers = {}
|
25
26
|
text.split(/\s+/).each do |attr_text|
|
26
27
|
match = /(.+)="(.+)"/.match(attr_text)
|
27
28
|
next unless match
|
28
|
-
|
29
|
+
|
30
|
+
k = match[1]
|
31
|
+
v = match[2]
|
29
32
|
headers[k] = v
|
30
33
|
end
|
31
34
|
headers
|
@@ -33,6 +36,7 @@ module OFX
|
|
33
36
|
|
34
37
|
def self.strip_quotes(s)
|
35
38
|
return unless s
|
39
|
+
|
36
40
|
s.sub(/^"(.*)"$/, '\1')
|
37
41
|
end
|
38
42
|
end
|
data/lib/ofx/parser.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module OFX
|
2
4
|
module Parser
|
3
5
|
class Base
|
4
|
-
attr_reader :headers
|
5
|
-
attr_reader :body
|
6
|
-
attr_reader :content
|
7
|
-
attr_reader :parser
|
6
|
+
attr_reader :headers, :body, :conten, :parser
|
8
7
|
|
9
8
|
def initialize(resource)
|
10
9
|
resource = open_resource(resource)
|
@@ -12,17 +11,17 @@ module OFX
|
|
12
11
|
begin
|
13
12
|
@content = convert_to_utf8(resource.read)
|
14
13
|
@headers, @body = prepare(content)
|
15
|
-
rescue
|
14
|
+
rescue StandardError
|
16
15
|
raise OFX::UnsupportedFileError
|
17
16
|
end
|
18
17
|
|
19
|
-
case headers[
|
20
|
-
when /102/
|
21
|
-
@parser = OFX102.new(:
|
22
|
-
when /103/
|
23
|
-
@parser = OFX103.new(:
|
24
|
-
when /200|202|211|220/
|
25
|
-
@parser = OFX211.new(:
|
18
|
+
case headers['VERSION']
|
19
|
+
when /102/
|
20
|
+
@parser = OFX102.new(headers: headers, body: body)
|
21
|
+
when /103/
|
22
|
+
@parser = OFX103.new(headersu: headers, body: body)
|
23
|
+
when /200|202|211|220/
|
24
|
+
@parser = OFX211.new(headers: headers, body: body)
|
26
25
|
else
|
27
26
|
raise OFX::UnsupportedFileError
|
28
27
|
end
|
@@ -34,11 +33,12 @@ module OFX
|
|
34
33
|
else
|
35
34
|
open(resource)
|
36
35
|
end
|
37
|
-
rescue
|
36
|
+
rescue StandardError
|
38
37
|
StringIO.new(resource)
|
39
38
|
end
|
40
39
|
|
41
40
|
private
|
41
|
+
|
42
42
|
def prepare(content)
|
43
43
|
# split headers & body
|
44
44
|
header_text, body = content.dup.split(/<OFX>/, 2)
|
@@ -55,9 +55,9 @@ module OFX
|
|
55
55
|
end
|
56
56
|
|
57
57
|
# Replace body tags to parse it with Nokogiri
|
58
|
-
body.gsub!(/>\s+</m,
|
59
|
-
body.gsub!(/\s+</m,
|
60
|
-
body.gsub!(/>\s+/m,
|
58
|
+
body.gsub!(/>\s+</m, '><')
|
59
|
+
body.gsub!(/\s+</m, '<')
|
60
|
+
body.gsub!(/>\s+/m, '>')
|
61
61
|
body.gsub!(/<(\w+?)>([^<]+)/m, '<\1>\2</\1>')
|
62
62
|
|
63
63
|
[headers, body]
|
@@ -65,7 +65,8 @@ module OFX
|
|
65
65
|
|
66
66
|
def convert_to_utf8(string)
|
67
67
|
return string if Kconv.isutf8(string)
|
68
|
-
|
68
|
+
|
69
|
+
string.encode('UTF-8', 'ISO-8859-1')
|
69
70
|
end
|
70
71
|
end
|
71
72
|
end
|
data/lib/ofx/sign_on.rb
CHANGED
data/lib/ofx/statement.rb
CHANGED
@@ -1,11 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module OFX
|
2
4
|
class Statement < Foundation
|
3
|
-
attr_accessor :account
|
4
|
-
attr_accessor :available_balance
|
5
|
-
attr_accessor :balance
|
6
|
-
attr_accessor :currency
|
7
|
-
attr_accessor :start_date
|
8
|
-
attr_accessor :end_date
|
9
|
-
attr_accessor :transactions
|
5
|
+
attr_accessor :account, :available_balance, :balance, :currency, :start_date, :end_date, :transactions
|
10
6
|
end
|
11
7
|
end
|
data/lib/ofx/status.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module OFX
|
2
4
|
# Error Reporting Aggregate
|
3
5
|
class Status < Foundation
|
4
|
-
attr_accessor :code
|
5
|
-
attr_accessor :severity # Severity of the error
|
6
|
-
attr_accessor :message # Textual explanation
|
6
|
+
attr_accessor :code, :severity, :message
|
7
7
|
|
8
8
|
def success?
|
9
|
-
code
|
9
|
+
code.zero?
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
data/lib/ofx/transaction.rb
CHANGED
@@ -1,16 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module OFX
|
2
4
|
class Transaction < Foundation
|
3
|
-
attr_accessor :amount
|
4
|
-
|
5
|
-
attr_accessor :check_number
|
6
|
-
attr_accessor :fit_id
|
7
|
-
attr_accessor :memo
|
8
|
-
attr_accessor :name
|
9
|
-
attr_accessor :payee
|
10
|
-
attr_accessor :posted_at
|
11
|
-
attr_accessor :occurred_at
|
12
|
-
attr_accessor :ref_number
|
13
|
-
attr_accessor :type
|
14
|
-
attr_accessor :sic
|
5
|
+
attr_accessor :amount, :amount_in_pennies, :check_number, :fit_id, :memo, :name, :payee, :posted_at, :occurred_at,
|
6
|
+
:ref_number, :type, :sic
|
15
7
|
end
|
16
8
|
end
|
data/lib/ofx/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ofx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-02-
|
12
|
+
date: 2022-02-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|