reckon 0.2.1 → 0.2.2

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/.gitignore CHANGED
@@ -19,4 +19,5 @@ rdoc
19
19
  pkg
20
20
 
21
21
  ## PROJECT::SPECIFIC
22
- .idea
22
+ .idea
23
+ bin/reckon_local
@@ -1,6 +1,34 @@
1
- = reckon
1
+ = Reckon
2
2
 
3
- Reckon automagically converts CSV files for use with the command-line accounting tool Ledger. It also helps you to select the correct accounts associated with the CSV data using Bayesian machine learning.
3
+ Reckon automagically converts CSV files for use with the command-line accounting tool Ledger[https://github.com/jwiegley/ledger/wiki]. It also helps you to select the correct accounts associated with the CSV data using Bayesian machine learning.
4
+
5
+ == Installation
6
+
7
+ Assuming you have Ruby and Rubygems[http://rubygems.org/pages/download] installed on your system, simply run
8
+
9
+ (sudo) gem install reckon
10
+
11
+ == Example Usage
12
+
13
+ First, login to your bank and export your transaction data as a CSV file.
14
+
15
+ To see how the CSV parses:
16
+
17
+ reckon -f bank.csv -p
18
+
19
+ To convert to ledger format and label everything, do:
20
+
21
+ reckon -f bank.csv -o output.dat
22
+
23
+ To have reckon learn from an existing ledger file, provide it with -l:
24
+
25
+ reckon -f bank.csv -l 2010.dat -o output.dat
26
+
27
+ Learn more with
28
+
29
+ reckon -h
30
+
31
+ If you find CSV files that it can't parse, send me examples and I'll try to fix it.
4
32
 
5
33
  == Note on Patches/Pull Requests
6
34
 
@@ -14,4 +42,4 @@ Reckon automagically converts CSV files for use with the command-line accounting
14
42
 
15
43
  == Copyright
16
44
 
17
- Copyright (c) 2010 Andrew Cantino. See LICENSE for details.
45
+ Copyright (c) 2010 Andrew Cantino, Iteration Labs, LLC. See LICENSE for details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
@@ -171,7 +171,12 @@ module Reckon
171
171
  def date_for(index)
172
172
  value = columns[date_column_index][index]
173
173
  value = [$1, $2, $3].join("/") if value =~ /^(\d{4})(\d{2})(\d{2})\d+\[\d+\:GMT\]$/ # chase format
174
- Time.parse(value)
174
+ begin
175
+ Time.parse(value)
176
+ rescue
177
+ puts "I'm having trouble parsing #{value}, which I thought was a date. Please report this so that we"
178
+ puts "can make this parser better!"
179
+ end
175
180
  end
176
181
 
177
182
  def pretty_date_for(index)
@@ -205,9 +210,10 @@ module Reckon
205
210
  money_score -= 20 if entry !~ /^[\$\+\.\-,\d\(\)]+$/
206
211
  possible_neg_money_count += 1 if entry =~ /^\$?[\-\(]\$?\d+/
207
212
  possible_pos_money_count += 1 if entry =~ /^\+?\$?\+?\d+/
208
- date_score += 10 if entry =~ /^[\-\/\.\d:\[\]]+$/
209
- date_score += entry.gsub(/[^\-\/\.\d:\[\]]/, '').length
210
- date_score -= entry.gsub(/[\-\/\.\d:\[\]]/, '').length * 2
213
+ date_score += 10 if entry =~ /\b(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i
214
+ date_score += 5 if entry =~ /^[\-\/\.\d:\[\]]+$/
215
+ date_score += entry.gsub(/[^\-\/\.\d:\[\]]/, '').length if entry.gsub(/[^\-\/\.\d:\[\]]/, '').length > 3
216
+ date_score -= entry.gsub(/[\-\/\.\d:\[\]]/, '').length
211
217
  date_score += 30 if entry =~ /^\d+[:\/\.]\d+[:\/\.]\d+([ :]\d+[:\/\.]\d+)?$/
212
218
  date_score += 10 if entry =~ /^\d+\[\d+:GMT\]$/i
213
219
  end
@@ -286,7 +292,7 @@ module Reckon
286
292
  unless row.all? { |i| i.nil? || i.length == 0 }
287
293
  row.each_with_index do |entry, index|
288
294
  memo[index] ||= []
289
- memo[index] << entry.strip
295
+ memo[index] << (entry || '').strip
290
296
  end
291
297
  last_row_length = row.length
292
298
  end
@@ -5,15 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{reckon}
8
- s.version = "0.2.1"
8
+ s.version = "0.2.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Andrew Cantino"]
12
- s.date = %q{2010-11-06}
13
- s.default_executable = %q{reckon}
12
+ s.date = %q{2010-11-10}
14
13
  s.description = %q{Reckon automagically converts CSV files for use with the command-line accounting tool Ledger. It also helps you to select the correct accounts associated with the CSV data using Bayesian machine learning.}
15
14
  s.email = %q{andrew@iterationlabs.com}
16
- s.executables = ["reckon"]
15
+ s.executables = ["reckon", "reckon_local"]
17
16
  s.extra_rdoc_files = [
18
17
  "LICENSE",
19
18
  "README.rdoc"
@@ -20,22 +20,29 @@ describe Reckon::App do
20
20
  end
21
21
 
22
22
  describe "detect_columns" do
23
+ before do
24
+ @harder_date_example_csv = Reckon::App.new(:string => HARDER_DATE_EXAMPLE)
25
+ end
26
+
23
27
  it "should detect the money column" do
24
28
  @chase.money_column_indices.should == [3]
25
29
  @some_other_bank.money_column_indices.should == [3]
26
30
  @two_money_columns.money_column_indices.should == [3, 4]
31
+ @harder_date_example_csv.money_column_indices.should == [1]
27
32
  end
28
33
 
29
34
  it "should detect the date column" do
30
35
  @chase.date_column_index.should == 1
31
36
  @some_other_bank.date_column_index.should == 1
32
37
  @two_money_columns.date_column_index.should == 0
38
+ @harder_date_example_csv.date_column_index.should == 0
33
39
  end
34
40
 
35
41
  it "should consider all other columns to be description columns" do
36
42
  @chase.description_column_indices.should == [0, 2]
37
43
  @some_other_bank.description_column_indices.should == [0, 2]
38
44
  @two_money_columns.description_column_indices.should == [1, 2, 5]
45
+ @harder_date_example_csv.description_column_indices.should == [2, 3, 4, 5, 6, 7]
39
46
  end
40
47
  end
41
48
 
@@ -134,5 +141,12 @@ describe Reckon::App do
134
141
  3/26/2008,Check - 0000000251,251,-$88.55,"","$1,298.57"
135
142
  3/26/2008,Check - 0000000251,251,"","+$88.55","$1,298.57"
136
143
  CSV
137
-
144
+
145
+ HARDER_DATE_EXAMPLE = (<<-CSV).strip
146
+ 10-Nov-9,-123.12,,,TRANSFER DEBIT INTERNET TRANSFER,INTERNET TRANSFER MORTGAGE,0.00,
147
+ 09-Nov-10,123.12,,,SALARY SALARY,NGHSKS46383BGDJKD FOO BAR,432.12,
148
+ 04-Nov-11,-1234.00,,,TRANSFER DEBIT INTERNET TRANSFER,INTERNET TRANSFER SAV TO MECU,0.00,
149
+ 04-Nov-9,1234.00,,,TRANSFER CREDIT INTERNET TRANSFER,INTERNET TRANSFER,1234.00,
150
+ 28-Oct-10,-123.12,,,TRANSFER DEBIT INTERNET TRANSFER,INTERNET TRANSFER SAV TO MORTGAGE,0.00,
151
+ CSV
138
152
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reckon
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 1
10
- version: 0.2.1
9
+ - 2
10
+ version: 0.2.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andrew Cantino
@@ -15,8 +15,8 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-06 00:00:00 -07:00
19
- default_executable: reckon
18
+ date: 2010-11-10 00:00:00 -08:00
19
+ default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: rspec
@@ -86,6 +86,7 @@ description: Reckon automagically converts CSV files for use with the command-li
86
86
  email: andrew@iterationlabs.com
87
87
  executables:
88
88
  - reckon
89
+ - reckon_local
89
90
  extensions: []
90
91
 
91
92
  extra_rdoc_files:
@@ -107,6 +108,7 @@ files:
107
108
  - spec/reckon/ledger_parser_spec.rb
108
109
  - spec/spec.opts
109
110
  - spec/spec_helper.rb
111
+ - bin/reckon_local
110
112
  has_rdoc: true
111
113
  homepage: http://github.com/iterationlabs/reckon
112
114
  licenses: []