ofxparser 1.0.0 → 1.0.2a

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 (4) hide show
  1. data/History.txt +4 -0
  2. data/lib/ofx.rb +6 -3
  3. data/lib/ofxparser.rb +35 -4
  4. metadata +6 -6
data/History.txt CHANGED
@@ -2,3 +2,7 @@
2
2
 
3
3
  * Forked from aasmith's ofx-parser v1.0.2. My initial build of positions for investment accounts.
4
4
 
5
+ === 1.0.2 / 2011-05-27
6
+
7
+ * Added stock transactions
8
+
data/lib/ofx.rb CHANGED
@@ -93,7 +93,7 @@ module OfxParser
93
93
  end
94
94
 
95
95
  class InvestmentAccount < Account
96
- attr_accessor :broker_id, :positions, :margin_balance, :short_balance, :cash_balance
96
+ attr_accessor :broker_id, :positions, :margin_balance, :short_balance, :cash_balance, :availcash, :balances
97
97
 
98
98
  # include MonetarySupport
99
99
  # monetary_vars :margin_balance, :short_balance, :cash_balance
@@ -101,7 +101,7 @@ module OfxParser
101
101
 
102
102
 
103
103
  class Statement
104
- attr_accessor :currency, :transactions, :start_date, :end_date, :stock_positions, :opt_positions
104
+ attr_accessor :currency, :transactions, :start_date, :end_date, :stock_positions, :opt_positions, :stock_transactions
105
105
  end
106
106
 
107
107
  class Transaction
@@ -153,10 +153,13 @@ module OfxParser
153
153
  attr_accessor :uniqueid, :uniqueid_type, :heldinacct, :type, :units, :unitprice, :pricedate, :memo
154
154
  end
155
155
 
156
- class Opt_Position
156
+ class Opt_Position
157
157
  attr_accessor :uniqueid, :uniqueid_type, :heldinacct, :type, :units, :unitprice, :pricedate, :memo, :mktval
158
158
  end
159
159
 
160
+ class Stock_Transaction
161
+ attr_accessor :transid, :tradedate, :settledate, :uniqueid, :uniqueid_type, :units, :unitprice, :commission, :total, :subacctsec, ,:subacctfund,:type
162
+ end
160
163
 
161
164
  # Status of a sign on
162
165
  class Status
data/lib/ofxparser.rb CHANGED
@@ -7,7 +7,7 @@ require 'date'
7
7
  end
8
8
 
9
9
  module OfxParser
10
- VERSION = '1.0.0'
10
+ VERSION = '1.0.2a'
11
11
 
12
12
  class OfxParser
13
13
 
@@ -181,11 +181,19 @@ module OfxParser
181
181
  def self.build_investment(doc)
182
182
  acct = InvestmentAccount.new
183
183
  acct.broker_id=(doc/"INVSTMTRS/INVACCTFROM/BROKERID").inner_text
184
- acct.cash_balance=(doc/"INVSTMTRS/INVBAL/AVAILCASH").inner_text
185
-
184
+ acct.availcash = (doc/"INVSTMTRS/INVBAL/AVAILCASH").inner_text
185
+ acct.margin_balance = (doc/"INVSTMTRS/INVBAL/MARGINBALANCE").inner_text
186
+ acct.short_balance = (doc/"INVSTMTRS/INVBAL/SHORTBALANCE").inner_text
187
+
186
188
  statement = Statement.new
187
189
  acct.statement=statement
188
-
190
+
191
+
192
+
193
+ #-----------------------------------------------------------------------
194
+ # Ideally we wouldn't need 2 separate classes for different types of positions/transactions.
195
+ # Need to find some way to parse informaton based on "POS****" or "BUY****"
196
+
189
197
  statement.stock_positions = (doc/"INVSTMTRS/INVPOSLIST/POSSTOCK").collect do |p|
190
198
  build_stock_position(p)
191
199
  end
@@ -193,9 +201,32 @@ module OfxParser
193
201
  statement.opt_positions = (doc/"INVSTMTRS/INVPOSLIST/POSOPT").collect do |p|
194
202
  build_opt_position(p)
195
203
  end
204
+
205
+ statement.stock_transactions = (doc/"INVSTMTRS/INVTRANLIST/BUYSTOCK").collect do |t|
206
+ build_stock_transactions(t)
207
+ end
196
208
 
209
+
197
210
  acct
198
211
  end
212
+
213
+ def self.build_stock_transactions(t)
214
+ stock_transaction = Stock_Transaction.new
215
+ stock_transaction.transid = (t/"INVBUY/INVTRAN/FITID").inner_text
216
+ stock_transaction.tradedate = parse_datetime((t/"INVBUY/INVTRAN/DTTRADE").inner_text)
217
+ stock_transaction.settledate = parse_datetime((t/"INVBUY/INVTRAN/DTSETTLE").inner_text)
218
+ stock_transaction.uniqueid = (t/"INVBUY/SECID/UNIQUEID").inner_text
219
+ stock_transaction.uniqueid_type = (t/"INVBUY/SECID/UNIQUEIDTYPE").inner_text
220
+ stock_transaction.units = (t/"INVBUY/UNITS").inner_text
221
+ stock_transaction.unitprice = (t/"INVBUY/UNITPRICE").inner_text
222
+ stock_transaction.commission = (t/"INVBUY/UNITPRICE").inner_text
223
+ stock_transaction.total = (t/"INVBUY/TOTAL").inner_text
224
+ stock_transaction.subacctsec = (t/"INVBUY/SUBACCTSEC").inner_text
225
+ stock_transaction.subacctfund = (t/"INVBUY/SUBACCTFUND").inner_text
226
+ stock_transaction.type = (t/"BUYTYPE").inner_text
227
+ stock_transaction
228
+ end
229
+
199
230
 
200
231
  def self.build_stock_position(p)
201
232
  stock_position = Stock_Position.new
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ofxparser
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
5
- prerelease:
4
+ version: 1.0.2a
5
+ prerelease: 5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Pavit Masson (forked from Andrew A. Smith)
@@ -14,7 +14,7 @@ default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: hpricot
17
- requirement: &9298020 !ruby/object:Gem::Requirement
17
+ requirement: &9644532 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0.6'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *9298020
25
+ version_requirements: *9644532
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: hoe
28
- requirement: &9297684 !ruby/object:Gem::Requirement
28
+ requirement: &9644244 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: 1.5.1
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *9297684
36
+ version_requirements: *9644244
37
37
  description: ! '== DESCRIPTION: My fork of aasmith''s ofx-parser v1.0.2 and attempt
38
38
  at building the investment acct methods. OfxParser is a ruby library to parse a
39
39
  realistic subset of the lengthy OFX 1.x specification. == FEATURES/PROBLEMS: *