ofx_for_ruby 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.externalToolBuilders/Rebuild parsers.launch +10 -0
- data/.gitignore +9 -0
- data/.loadpath +5 -0
- data/.project +27 -0
- data/COPYING +674 -0
- data/Gemfile +2 -0
- data/README +47 -0
- data/RELEASE_NOTES +45 -0
- data/Rakefile +63 -0
- data/lib/ofx.rb +60 -0
- data/lib/ofx/1.0.2/banking_message_set.rb +261 -0
- data/lib/ofx/1.0.2/credit_card_statement_message_set.rb +269 -0
- data/lib/ofx/1.0.2/document.rb +34 -0
- data/lib/ofx/1.0.2/email_message_set.rb +34 -0
- data/lib/ofx/1.0.2/financial_institution_profile_message_set.rb +155 -0
- data/lib/ofx/1.0.2/header.rb +48 -0
- data/lib/ofx/1.0.2/interbank_funds_transfer_message_set.rb +30 -0
- data/lib/ofx/1.0.2/investment_security_list_message_set.rb +30 -0
- data/lib/ofx/1.0.2/investment_statement_message_set.rb +30 -0
- data/lib/ofx/1.0.2/lexer.rb +135 -0
- data/lib/ofx/1.0.2/message_set.rb +165 -0
- data/lib/ofx/1.0.2/ofx_102.racc +90 -0
- data/lib/ofx/1.0.2/ofx_102.rex +65 -0
- data/lib/ofx/1.0.2/parser.rb +215 -0
- data/lib/ofx/1.0.2/payment_message_set.rb +30 -0
- data/lib/ofx/1.0.2/serializer.rb +114 -0
- data/lib/ofx/1.0.2/signon_message_set.rb +121 -0
- data/lib/ofx/1.0.2/signup_message_set.rb +186 -0
- data/lib/ofx/1.0.2/statements.rb +54 -0
- data/lib/ofx/1.0.2/status.rb +30 -0
- data/lib/ofx/1.0.2/wire_funds_transfer_message_set.rb +30 -0
- data/lib/ofx/banking_message_set.rb +125 -0
- data/lib/ofx/credit_card_statement_message_set.rb +104 -0
- data/lib/ofx/document.rb +30 -0
- data/lib/ofx/email_message_set.rb +42 -0
- data/lib/ofx/file_unique_identifier.rb +28 -0
- data/lib/ofx/financial_client.rb +76 -0
- data/lib/ofx/financial_institution.rb +83 -0
- data/lib/ofx/financial_institution_profile_message_set.rb +67 -0
- data/lib/ofx/header.rb +115 -0
- data/lib/ofx/http/cacert.pem +3509 -0
- data/lib/ofx/http/ofx_http_client.rb +84 -0
- data/lib/ofx/interbank_funds_transfer_message_set.rb +33 -0
- data/lib/ofx/investment_security_list_message_set.rb +33 -0
- data/lib/ofx/investment_statement_message_set.rb +33 -0
- data/lib/ofx/message_set.rb +78 -0
- data/lib/ofx/payment_message_set.rb +33 -0
- data/lib/ofx/serializer.rb +39 -0
- data/lib/ofx/signon_message_set.rb +141 -0
- data/lib/ofx/signup_message_set.rb +84 -0
- data/lib/ofx/statements.rb +49 -0
- data/lib/ofx/status.rb +100 -0
- data/lib/ofx/transaction_unique_identifier.rb +28 -0
- data/lib/ofx/version.rb +82 -0
- data/lib/ofx/wire_funds_transfer_message_set.rb +33 -0
- data/ofx_for_ruby.gemspec +25 -0
- data/planning/OFX Specification completion.ods +0 -0
- data/test/capital_one/capital_one_helper.rb +77 -0
- data/test/capital_one/fixtures/README +10 -0
- data/test/capital_one/fixtures/fipid-5599.xml +98 -0
- data/test/capital_one/test_banking_statement.rb +108 -0
- data/test/capital_one/test_financial_institution_profile.rb +295 -0
- data/test/capital_one/test_ofx_http_client.rb +72 -0
- data/test/capital_one/test_signup_account_information.rb +100 -0
- data/test/citi/citi_helper.rb +77 -0
- data/test/citi/fixtures/README +9 -0
- data/test/citi/fixtures/fipid-6642.xml +98 -0
- data/test/citi/test_credit_card_statement.rb +159 -0
- data/test/citi/test_financial_institution_profile.rb +231 -0
- data/test/citi/test_ofx_http_client.rb +71 -0
- data/test/citi/test_signup_account_information.rb +85 -0
- data/test/test_helper.rb +4 -0
- data/test/test_ofx_version.rb +141 -0
- metadata +210 -0
data/lib/ofx/document.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# Copyright © 2007 Chris Guidry <chrisguidry@gmail.com>
|
2
|
+
#
|
3
|
+
# This file is part of OFX for Ruby.
|
4
|
+
#
|
5
|
+
# OFX for Ruby is free software; you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation; either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# OFX for Ruby is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
module OFX
|
19
|
+
class Document
|
20
|
+
|
21
|
+
attr_accessor :header
|
22
|
+
attr :message_sets
|
23
|
+
|
24
|
+
def initialize
|
25
|
+
@header = OFX::Header.new
|
26
|
+
@message_sets = []
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Copyright © 2007 Chris Guidry <chrisguidry@gmail.com>
|
2
|
+
#
|
3
|
+
# This file is part of OFX for Ruby.
|
4
|
+
#
|
5
|
+
# OFX for Ruby is free software; you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation; either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# OFX for Ruby is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
module OFX
|
19
|
+
class EmailMessageSet < MessageSet
|
20
|
+
def precedence
|
21
|
+
9
|
22
|
+
end
|
23
|
+
def version
|
24
|
+
1
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class EmailMessageSetProfile < MessageSetProfile
|
29
|
+
def self.message_set_class
|
30
|
+
EmailMessageSet
|
31
|
+
end
|
32
|
+
|
33
|
+
attr_accessor :supports_email
|
34
|
+
def supports_email?
|
35
|
+
supports_email
|
36
|
+
end
|
37
|
+
attr_accessor :supports_mime_messages
|
38
|
+
def supports_mime_messages?
|
39
|
+
supports_mime_messages
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Copyright © 2007 Chris Guidry <chrisguidry@gmail.com>
|
2
|
+
#
|
3
|
+
# This file is part of OFX for Ruby.
|
4
|
+
#
|
5
|
+
# OFX for Ruby is free software; you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation; either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# OFX for Ruby is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
module OFX
|
19
|
+
class FileUniqueIdentifier
|
20
|
+
def initialize
|
21
|
+
@timestamp = DateTime.now
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_s
|
25
|
+
@timestamp.strftime('%Y%m%d%H%M%S')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# Copyright © 2007 Chris Guidry <chrisguidry@gmail.com>
|
2
|
+
#
|
3
|
+
# This file is part of OFX for Ruby.
|
4
|
+
#
|
5
|
+
# OFX for Ruby is free software; you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation; either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# OFX for Ruby is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
require 'date'
|
19
|
+
|
20
|
+
module OFX
|
21
|
+
class FinancialClient
|
22
|
+
|
23
|
+
@financial_institutions_and_credentials = []
|
24
|
+
|
25
|
+
attr_accessor :date_of_last_profile_update
|
26
|
+
|
27
|
+
def initialize(financial_institutions_and_credentials)
|
28
|
+
@financial_institutions_and_credentials = financial_institutions_and_credentials
|
29
|
+
end
|
30
|
+
|
31
|
+
def financial_institution_identification_for(financial_institution_id)
|
32
|
+
@financial_institutions_and_credentials.each do |pair|
|
33
|
+
return pair[0] if (pair[0].financial_institution_identifier == financial_institution_id)
|
34
|
+
end
|
35
|
+
return nil
|
36
|
+
end
|
37
|
+
def user_identification_for(financial_institution_id)
|
38
|
+
@financial_institutions_and_credentials.each do |pair|
|
39
|
+
return pair[1] if (pair[0].financial_institution_identifier == financial_institution_id)
|
40
|
+
end
|
41
|
+
return nil
|
42
|
+
end
|
43
|
+
|
44
|
+
def application_identification
|
45
|
+
OFX::ApplicationIdentification.new('OFX', '0010')
|
46
|
+
end
|
47
|
+
|
48
|
+
def create_signon_request_message(financial_institution_id)
|
49
|
+
signonMessageSet = OFX::SignonMessageSet.new
|
50
|
+
|
51
|
+
signonRequest = OFX::SignonRequest.new
|
52
|
+
signonRequest.date = DateTime.now
|
53
|
+
signonRequest.user_identification = self.user_identification_for(financial_institution_id)
|
54
|
+
signonRequest.generate_user_key = false
|
55
|
+
signonRequest.language = "ENG"
|
56
|
+
signonRequest.financial_institution_identification = self.financial_institution_identification_for(financial_institution_id)
|
57
|
+
signonRequest.session_cookie = nil
|
58
|
+
signonRequest.application_identification = self.application_identification
|
59
|
+
signonMessageSet.requests << signonRequest
|
60
|
+
|
61
|
+
signonMessageSet
|
62
|
+
end
|
63
|
+
|
64
|
+
def create_profile_update_request_message()
|
65
|
+
profileMessageSet = OFX::FinancialInstitutionProfileMessageSet.new
|
66
|
+
|
67
|
+
profileRequest = OFX::FinancialInstitutionProfileRequest.new
|
68
|
+
profileRequest.transaction_identifier = OFX::TransactionUniqueIdentifier.new
|
69
|
+
profileRequest.client_routing = 'MSGSET'
|
70
|
+
profileRequest.date_of_last_profile_update = self.date_of_last_profile_update
|
71
|
+
profileMessageSet.requests << profileRequest
|
72
|
+
|
73
|
+
profileMessageSet
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# Copyright © 2007 Chris Guidry <chrisguidry@gmail.com>
|
2
|
+
#
|
3
|
+
# This file is part of OFX for Ruby.
|
4
|
+
#
|
5
|
+
# OFX for Ruby is free software; you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation; either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# OFX for Ruby is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
require 'uri'
|
19
|
+
|
20
|
+
module OFX
|
21
|
+
class FinancialInstitution
|
22
|
+
|
23
|
+
def self.get_institution(financial_institution_name)
|
24
|
+
case financial_institution_name
|
25
|
+
when 'Capital One'
|
26
|
+
FinancialInstitution.new('Capital One',
|
27
|
+
URI.parse('https://onlinebanking.capitalone.com/scripts/serverext.dll'),
|
28
|
+
OFX::Version.new("1.0.2"))
|
29
|
+
when 'Citi'
|
30
|
+
FinancialInstitution.new('Citi',
|
31
|
+
URI.parse('https://secureofx2.bankhost.com/citi/cgi-forte/ofx_rt?servicename=ofx_rt&pagename=ofx'),
|
32
|
+
OFX::Version.new("1.0.2"))
|
33
|
+
else
|
34
|
+
raise NotImplementedError
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
attr :name
|
39
|
+
attr :ofx_uri
|
40
|
+
attr :ofx_version
|
41
|
+
|
42
|
+
def initialize(name, ofx_uri, ofx_version)
|
43
|
+
@name = name
|
44
|
+
@ofx_uri = ofx_uri
|
45
|
+
@ofx_version = ofx_version
|
46
|
+
end
|
47
|
+
|
48
|
+
def create_request_document()
|
49
|
+
document = OFX::Document.new
|
50
|
+
|
51
|
+
case ofx_version
|
52
|
+
when OFX::Version.new("1.0.2")
|
53
|
+
document.header.header_version = OFX::Version.new("1.0.0")
|
54
|
+
document.header.content_type = "OFXSGML"
|
55
|
+
document.header.document_version = OFX::Version.new("1.0.2")
|
56
|
+
else
|
57
|
+
raise NotImplementedError
|
58
|
+
end
|
59
|
+
|
60
|
+
document.header.security = "NONE"
|
61
|
+
|
62
|
+
document.header.content_encoding = "USASCII"
|
63
|
+
document.header.content_character_set = "1252"
|
64
|
+
|
65
|
+
document.header.compression = "NONE"
|
66
|
+
|
67
|
+
document.header.previous_unique_identifier = "NONE"
|
68
|
+
document.header.unique_identifier = OFX::FileUniqueIdentifier.new
|
69
|
+
|
70
|
+
document
|
71
|
+
end
|
72
|
+
|
73
|
+
def send(document)
|
74
|
+
serializer = OFX::Serializer.get(@ofx_version)
|
75
|
+
request_body = serializer.to_http_post_body(document)
|
76
|
+
|
77
|
+
client = OFX::HTTPClient.new(@ofx_uri)
|
78
|
+
response_body = client.send(request_body)
|
79
|
+
|
80
|
+
return serializer.from_http_response_body(response_body)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# Copyright © 2007 Chris Guidry <chrisguidry@gmail.com>
|
2
|
+
#
|
3
|
+
# This file is part of OFX for Ruby.
|
4
|
+
#
|
5
|
+
# OFX for Ruby is free software; you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation; either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# OFX for Ruby is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
module OFX
|
19
|
+
class FinancialInstitutionProfileMessageSet < MessageSet
|
20
|
+
def precedence
|
21
|
+
11
|
22
|
+
end
|
23
|
+
def version
|
24
|
+
1
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class FinancialInstitutionProfileMessageSetProfile < MessageSetProfile
|
29
|
+
def self.message_set_class
|
30
|
+
FinancialInstitutionProfileMessageSet
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class SignonRealm
|
35
|
+
attr_accessor :name
|
36
|
+
attr_accessor :password_length_constraint
|
37
|
+
attr_accessor :password_characters_constraint
|
38
|
+
attr_accessor :case_sensitive
|
39
|
+
attr_accessor :allows_special_characters
|
40
|
+
attr_accessor :allows_spaces
|
41
|
+
attr_accessor :supports_pin_changes
|
42
|
+
attr_accessor :requires_initial_pin_change
|
43
|
+
end
|
44
|
+
|
45
|
+
class FinancialInstitutionProfileRequest < TransactionalRequest
|
46
|
+
attr_accessor :client_routing
|
47
|
+
attr_accessor :date_of_last_profile_update
|
48
|
+
end
|
49
|
+
|
50
|
+
class FinancialInstitutionProfileResponse < TransactionalResponse
|
51
|
+
attr_accessor :message_sets
|
52
|
+
attr_accessor :signon_realms
|
53
|
+
|
54
|
+
attr_accessor :date_of_last_profile_update
|
55
|
+
attr_accessor :financial_institution_name
|
56
|
+
attr_accessor :address
|
57
|
+
attr_accessor :city
|
58
|
+
attr_accessor :state
|
59
|
+
attr_accessor :postal_code
|
60
|
+
attr_accessor :country
|
61
|
+
attr_accessor :customer_service_telephone
|
62
|
+
attr_accessor :technical_support_telephone
|
63
|
+
attr_accessor :facsimile_telephone
|
64
|
+
attr_accessor :url
|
65
|
+
attr_accessor :email_address
|
66
|
+
end
|
67
|
+
end
|
data/lib/ofx/header.rb
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
# Copyright © 2007 Chris Guidry <chrisguidry@gmail.com>
|
2
|
+
#
|
3
|
+
# This file is part of OFX for Ruby.
|
4
|
+
#
|
5
|
+
# OFX for Ruby is free software; you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation; either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# OFX for Ruby is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
module OFX
|
19
|
+
|
20
|
+
# = Summary
|
21
|
+
# The OFX headers for one message. The headers provide metadata about
|
22
|
+
# the OFX request/response, including message versioning, security, and
|
23
|
+
# encoding.
|
24
|
+
#
|
25
|
+
# = Specifications
|
26
|
+
# OFX 1.0.2:: 2.2 (pp. 12-14)
|
27
|
+
class Header
|
28
|
+
|
29
|
+
def initialize
|
30
|
+
@headers = {}
|
31
|
+
end
|
32
|
+
|
33
|
+
def [](key)
|
34
|
+
@headers[key]
|
35
|
+
end
|
36
|
+
|
37
|
+
def []=(key, value)
|
38
|
+
@headers[key] = value
|
39
|
+
end
|
40
|
+
|
41
|
+
# The version of this OFX header
|
42
|
+
# OFX 1.0.2:: 2.2.1
|
43
|
+
# OFX 1.0.3:: 2.2.1
|
44
|
+
def header_version
|
45
|
+
OFX::Version.new(@headers['OFXHEADER'])
|
46
|
+
end
|
47
|
+
def header_version=(value)
|
48
|
+
@headers['OFXHEADER'] = value
|
49
|
+
end
|
50
|
+
|
51
|
+
# OFX 1.0.2:: 2.2.2
|
52
|
+
def content_type
|
53
|
+
@headers['DATA']
|
54
|
+
end
|
55
|
+
def content_type=(value)
|
56
|
+
@headers['DATA'] = value
|
57
|
+
end
|
58
|
+
|
59
|
+
# OFX 1.0.2:: 2.2.3
|
60
|
+
def document_version
|
61
|
+
OFX::Version.new(@headers['VERSION'])
|
62
|
+
end
|
63
|
+
def document_version=(value)
|
64
|
+
@headers['VERSION'] = value
|
65
|
+
end
|
66
|
+
|
67
|
+
# OFX 1.0.2:: 2.2.4
|
68
|
+
def security
|
69
|
+
@headers['SECURITY']
|
70
|
+
end
|
71
|
+
def security=(value)
|
72
|
+
@headers['SECURITY'] = value
|
73
|
+
end
|
74
|
+
|
75
|
+
# OFX 1.0.2:: 2.2.5
|
76
|
+
def content_encoding
|
77
|
+
@headers['ENCODING']
|
78
|
+
end
|
79
|
+
def content_encoding=(value)
|
80
|
+
@headers['ENCODING'] = value
|
81
|
+
end
|
82
|
+
|
83
|
+
# OFX 1.0.2:: 2.2.5
|
84
|
+
def content_character_set
|
85
|
+
@headers['CHARSET']
|
86
|
+
end
|
87
|
+
def content_character_set=(value)
|
88
|
+
@headers['CHARSET'] = value
|
89
|
+
end
|
90
|
+
|
91
|
+
# OFX 1.0.2:: 2.2.6
|
92
|
+
def compression
|
93
|
+
@headers['COMPRESSION']
|
94
|
+
end
|
95
|
+
def compression=(value)
|
96
|
+
@headers['COMPRESSION'] = value
|
97
|
+
end
|
98
|
+
|
99
|
+
# OFX 1.0.2:: 2.2.7
|
100
|
+
def unique_identifier
|
101
|
+
@headers['NEWFILEUID']
|
102
|
+
end
|
103
|
+
def unique_identifier=(value)
|
104
|
+
@headers['NEWFILEUID'] = value
|
105
|
+
end
|
106
|
+
|
107
|
+
# OFX 1.0.2:: 2.2.7
|
108
|
+
def previous_unique_identifier
|
109
|
+
@headers['OLDFILEUID']
|
110
|
+
end
|
111
|
+
def previous_unique_identifier=(value)
|
112
|
+
@headers['OLDFILEUID'] = value
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|