ofx_for_ruby 0.1.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.
Files changed (74) hide show
  1. data/.externalToolBuilders/Rebuild parsers.launch +10 -0
  2. data/.gitignore +9 -0
  3. data/.loadpath +5 -0
  4. data/.project +27 -0
  5. data/COPYING +674 -0
  6. data/Gemfile +2 -0
  7. data/README +47 -0
  8. data/RELEASE_NOTES +45 -0
  9. data/Rakefile +63 -0
  10. data/lib/ofx.rb +60 -0
  11. data/lib/ofx/1.0.2/banking_message_set.rb +261 -0
  12. data/lib/ofx/1.0.2/credit_card_statement_message_set.rb +269 -0
  13. data/lib/ofx/1.0.2/document.rb +34 -0
  14. data/lib/ofx/1.0.2/email_message_set.rb +34 -0
  15. data/lib/ofx/1.0.2/financial_institution_profile_message_set.rb +155 -0
  16. data/lib/ofx/1.0.2/header.rb +48 -0
  17. data/lib/ofx/1.0.2/interbank_funds_transfer_message_set.rb +30 -0
  18. data/lib/ofx/1.0.2/investment_security_list_message_set.rb +30 -0
  19. data/lib/ofx/1.0.2/investment_statement_message_set.rb +30 -0
  20. data/lib/ofx/1.0.2/lexer.rb +135 -0
  21. data/lib/ofx/1.0.2/message_set.rb +165 -0
  22. data/lib/ofx/1.0.2/ofx_102.racc +90 -0
  23. data/lib/ofx/1.0.2/ofx_102.rex +65 -0
  24. data/lib/ofx/1.0.2/parser.rb +215 -0
  25. data/lib/ofx/1.0.2/payment_message_set.rb +30 -0
  26. data/lib/ofx/1.0.2/serializer.rb +114 -0
  27. data/lib/ofx/1.0.2/signon_message_set.rb +121 -0
  28. data/lib/ofx/1.0.2/signup_message_set.rb +186 -0
  29. data/lib/ofx/1.0.2/statements.rb +54 -0
  30. data/lib/ofx/1.0.2/status.rb +30 -0
  31. data/lib/ofx/1.0.2/wire_funds_transfer_message_set.rb +30 -0
  32. data/lib/ofx/banking_message_set.rb +125 -0
  33. data/lib/ofx/credit_card_statement_message_set.rb +104 -0
  34. data/lib/ofx/document.rb +30 -0
  35. data/lib/ofx/email_message_set.rb +42 -0
  36. data/lib/ofx/file_unique_identifier.rb +28 -0
  37. data/lib/ofx/financial_client.rb +76 -0
  38. data/lib/ofx/financial_institution.rb +83 -0
  39. data/lib/ofx/financial_institution_profile_message_set.rb +67 -0
  40. data/lib/ofx/header.rb +115 -0
  41. data/lib/ofx/http/cacert.pem +3509 -0
  42. data/lib/ofx/http/ofx_http_client.rb +84 -0
  43. data/lib/ofx/interbank_funds_transfer_message_set.rb +33 -0
  44. data/lib/ofx/investment_security_list_message_set.rb +33 -0
  45. data/lib/ofx/investment_statement_message_set.rb +33 -0
  46. data/lib/ofx/message_set.rb +78 -0
  47. data/lib/ofx/payment_message_set.rb +33 -0
  48. data/lib/ofx/serializer.rb +39 -0
  49. data/lib/ofx/signon_message_set.rb +141 -0
  50. data/lib/ofx/signup_message_set.rb +84 -0
  51. data/lib/ofx/statements.rb +49 -0
  52. data/lib/ofx/status.rb +100 -0
  53. data/lib/ofx/transaction_unique_identifier.rb +28 -0
  54. data/lib/ofx/version.rb +82 -0
  55. data/lib/ofx/wire_funds_transfer_message_set.rb +33 -0
  56. data/ofx_for_ruby.gemspec +25 -0
  57. data/planning/OFX Specification completion.ods +0 -0
  58. data/test/capital_one/capital_one_helper.rb +77 -0
  59. data/test/capital_one/fixtures/README +10 -0
  60. data/test/capital_one/fixtures/fipid-5599.xml +98 -0
  61. data/test/capital_one/test_banking_statement.rb +108 -0
  62. data/test/capital_one/test_financial_institution_profile.rb +295 -0
  63. data/test/capital_one/test_ofx_http_client.rb +72 -0
  64. data/test/capital_one/test_signup_account_information.rb +100 -0
  65. data/test/citi/citi_helper.rb +77 -0
  66. data/test/citi/fixtures/README +9 -0
  67. data/test/citi/fixtures/fipid-6642.xml +98 -0
  68. data/test/citi/test_credit_card_statement.rb +159 -0
  69. data/test/citi/test_financial_institution_profile.rb +231 -0
  70. data/test/citi/test_ofx_http_client.rb +71 -0
  71. data/test/citi/test_signup_account_information.rb +85 -0
  72. data/test/test_helper.rb +4 -0
  73. data/test/test_ofx_version.rb +141 -0
  74. 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