ofx-parser 1.0.0
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.
- data/History.txt +4 -0
- data/Manifest.txt +12 -0
- data/README.txt +103 -0
- data/Rakefile +18 -0
- data/lib/class-extension.rb +154 -0
- data/lib/ofx-parser.rb +175 -0
- data/lib/ofx.rb +178 -0
- data/lib/sic.rb +1457 -0
- data/test/fixtures/banking.ofx.sgml +87 -0
- data/test/fixtures/creditcard.ofx.sgml +79 -0
- data/test/fixtures/with_spaces.ofx.sgml +28 -0
- data/test/test_ofx_parser.rb +244 -0
- metadata +77 -0
@@ -0,0 +1,87 @@
|
|
1
|
+
OFXHEADER:100
|
2
|
+
DATA:OFXSGML
|
3
|
+
VERSION:102
|
4
|
+
SECURITY:NONE
|
5
|
+
ENCODING:USASCII
|
6
|
+
CHARSET:1252
|
7
|
+
COMPRESSION:NONE
|
8
|
+
OLDFILEUID:NONE
|
9
|
+
NEWFILEUID:NONE
|
10
|
+
|
11
|
+
<OFX>
|
12
|
+
<SIGNONMSGSRSV1>
|
13
|
+
<SONRS>
|
14
|
+
<STATUS>
|
15
|
+
<CODE>0</CODE>
|
16
|
+
<SEVERITY>INFO</SEVERITY>
|
17
|
+
<MESSAGE>The user is authentic; operation succeeded.</MESSAGE>
|
18
|
+
</STATUS>
|
19
|
+
<DTSERVER>20070623142635.169[-5:CDT]</DTSERVER>
|
20
|
+
<LANGUAGE>ENG</LANGUAGE>
|
21
|
+
<FI>
|
22
|
+
<ORG>U.S. Bank</ORG>
|
23
|
+
<FID>1402</FID>
|
24
|
+
</FI>
|
25
|
+
<INTU.BID>1402</INTU.BID>
|
26
|
+
</SONRS>
|
27
|
+
</SIGNONMSGSRSV1>
|
28
|
+
<BANKMSGSRSV1>
|
29
|
+
<STMTTRNRS>
|
30
|
+
<TRNUID>9C24229A0077EAA50000011353C9E00743FC</TRNUID>
|
31
|
+
<STATUS>
|
32
|
+
<CODE>0</CODE>
|
33
|
+
<SEVERITY>INFO</SEVERITY>
|
34
|
+
</STATUS>
|
35
|
+
<STMTRS>
|
36
|
+
<CURDEF>USD</CURDEF>
|
37
|
+
<BANKACCTFROM>
|
38
|
+
<BANKID>033000033</BANKID>
|
39
|
+
<ACCTID>103333333333</ACCTID>
|
40
|
+
<ACCTTYPE>CHECKING</ACCTTYPE>
|
41
|
+
</BANKACCTFROM>
|
42
|
+
<BANKTRANLIST>
|
43
|
+
<DTSTART>20070604190000.000[-5:CDT]</DTSTART>
|
44
|
+
<DTEND>20070622190000.000[-5:CDT]</DTEND>
|
45
|
+
<STMTTRN>
|
46
|
+
<TRNTYPE>PAYMENT</TRNTYPE>
|
47
|
+
<DTPOSTED>20070606120000.000</DTPOSTED>
|
48
|
+
<TRNAMT>-11.11</TRNAMT>
|
49
|
+
<FITID>11111111 22</FITID>
|
50
|
+
<NAME>WEB AUTHORIZED PMT FOO INC</NAME>
|
51
|
+
<MEMO>Download from usbank.com. FOO INC</MEMO>
|
52
|
+
</STMTTRN>
|
53
|
+
<STMTTRN>
|
54
|
+
<TRNTYPE>CHECK</TRNTYPE>
|
55
|
+
<DTPOSTED>20070607120000.000</DTPOSTED>
|
56
|
+
<TRNAMT>-111.11</TRNAMT>
|
57
|
+
<FITID>22222A</FITID>
|
58
|
+
<CHECKNUM>0000009611</CHECKNUM>
|
59
|
+
<NAME>CHECK</NAME>
|
60
|
+
<MEMO>Download from usbank.com.</MEMO>
|
61
|
+
</STMTTRN>
|
62
|
+
<STMTTRN>
|
63
|
+
<TRNTYPE>DIRECTDEP</TRNTYPE>
|
64
|
+
<DTPOSTED>20070614120000.000</DTPOSTED>
|
65
|
+
<TRNAMT>1111.11</TRNAMT>
|
66
|
+
<FITID>X34AE33</FITID>
|
67
|
+
<NAME>ELECTRONIC DEPOSIT BAR INC</NAME>
|
68
|
+
<MEMO>Download from usbank.com. BAR INC</MEMO>
|
69
|
+
</STMTTRN>
|
70
|
+
<STMTTRN>
|
71
|
+
<TRNTYPE>CREDIT</TRNTYPE>
|
72
|
+
<DTPOSTED>20070619120000.000</DTPOSTED>
|
73
|
+
<TRNAMT>11.11</TRNAMT>
|
74
|
+
<FITID>8 8 9089743</FITID>
|
75
|
+
<NAME>ATM DEPOSIT US BANK ANYTOWNAS</NAME>
|
76
|
+
<MEMO>Download from usbank.com. US BANK ANYTOWN ASUS1</MEMO>
|
77
|
+
</STMTTRN>
|
78
|
+
</BANKTRANLIST>
|
79
|
+
<LEDGERBAL>
|
80
|
+
<BALAMT>1234.09</BALAMT>
|
81
|
+
<DTASOF>20070623142635.369[-5:CDT]</DTASOF>
|
82
|
+
</LEDGERBAL>
|
83
|
+
</STMTRS>
|
84
|
+
</STMTTRNRS>
|
85
|
+
</BANKMSGSRSV1>
|
86
|
+
</OFX>
|
87
|
+
|
@@ -0,0 +1,79 @@
|
|
1
|
+
OFXHEADER:100
|
2
|
+
DATA:OFXSGML
|
3
|
+
VERSION:102
|
4
|
+
SECURITY:NONE
|
5
|
+
ENCODING:USASCII
|
6
|
+
CHARSET:1252
|
7
|
+
COMPRESSION:NONE
|
8
|
+
OLDFILEUID:NONE
|
9
|
+
NEWFILEUID:NONE
|
10
|
+
|
11
|
+
<OFX>
|
12
|
+
<SIGNONMSGSRSV1>
|
13
|
+
<SONRS>
|
14
|
+
<STATUS>
|
15
|
+
<CODE>0</CODE>
|
16
|
+
<SEVERITY>INFO</SEVERITY>
|
17
|
+
</STATUS>
|
18
|
+
<DTSERVER>20070623192010</DTSERVER>
|
19
|
+
<LANGUAGE>ENG</LANGUAGE>
|
20
|
+
<FI>
|
21
|
+
<ORG>Citigroup</ORG>
|
22
|
+
<FID>24909</FID>
|
23
|
+
</FI>
|
24
|
+
<INTU.BID>24909</INTU.BID>
|
25
|
+
</SONRS>
|
26
|
+
</SIGNONMSGSRSV1>
|
27
|
+
<CREDITCARDMSGSRSV1>
|
28
|
+
<CCSTMTTRNRS>
|
29
|
+
<TRNUID>0</TRNUID>
|
30
|
+
<STATUS>
|
31
|
+
<CODE>0</CODE>
|
32
|
+
<SEVERITY>INFO</SEVERITY>
|
33
|
+
</STATUS>
|
34
|
+
<CCSTMTRS>
|
35
|
+
<CURDEF>USD</CURDEF>
|
36
|
+
<CCACCTFROM>
|
37
|
+
<ACCTID>XXXXXXXXXXXX1111</ACCTID>
|
38
|
+
</CCACCTFROM>
|
39
|
+
<BANKTRANLIST>
|
40
|
+
<DTSTART>20070509120000</DTSTART>
|
41
|
+
<DTEND>20070608120000</DTEND>
|
42
|
+
<STMTTRN>
|
43
|
+
<TRNTYPE>DEBIT</TRNTYPE>
|
44
|
+
<DTPOSTED>20070510170000</DTPOSTED>
|
45
|
+
<TRNAMT>-19.17</TRNAMT>
|
46
|
+
<FITID>xx</FITID>
|
47
|
+
<SIC>5912</SIC>
|
48
|
+
<NAME>WALGREEN 34638675 ANYTOWN</NAME>
|
49
|
+
</STMTTRN>
|
50
|
+
<STMTTRN>
|
51
|
+
<TRNTYPE>DEBIT</TRNTYPE>
|
52
|
+
<DTPOSTED>20070512170000</DTPOSTED>
|
53
|
+
<TRNAMT>-12.0</TRNAMT>
|
54
|
+
<FITID>yy-56</FITID>
|
55
|
+
<SIC>7933</SIC>
|
56
|
+
<NAME>SUNSET BOWL ANYTOWN</NAME>
|
57
|
+
</STMTTRN>
|
58
|
+
<STMTTRN>
|
59
|
+
<TRNTYPE>CREDIT</TRNTYPE>
|
60
|
+
<DTPOSTED>20070526170000</DTPOSTED>
|
61
|
+
<TRNAMT>11.01</TRNAMT>
|
62
|
+
<FITID>78-9</FITID>
|
63
|
+
<SIC>0000</SIC>
|
64
|
+
<NAME>ELECTRONIC PAYMENT-THANK YOU</NAME>
|
65
|
+
</STMTTRN>
|
66
|
+
</BANKTRANLIST>
|
67
|
+
<LEDGERBAL>
|
68
|
+
<BALAMT>-1111.01</BALAMT>
|
69
|
+
<DTASOF>20070623192013</DTASOF>
|
70
|
+
</LEDGERBAL>
|
71
|
+
<AVAILBAL>
|
72
|
+
<BALAMT>19000.99</BALAMT>
|
73
|
+
<DTASOF>20070623192013</DTASOF>
|
74
|
+
</AVAILBAL>
|
75
|
+
</CCSTMTRS>
|
76
|
+
</CCSTMTTRNRS>
|
77
|
+
</CREDITCARDMSGSRSV1>
|
78
|
+
</OFX>
|
79
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
OFXHEADER:100
|
2
|
+
DATA:OFXSGML
|
3
|
+
VERSION:102
|
4
|
+
SECURITY:NONE
|
5
|
+
ENCODING:USASCII
|
6
|
+
CHARSET:1252
|
7
|
+
COMPRESSION:NONE
|
8
|
+
OLDFILEUID:NONE
|
9
|
+
NEWFILEUID:NONE
|
10
|
+
|
11
|
+
<OFX>
|
12
|
+
<SIGNONMSGSRSV1>
|
13
|
+
<SONRS>
|
14
|
+
<STATUS>
|
15
|
+
<CODE> 0
|
16
|
+
<SEVERITY> INFO
|
17
|
+
<MESSAGE> The user is authentic; operation succeeded.
|
18
|
+
</STATUS>
|
19
|
+
<DTSERVER> 20070623142635.169[-5:CDT]
|
20
|
+
<LANGUAGE>ENG
|
21
|
+
<FI>
|
22
|
+
<ORG> U.S. Bank
|
23
|
+
<FID> 1402
|
24
|
+
</FI>
|
25
|
+
<INTU.BID>1402
|
26
|
+
</SONRS>
|
27
|
+
</SIGNONMSGSRSV1>
|
28
|
+
</OFX>
|
@@ -0,0 +1,244 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'ofx-parser'
|
3
|
+
|
4
|
+
class OfxParserTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
OFX_FILES = {}
|
7
|
+
|
8
|
+
fixtures_dir = File.dirname(__FILE__) + '/fixtures'
|
9
|
+
|
10
|
+
# Load up the xml files
|
11
|
+
Dir.open(fixtures_dir).each do |fn|
|
12
|
+
next unless fn =~ /\.ofx\.sgml$/
|
13
|
+
OFX_FILES[fn.scan(/^[^.]*/).to_s.to_sym] = File.read(fixtures_dir + "/#{fn}")
|
14
|
+
end
|
15
|
+
|
16
|
+
def setup
|
17
|
+
# empty ofx parser - useful for testing other methods independently
|
18
|
+
@parser = OfxParser::OfxParser
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_pre_process_strips_spaces
|
22
|
+
header, body = @parser.pre_process(OFX_FILES[:with_spaces])
|
23
|
+
|
24
|
+
assert_no_match(/>\s+.*?</, body, "should be no spaces after a tag close")
|
25
|
+
assert_no_match(/>.*?\s+</, body, "should be no spaces before a tag close")
|
26
|
+
assert_no_match(/>\s+</, body, "should be no spaces between two tags")
|
27
|
+
assert_match("The user is authentic; operation succeeded.", body, "content in tags should not be altered")
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_pre_process_header
|
31
|
+
header, body = @parser.pre_process(OFX_FILES[:with_spaces])
|
32
|
+
|
33
|
+
assert_equal 9, header.keys.size
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_parse_datetime
|
37
|
+
assert_equal DateTime.civil(2007, 6, 22, 19, 0, 0, Rational(-5,24)), @parser.parse_datetime('20070622190000.200[-5:CDT]')
|
38
|
+
assert_equal DateTime.civil(2007, 6, 22), @parser.parse_datetime('20070622')
|
39
|
+
assert_equal DateTime.civil(2007, 6, 22, 19, 0, 0), @parser.parse_datetime('20070622190000')
|
40
|
+
assert_equal DateTime.civil(2007, 6, 22, 19, 0, 0), @parser.parse_datetime('20070622190000.200')
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_sign_on
|
44
|
+
ofx = OfxParser::OfxParser.parse(OFX_FILES[:with_spaces])
|
45
|
+
|
46
|
+
assert_equal '0', ofx.sign_on.status.code
|
47
|
+
assert_equal 'INFO', ofx.sign_on.status.severity
|
48
|
+
assert_equal 'The user is authentic; operation succeeded.', ofx.sign_on.status.message
|
49
|
+
assert_equal 'Success', ofx.sign_on.status.code_desc
|
50
|
+
|
51
|
+
assert_equal DateTime.civil(2007,6,23,14,26,35,Rational(-5, 24)), ofx.sign_on.date
|
52
|
+
assert_equal 'ENG', ofx.sign_on.language
|
53
|
+
assert_equal 'U.S. Bank', ofx.sign_on.institute.name
|
54
|
+
assert_equal '1402', ofx.sign_on.institute.id
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_no_accounts
|
58
|
+
ofx = OfxParser::OfxParser.parse(OFX_FILES[:with_spaces])
|
59
|
+
|
60
|
+
assert_equal 0, ofx.accounts.size
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_banking
|
64
|
+
ofx = OfxParser::OfxParser.parse(OFX_FILES[:banking])
|
65
|
+
|
66
|
+
acct = ofx.bank_account
|
67
|
+
|
68
|
+
assert_equal '103333333333', acct.number
|
69
|
+
assert_equal '033000033', acct.routing_number
|
70
|
+
assert_equal :CHECKING, acct.type
|
71
|
+
assert_equal '1234.09', acct.balance
|
72
|
+
assert_equal 123409, acct.balance_in_pennies
|
73
|
+
assert_equal DateTime.civil(2007,6,23,14,26,35,Rational(-5, 24)), acct.balance_date
|
74
|
+
assert_equal '9C24229A0077EAA50000011353C9E00743FC', acct.transaction_uid
|
75
|
+
|
76
|
+
statement = acct.statement
|
77
|
+
|
78
|
+
assert_equal 'USD', statement.currency
|
79
|
+
assert_equal DateTime.civil(2007,6,4,19,0,0,Rational(-5, 24)), statement.start_date
|
80
|
+
assert_equal DateTime.civil(2007,6,22,19,0,0,Rational(-5, 24)), statement.end_date
|
81
|
+
|
82
|
+
transactions = statement.transactions
|
83
|
+
assert_equal 4, transactions.size
|
84
|
+
|
85
|
+
assert_equal :PAYMENT, transactions[0].type
|
86
|
+
assert_equal OfxParser::Transaction::TYPE[:PAYMENT], transactions[0].type_desc
|
87
|
+
assert_equal DateTime.civil(2007,6,6,12,0,0), transactions[0].date
|
88
|
+
assert_equal '-11.11', transactions[0].amount
|
89
|
+
assert_equal -1111, transactions[0].amount_in_pennies
|
90
|
+
assert_equal '11111111 22', transactions[0].fit_id
|
91
|
+
assert_equal nil, transactions[0].check_number
|
92
|
+
assert_equal nil, transactions[0].sic
|
93
|
+
assert_equal nil, transactions[0].sic_desc
|
94
|
+
assert_equal 'WEB AUTHORIZED PMT FOO INC', transactions[0].payee
|
95
|
+
assert_equal 'Download from usbank.com. FOO INC', transactions[0].memo
|
96
|
+
|
97
|
+
assert_equal :CHECK, transactions[1].type
|
98
|
+
assert_equal OfxParser::Transaction::TYPE[:CHECK], transactions[1].type_desc
|
99
|
+
assert_equal DateTime.civil(2007,6,7,12,0,0), transactions[1].date
|
100
|
+
assert_equal '-111.11', transactions[1].amount
|
101
|
+
assert_equal -11111, transactions[1].amount_in_pennies
|
102
|
+
assert_equal '22222A', transactions[1].fit_id
|
103
|
+
assert_equal '0000009611', transactions[1].check_number
|
104
|
+
assert_equal nil, transactions[1].sic
|
105
|
+
assert_equal nil, transactions[1].sic_desc
|
106
|
+
assert_equal 'CHECK', transactions[1].payee
|
107
|
+
assert_equal 'Download from usbank.com.', transactions[1].memo
|
108
|
+
|
109
|
+
assert_equal :DIRECTDEP, transactions[2].type
|
110
|
+
assert_equal OfxParser::Transaction::TYPE[:DIRECTDEP], transactions[2].type_desc
|
111
|
+
assert_equal DateTime.civil(2007,6,14,12,0,0), transactions[2].date
|
112
|
+
assert_equal '1111.11', transactions[2].amount
|
113
|
+
assert_equal 111111, transactions[2].amount_in_pennies
|
114
|
+
assert_equal 'X34AE33', transactions[2].fit_id
|
115
|
+
assert_equal nil, transactions[2].check_number
|
116
|
+
assert_equal nil, transactions[2].sic
|
117
|
+
assert_equal nil, transactions[2].sic_desc
|
118
|
+
assert_equal 'ELECTRONIC DEPOSIT BAR INC', transactions[2].payee
|
119
|
+
assert_equal 'Download from usbank.com. BAR INC', transactions[2].memo
|
120
|
+
|
121
|
+
assert_equal :CREDIT, transactions[3].type
|
122
|
+
assert_equal OfxParser::Transaction::TYPE[:CREDIT], transactions[3].type_desc
|
123
|
+
assert_equal DateTime.civil(2007,6,19,12,0,0), transactions[3].date
|
124
|
+
assert_equal '11.11', transactions[3].amount
|
125
|
+
assert_equal 1111, transactions[3].amount_in_pennies
|
126
|
+
assert_equal '8 8 9089743', transactions[3].fit_id
|
127
|
+
assert_equal nil, transactions[3].check_number
|
128
|
+
assert_equal nil, transactions[3].sic
|
129
|
+
assert_equal nil, transactions[3].sic_desc
|
130
|
+
assert_equal 'ATM DEPOSIT US BANK ANYTOWNAS', transactions[3].payee
|
131
|
+
assert_equal 'Download from usbank.com. US BANK ANYTOWN ASUS1', transactions[3].memo
|
132
|
+
|
133
|
+
assert_equal 1, ofx.accounts.size
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_creditcard
|
137
|
+
ofx = OfxParser::OfxParser.parse(OFX_FILES[:creditcard])
|
138
|
+
|
139
|
+
acct = ofx.credit_card
|
140
|
+
|
141
|
+
assert_equal 'XXXXXXXXXXXX1111', acct.number
|
142
|
+
assert_equal '19000.99', acct.remaining_credit
|
143
|
+
assert_equal 1900099, acct.remaining_credit_in_pennies
|
144
|
+
assert_equal DateTime.civil(2007,6,23,19,20,13), acct.remaining_credit_date
|
145
|
+
assert_equal '-1111.01', acct.balance
|
146
|
+
assert_equal -111101, acct.balance_in_pennies
|
147
|
+
assert_equal DateTime.civil(2007,6,23,19,20,13), acct.balance_date
|
148
|
+
assert_equal '0', acct.transaction_uid
|
149
|
+
|
150
|
+
statement = acct.statement
|
151
|
+
|
152
|
+
assert_equal 'USD', statement.currency
|
153
|
+
assert_equal DateTime.civil(2007,5,9,12,0,0), statement.start_date
|
154
|
+
assert_equal DateTime.civil(2007,6,8,12,0,0), statement.end_date
|
155
|
+
|
156
|
+
transactions = statement.transactions
|
157
|
+
assert_equal 3, transactions.size
|
158
|
+
|
159
|
+
assert_equal :DEBIT, transactions[0].type
|
160
|
+
assert_equal OfxParser::Transaction::TYPE[:DEBIT], transactions[0].type_desc
|
161
|
+
assert_equal DateTime.civil(2007,5,10,17,0,0), transactions[0].date
|
162
|
+
assert_equal '-19.17', transactions[0].amount
|
163
|
+
assert_equal -1917, transactions[0].amount_in_pennies
|
164
|
+
assert_equal 'xx', transactions[0].fit_id
|
165
|
+
assert_equal nil, transactions[0].check_number
|
166
|
+
assert_equal '5912', transactions[0].sic
|
167
|
+
assert_equal OfxParser::Sic::CODES['5912'], transactions[0].sic_desc
|
168
|
+
assert_equal 'WALGREEN 34638675 ANYTOWN', transactions[0].payee
|
169
|
+
assert_equal '', transactions[0].memo
|
170
|
+
|
171
|
+
assert_equal :DEBIT, transactions[1].type
|
172
|
+
assert_equal OfxParser::Transaction::TYPE[:DEBIT], transactions[1].type_desc
|
173
|
+
assert_equal DateTime.civil(2007,5,12,17,0,0), transactions[1].date
|
174
|
+
assert_equal '-12.0', transactions[1].amount
|
175
|
+
assert_equal -1200, transactions[1].amount_in_pennies
|
176
|
+
assert_equal 'yy-56', transactions[1].fit_id
|
177
|
+
assert_equal nil, transactions[1].check_number
|
178
|
+
assert_equal '7933', transactions[1].sic
|
179
|
+
assert_equal OfxParser::Sic::CODES['7933'], transactions[1].sic_desc
|
180
|
+
assert_equal 'SUNSET BOWL ANYTOWN', transactions[1].payee
|
181
|
+
assert_equal '', transactions[1].memo
|
182
|
+
|
183
|
+
assert_equal :CREDIT, transactions[2].type
|
184
|
+
assert_equal OfxParser::Transaction::TYPE[:CREDIT], transactions[2].type_desc
|
185
|
+
assert_equal DateTime.civil(2007,5,26,17,0,0), transactions[2].date
|
186
|
+
assert_equal '11.01', transactions[2].amount
|
187
|
+
assert_equal 1101, transactions[2].amount_in_pennies
|
188
|
+
assert_equal '78-9', transactions[2].fit_id
|
189
|
+
assert_equal nil, transactions[2].check_number
|
190
|
+
assert_equal '0000', transactions[2].sic
|
191
|
+
assert_equal nil, transactions[2].sic_desc
|
192
|
+
assert_equal 'ELECTRONIC PAYMENT-THANK YOU', transactions[2].payee
|
193
|
+
assert_equal '', transactions[2].memo
|
194
|
+
|
195
|
+
assert_equal 1, ofx.accounts.size
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_monetary_support_call
|
199
|
+
t = OfxParser::Transaction.new
|
200
|
+
t.amount = '-11.1'
|
201
|
+
|
202
|
+
assert_nothing_raised { t.amount_in_pennies }
|
203
|
+
assert_raise(NoMethodError) { t.amount_in_whatever }
|
204
|
+
|
205
|
+
assert t.respond_to?(:amount_in_pennies)
|
206
|
+
assert !t.respond_to?(:amount_in_whatever)
|
207
|
+
|
208
|
+
|
209
|
+
end
|
210
|
+
|
211
|
+
class X
|
212
|
+
include OfxParser::MonetarySupport
|
213
|
+
attr_accessor :amount
|
214
|
+
monetary_vars :amount
|
215
|
+
end
|
216
|
+
|
217
|
+
def test_original_method
|
218
|
+
x = X.new
|
219
|
+
assert_equal :a_b, x.original_method('a_b_in_pennies')
|
220
|
+
assert_equal :a, x.original_method('a_in_pennies')
|
221
|
+
end
|
222
|
+
|
223
|
+
def test_for_pennies
|
224
|
+
amounts = {
|
225
|
+
'-11.1' => -111,
|
226
|
+
'-11.110' => -1111,
|
227
|
+
'-11.11101' => -1111,
|
228
|
+
'11.11' => 1111,
|
229
|
+
'11,11' => 1111,
|
230
|
+
'1' => 100,
|
231
|
+
'1.0' => 100,
|
232
|
+
'-1.0' => -100,
|
233
|
+
'' => nil
|
234
|
+
}
|
235
|
+
|
236
|
+
x = X.new
|
237
|
+
|
238
|
+
amounts.each do |actual, expected|
|
239
|
+
x.amount = actual
|
240
|
+
assert_equal expected, x.amount_in_pennies, "#{actual.inspect} should give #{expected.inspect}"
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
end
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.2
|
3
|
+
specification_version: 1
|
4
|
+
name: ofx-parser
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 1.0.0
|
7
|
+
date: 2007-06-26 00:00:00 -07:00
|
8
|
+
summary: ofx-parser is a ruby library for parsing OFX 1.x data.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: andy@tinnedfruit.org
|
12
|
+
homepage: http://ofx-parser.rubyforge.org/
|
13
|
+
rubyforge_project: ofx-parser
|
14
|
+
description: "== DESCRIPTION: ofx-parser is a ruby library to parse a realistic subset of the lengthy OFX 1.x specification. == FEATURES/PROBLEMS: * Reads OFX responses - i.e. those downloaded from financial institutions and puts it into a usable object graph. * Supports the 3 main message sets: banking, credit card and investment accounts, as well as the required 'sign on' set. * Knows about SIC codes - if your institution provides them. See http://www.eeoc.gov/stats/jobpat/siccodes.html * Monetary amounts can be retrieved either as a raw string, or in pennies. * Supports OFX timestamps."
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors:
|
30
|
+
- Andrew A. Smith
|
31
|
+
files:
|
32
|
+
- History.txt
|
33
|
+
- Manifest.txt
|
34
|
+
- README.txt
|
35
|
+
- Rakefile
|
36
|
+
- lib/class-extension.rb
|
37
|
+
- lib/ofx-parser.rb
|
38
|
+
- lib/ofx.rb
|
39
|
+
- lib/sic.rb
|
40
|
+
- test/fixtures/banking.ofx.sgml
|
41
|
+
- test/fixtures/creditcard.ofx.sgml
|
42
|
+
- test/fixtures/with_spaces.ofx.sgml
|
43
|
+
- test/test_ofx_parser.rb
|
44
|
+
test_files:
|
45
|
+
- test/test_ofx_parser.rb
|
46
|
+
rdoc_options:
|
47
|
+
- --main
|
48
|
+
- README.txt
|
49
|
+
extra_rdoc_files:
|
50
|
+
- History.txt
|
51
|
+
- Manifest.txt
|
52
|
+
- README.txt
|
53
|
+
executables: []
|
54
|
+
|
55
|
+
extensions: []
|
56
|
+
|
57
|
+
requirements: []
|
58
|
+
|
59
|
+
dependencies:
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: hpricot
|
62
|
+
version_requirement:
|
63
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0.6"
|
68
|
+
version:
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: hoe
|
71
|
+
version_requirement:
|
72
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 1.2.1
|
77
|
+
version:
|