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
@@ -0,0 +1,186 @@
|
|
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 SignupMessageSet < MessageSet
|
20
|
+
def ofx_102_message_set_name
|
21
|
+
'SIGNUP'
|
22
|
+
end
|
23
|
+
|
24
|
+
def request_or_response_from_ofx_102_tag_name(response_or_request_name)
|
25
|
+
case response_or_request_name
|
26
|
+
when "ACCTINFOTRNRQ" then AccountInformationRequest.new
|
27
|
+
when "ACCTINFOTRNRS" then AccountInformationResponse.new
|
28
|
+
else raise NotImplementedError, response_or_request_name
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.from_ofx_102_hash(message_set_hash)
|
33
|
+
message_set = SignupMessageSet.new
|
34
|
+
|
35
|
+
message_set_hash.each_pair() do |transaction_name, transaction_hash|
|
36
|
+
case transaction_name
|
37
|
+
when "ACCTINFOTRNRQ" then message_set.requests << AccountInformationRequest.from_ofx_102_hash(transaction_hash)
|
38
|
+
when "ACCTINFOTRNRS" then message_set.responses << AccountInformationResponse.from_ofx_102_hash(transaction_hash)
|
39
|
+
else raise NotImplementedError, transaction_name
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
return message_set
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class SignupMessageSetProfile < MessageSetProfile
|
48
|
+
def self.from_ofx_102_hash(message_set_description_hash)
|
49
|
+
profile = OFX::SignupMessageSetProfile.new
|
50
|
+
profile.message_set_class = OFX::SignupMessageSet
|
51
|
+
profile.from_ofx_102_hash(message_set_description_hash)
|
52
|
+
|
53
|
+
if (message_set_description_hash['CLIENTENROLL'])
|
54
|
+
profile.enrollment = OFX::ClientEnrollment.new((message_set_description_hash['CLIENTENROLL']['ACCTREQUIRED'] == 'Y'))
|
55
|
+
elsif (message_set_description_hash['WEBENROLL'])
|
56
|
+
profile.enrollment = OFX::WebEnrollment.new(URI.parse(message_set_description_hash['WEBENROLL']['URL']))
|
57
|
+
elsif (message_set_description_hash['OTHERENROLL'])
|
58
|
+
profile.enrollment = OFX::OtherEnrollment.new(message_set_description_hash['OTHERENROLL']['MESSAGE'])
|
59
|
+
end
|
60
|
+
|
61
|
+
profile.user_information_changes_allowed = message_set_description_hash['CHGUSERINFO'] == 'Y'
|
62
|
+
profile.available_account_requests_allowed = message_set_description_hash['AVAILACCTS'] == 'Y'
|
63
|
+
profile.service_activation_requests_allowed = message_set_description_hash['CLIENTACTREQ'] == 'Y'
|
64
|
+
|
65
|
+
profile
|
66
|
+
end
|
67
|
+
end
|
68
|
+
class SignupMessageSetProfile < MessageSetProfile
|
69
|
+
def self.message_set_class
|
70
|
+
SignupMessageSet
|
71
|
+
end
|
72
|
+
|
73
|
+
attr_accessor :enrollment
|
74
|
+
end
|
75
|
+
class Enrollment
|
76
|
+
end
|
77
|
+
class ClientEnrollment < Enrollment
|
78
|
+
attr_accessor :account_number_required
|
79
|
+
def account_number_required?
|
80
|
+
@account_number_required
|
81
|
+
end
|
82
|
+
end
|
83
|
+
class WebEnrollment < Enrollment
|
84
|
+
attr_accessor :url
|
85
|
+
end
|
86
|
+
class OtherEnrollment < Enrollment
|
87
|
+
attr_accessor :message
|
88
|
+
end
|
89
|
+
|
90
|
+
class AccountInformationRequest < TransactionalRequest
|
91
|
+
def ofx_102_name
|
92
|
+
'ACCTINFO'
|
93
|
+
end
|
94
|
+
|
95
|
+
def ofx_102_request_body
|
96
|
+
" <DTACCTUP>#{date_of_last_account_update.to_ofx_102_s}"
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.from_ofx_102_hash(request_hash)
|
100
|
+
raise NotImplementedError
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
class AccountInformationResponse < TransactionalResponse
|
105
|
+
def ofx_102_name
|
106
|
+
'ACCTINFO'
|
107
|
+
end
|
108
|
+
|
109
|
+
def ofx_102_response_body
|
110
|
+
raise NotImplementedError
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.from_ofx_102_hash(transaction_hash)
|
114
|
+
response = AccountInformationResponse.new
|
115
|
+
|
116
|
+
response.transaction_identifier = transaction_hash['TRNUID']
|
117
|
+
response.status = OFX::Status.from_ofx_102_hash(transaction_hash['STATUS'])
|
118
|
+
|
119
|
+
response_hash = transaction_hash['ACCTINFORS']
|
120
|
+
response.date_of_last_account_update = response_hash['DTACCTUP'].to_datetime
|
121
|
+
|
122
|
+
response.accounts = []
|
123
|
+
account_infos = response_hash['ACCTINFO'] if response_hash['ACCTINFO'].kind_of?(Array)
|
124
|
+
account_infos = [response_hash['ACCTINFO']] if response_hash['ACCTINFO'].kind_of?(Hash)
|
125
|
+
account_infos = [] unless account_infos
|
126
|
+
account_infos.each do |account_info_hash|
|
127
|
+
account_info = OFX::AccountInformation.new
|
128
|
+
account_info.description = account_info_hash['DESC']
|
129
|
+
account_info.phone_number = account_info_hash['PHONE']
|
130
|
+
|
131
|
+
if account_info_hash['BANKACCTINFO']
|
132
|
+
bank_acct_info_hash = account_info_hash['BANKACCTINFO']
|
133
|
+
account_info.account_information = OFX::BankingAccountInformation.new
|
134
|
+
|
135
|
+
acct_from_hash = bank_acct_info_hash['BANKACCTFROM']
|
136
|
+
account_info.account_information.account = OFX::BankingAccount.new
|
137
|
+
account_info.account_information.account.bank_identifier = acct_from_hash['BANKID']
|
138
|
+
account_info.account_information.account.branch_identifier = acct_from_hash['BRANCHID']
|
139
|
+
account_info.account_information.account.account_identifier = acct_from_hash['ACCTID']
|
140
|
+
account_info.account_information.account.account_type = case acct_from_hash['ACCTTYPE']
|
141
|
+
when 'CHECKING' then :checking
|
142
|
+
when 'SAVINGS' then :savings
|
143
|
+
when 'MONEYMRKT' then :money_market
|
144
|
+
when 'CREDITLINE' then :line_of_credit
|
145
|
+
else raise NotImplementedError
|
146
|
+
end
|
147
|
+
account_info.account_information.account.account_key = acct_from_hash['ACCTKEY']
|
148
|
+
|
149
|
+
account_info.account_information.supports_transaction_detail_downloads = bank_acct_info_hash['SUPTXDL'] == 'Y'
|
150
|
+
account_info.account_information.transfer_source = bank_acct_info_hash['XFERSRC'] == 'Y'
|
151
|
+
account_info.account_information.transfer_destination = bank_acct_info_hash['XFERDEST'] == 'Y'
|
152
|
+
account_info.account_information.status = case bank_acct_info_hash['SVCSTATUS']
|
153
|
+
when 'AVAIL' then :available
|
154
|
+
when 'PEND' then :pending
|
155
|
+
when 'ACTIVE' then :active
|
156
|
+
else raise NotImplementedError
|
157
|
+
end
|
158
|
+
elsif account_info_hash['CCACCTINFO']
|
159
|
+
cc_acct_info_hash = account_info_hash['CCACCTINFO']
|
160
|
+
account_info.account_information = OFX::CreditCardAccountInformation.new
|
161
|
+
|
162
|
+
acct_from_hash = cc_acct_info_hash['CCACCTFROM']
|
163
|
+
account_info.account_information.account = OFX::CreditCardAccount.new
|
164
|
+
account_info.account_information.account.account_identifier = acct_from_hash['ACCTID']
|
165
|
+
account_info.account_information.account.account_key = acct_from_hash['ACCTKEY']
|
166
|
+
|
167
|
+
account_info.account_information.supports_transaction_detail_downloads = cc_acct_info_hash['SUPTXDL'] == 'Y'
|
168
|
+
account_info.account_information.transfer_source = cc_acct_info_hash['XFERSRC'] == 'Y'
|
169
|
+
account_info.account_information.transfer_destination = cc_acct_info_hash['XFERDEST'] == 'Y'
|
170
|
+
account_info.account_information.status = case cc_acct_info_hash['SVCSTATUS']
|
171
|
+
when 'AVAIL' then :available
|
172
|
+
when 'PEND' then :pending
|
173
|
+
when 'ACTIVE' then :active
|
174
|
+
else raise NotImplementedError
|
175
|
+
end
|
176
|
+
else
|
177
|
+
raise NotImplementedError
|
178
|
+
end
|
179
|
+
|
180
|
+
response.accounts << account_info
|
181
|
+
end
|
182
|
+
|
183
|
+
response
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
@@ -0,0 +1,54 @@
|
|
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 Balance
|
20
|
+
def self.from_ofx_102_hash(balance_hash)
|
21
|
+
balance = Balance.new
|
22
|
+
|
23
|
+
balance.amount = balance_hash['BALAMT']
|
24
|
+
balance.as_of = balance_hash['DTASOF'].to_datetime
|
25
|
+
|
26
|
+
balance
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class Transaction
|
31
|
+
def self.ofx_102_transaction_type_name_to_transaction_type(transaction_type_name)
|
32
|
+
case transaction_type_name
|
33
|
+
when 'CREDIT' then :credit
|
34
|
+
when 'DEBIT' then :debit
|
35
|
+
when 'INT' then :interest
|
36
|
+
when 'DIV' then :dividend
|
37
|
+
when 'FEE' then :fee
|
38
|
+
when 'SRVCHG' then :service_charge
|
39
|
+
when 'DEP' then :deposit
|
40
|
+
when 'ATM' then :automated_teller_machine
|
41
|
+
when 'POS' then :point_of_sale
|
42
|
+
when 'XFER' then :transfer
|
43
|
+
when 'CHECK' then :check
|
44
|
+
when 'PAYMENT' then :electronic_payment
|
45
|
+
when 'CASH' then :cash_withdrawal
|
46
|
+
when 'DIRECTDEP' then :direct_deposit
|
47
|
+
when 'DIRECTDEBIT' then :direct_debit
|
48
|
+
when 'REPEATPMT' then :repeating_payment
|
49
|
+
when 'OTHER' then :other
|
50
|
+
else raise NotImplementedError
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -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 Status
|
20
|
+
def self.from_ofx_102_hash(status_hash)
|
21
|
+
return OFX::Status.from_numerical_code_severity_and_message(status_hash['CODE'].to_i,
|
22
|
+
case status_hash['SEVERITY']
|
23
|
+
when 'INFO' then :information
|
24
|
+
when 'WARN' then :warning
|
25
|
+
when 'ERROR' then :error
|
26
|
+
end,
|
27
|
+
status_hash['MESSAGE'])
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -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 WireFundsTransferMessageSet < MessageSet
|
20
|
+
end
|
21
|
+
|
22
|
+
class WireFundsTransferMessageSetProfile < MessageSetProfile
|
23
|
+
def self.from_ofx_102_hash(message_set_description_hash)
|
24
|
+
profile = OFX::WireFundsTransferMessageSetProfile.new
|
25
|
+
profile.message_set_class = OFX::WireFundsTransferMessageSet
|
26
|
+
profile.from_ofx_102_hash(message_set_description_hash)
|
27
|
+
profile
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,125 @@
|
|
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 BankingMessageSet < MessageSet
|
20
|
+
def precedence
|
21
|
+
3
|
22
|
+
end
|
23
|
+
def version
|
24
|
+
1
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class BankingMessageSetProfile < MessageSetProfile
|
29
|
+
def self.message_set_class
|
30
|
+
OFX::BankingMessageSet
|
31
|
+
end
|
32
|
+
|
33
|
+
attr_accessor :invalid_account_types
|
34
|
+
attr_accessor :closing_statement_available
|
35
|
+
def closing_statement_available?
|
36
|
+
closing_statement_available
|
37
|
+
end
|
38
|
+
|
39
|
+
attr_accessor :intrabank_transfer_profile
|
40
|
+
attr_accessor :stop_check_profile
|
41
|
+
attr_accessor :email_profile
|
42
|
+
end
|
43
|
+
class IntrabankTransferProfile
|
44
|
+
attr_accessor :processing_days_off
|
45
|
+
attr_accessor :processing_end_time_of_day
|
46
|
+
attr_accessor :supports_scheduled_transfers
|
47
|
+
def supports_scheduled_transfers?
|
48
|
+
supports_scheduled_transfers
|
49
|
+
end
|
50
|
+
attr_accessor :supports_recurring_transfers
|
51
|
+
def supports_recurring_transfers?
|
52
|
+
supports_recurring_transfers
|
53
|
+
end
|
54
|
+
attr_accessor :supports_modification_of_transfers
|
55
|
+
def supports_modification_of_transfers?
|
56
|
+
supports_modification_of_transfers
|
57
|
+
end
|
58
|
+
attr_accessor :supports_modification_of_models
|
59
|
+
def supports_modification_of_models?
|
60
|
+
supports_modification_of_models
|
61
|
+
end
|
62
|
+
attr_accessor :model_window
|
63
|
+
attr_accessor :number_of_days_early_funds_are_withdrawn
|
64
|
+
attr_accessor :default_number_of_days_to_pay
|
65
|
+
end
|
66
|
+
class StopCheckProfile
|
67
|
+
attr_accessor :processing_days_off
|
68
|
+
attr_accessor :processing_end_time_of_day
|
69
|
+
attr_accessor :can_stop_a_range_of_checks
|
70
|
+
def can_stop_a_range_of_checks?
|
71
|
+
can_stop_a_range_of_checks
|
72
|
+
end
|
73
|
+
attr_accessor :can_stop_checks_by_description
|
74
|
+
def can_stop_checks_by_description?
|
75
|
+
can_stop_checks_by_description
|
76
|
+
end
|
77
|
+
attr_accessor :default_stop_check_fee
|
78
|
+
end
|
79
|
+
class BankingEmailProfile
|
80
|
+
attr_accessor :supports_banking_email
|
81
|
+
def supports_banking_email?
|
82
|
+
supports_banking_email
|
83
|
+
end
|
84
|
+
attr_accessor :supports_notifications
|
85
|
+
def supports_notifications?
|
86
|
+
supports_notifications
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
class BankingAccount
|
91
|
+
attr_accessor :bank_identifier
|
92
|
+
attr_accessor :branch_identifier
|
93
|
+
attr_accessor :account_identifier
|
94
|
+
attr_accessor :account_type
|
95
|
+
attr_accessor :account_key
|
96
|
+
end
|
97
|
+
class BankingAccountInformation
|
98
|
+
attr_accessor :account
|
99
|
+
attr_accessor :supports_transaction_detail_downloads
|
100
|
+
attr_accessor :transfer_source
|
101
|
+
attr_accessor :transfer_destination
|
102
|
+
attr_accessor :status
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
class BankingStatementRequest < TransactionalRequest
|
107
|
+
attr_accessor :account
|
108
|
+
attr_accessor :include_transactions
|
109
|
+
def include_transactions?
|
110
|
+
include_transactions
|
111
|
+
end
|
112
|
+
attr_accessor :included_range
|
113
|
+
end
|
114
|
+
class BankingStatementResponse < TransactionalResponse
|
115
|
+
attr_accessor :default_currency
|
116
|
+
attr_accessor :account
|
117
|
+
attr_accessor :marketing_information
|
118
|
+
|
119
|
+
attr_accessor :ledger_balance
|
120
|
+
attr_accessor :available_balance
|
121
|
+
|
122
|
+
attr_accessor :transaction_range
|
123
|
+
attr_accessor :transactions
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,104 @@
|
|
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 CreditCardStatementMessageSet < MessageSet
|
20
|
+
def precedence
|
21
|
+
4
|
22
|
+
end
|
23
|
+
def version
|
24
|
+
1
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class CreditCardStatementMessageSetProfile < MessageSetProfile
|
29
|
+
def self.message_set_class
|
30
|
+
CreditCardStatementMessageSet
|
31
|
+
end
|
32
|
+
|
33
|
+
attr_accessor :closing_statement_available
|
34
|
+
def closing_statement_available?
|
35
|
+
closing_statement_available
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class CreditCardAccount
|
40
|
+
attr_accessor :account_identifier
|
41
|
+
attr_accessor :account_key
|
42
|
+
end
|
43
|
+
class CreditCardAccountInformation
|
44
|
+
attr_accessor :account
|
45
|
+
attr_accessor :supports_transaction_detail_downloads
|
46
|
+
attr_accessor :transfer_source
|
47
|
+
attr_accessor :transfer_destination
|
48
|
+
attr_accessor :status
|
49
|
+
end
|
50
|
+
|
51
|
+
class CreditCardStatementRequest < TransactionalRequest
|
52
|
+
attr_accessor :account
|
53
|
+
attr_accessor :include_transactions
|
54
|
+
def include_transactions?
|
55
|
+
include_transactions
|
56
|
+
end
|
57
|
+
attr_accessor :included_range
|
58
|
+
end
|
59
|
+
class CreditCardStatementResponse < TransactionalResponse
|
60
|
+
attr_accessor :default_currency
|
61
|
+
attr_accessor :account
|
62
|
+
attr_accessor :marketing_information
|
63
|
+
|
64
|
+
attr_accessor :ledger_balance
|
65
|
+
attr_accessor :available_balance
|
66
|
+
|
67
|
+
attr_accessor :transaction_range
|
68
|
+
attr_accessor :transactions
|
69
|
+
end
|
70
|
+
|
71
|
+
class CreditCardClosingStatementRequest < TransactionalRequest
|
72
|
+
attr_accessor :account
|
73
|
+
attr_accessor :statement_range
|
74
|
+
end
|
75
|
+
class CreditCardClosingStatementResponse < TransactionalResponse
|
76
|
+
attr_accessor :default_currency
|
77
|
+
attr_accessor :account
|
78
|
+
|
79
|
+
attr_accessor :statements
|
80
|
+
end
|
81
|
+
class CreditCardClosingStatement
|
82
|
+
attr_accessor :currency
|
83
|
+
|
84
|
+
attr_accessor :finanical_institution_transaction_identifier
|
85
|
+
attr_accessor :statement_range
|
86
|
+
attr_accessor :next_statement_close
|
87
|
+
|
88
|
+
attr_accessor :opening_balance
|
89
|
+
attr_accessor :closing_balance
|
90
|
+
|
91
|
+
attr_accessor :payment_due_date
|
92
|
+
attr_accessor :minimum_payment_due
|
93
|
+
|
94
|
+
attr_accessor :finance_charge
|
95
|
+
attr_accessor :total_of_payments_and_charges
|
96
|
+
attr_accessor :total_of_purchases_and_advances
|
97
|
+
attr_accessor :debit_adjustements
|
98
|
+
attr_accessor :credit_limit
|
99
|
+
|
100
|
+
attr_accessor :transaction_range
|
101
|
+
|
102
|
+
attr_accessor :marketing_information
|
103
|
+
end
|
104
|
+
end
|