reckon 0.3.4 → 0.3.5
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 +3 -0
- data/CHANGES.md +3 -0
- data/README.md +27 -7
- data/lib/reckon/app.rb +18 -1
- data/reckon.gemspec +1 -1
- data/spec/data_fixtures/extratofake.csv +24 -0
- data/spec/reckon/app_spec.rb +36 -3
- metadata +5 -2
data/.gitignore
CHANGED
data/CHANGES.md
ADDED
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# Reckon
|
2
2
|
|
3
|
-
Reckon automagically converts CSV files for use with the command-line accounting tool Ledger
|
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
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
|
-
Assuming you have Ruby and Rubygems
|
7
|
+
Assuming you have Ruby and [Rubygems](http://rubygems.org/pages/download) installed on your system, simply run
|
8
8
|
|
9
9
|
(sudo) gem install reckon
|
10
10
|
|
@@ -16,6 +16,8 @@ To see how the CSV parses:
|
|
16
16
|
|
17
17
|
reckon -f bank.csv -p
|
18
18
|
|
19
|
+
If your CSV file has a header on the first line, include `--contains-header`.
|
20
|
+
|
19
21
|
To convert to ledger format and label everything, do:
|
20
22
|
|
21
23
|
reckon -f bank.csv -o output.dat
|
@@ -24,11 +26,29 @@ To have reckon learn from an existing ledger file, provide it with -l:
|
|
24
26
|
|
25
27
|
reckon -f bank.csv -l 2010.dat -o output.dat
|
26
28
|
|
27
|
-
Learn more
|
28
|
-
|
29
|
-
reckon -h
|
30
|
-
|
31
|
-
|
29
|
+
Learn more:
|
30
|
+
|
31
|
+
> reckon -h
|
32
|
+
|
33
|
+
Usage: Reckon.rb [options]
|
34
|
+
|
35
|
+
-f, --file FILE The CSV file to parse
|
36
|
+
-v, --[no-]verbose Run verbosely
|
37
|
+
-p, --print-table Print out the parsed CSV in table form
|
38
|
+
-o, --output-file FILE The ledger file to append to
|
39
|
+
-l, --learn-from FILE An existing ledger file to learn accounts from
|
40
|
+
--ignore-columns 1,2,5
|
41
|
+
Columns to ignore in the CSV file - the first column is column 1
|
42
|
+
--contains-header
|
43
|
+
The first row of the CSV is a header and should be skipped
|
44
|
+
--csv-separator ','
|
45
|
+
Separator for parsing the CSV - default is comma.
|
46
|
+
--comma-separates-cents
|
47
|
+
Use comma instead of period to deliminate dollars from cents when parsing ($100,50 instead of $100.50)
|
48
|
+
-h, --help Show this message
|
49
|
+
--version Show version
|
50
|
+
|
51
|
+
If you find CSV files that it can't parse, send me examples or pull requests!
|
32
52
|
|
33
53
|
## Note on Patches/Pull Requests
|
34
54
|
|
data/lib/reckon/app.rb
CHANGED
@@ -159,6 +159,7 @@ module Reckon
|
|
159
159
|
value = value.gsub(/\./, '').gsub(/,/, '.') if options[:comma_separates_cents]
|
160
160
|
cleaned_value = value.gsub(/[^\d\.]/, '').to_f
|
161
161
|
cleaned_value *= -1 if value =~ /[\(\-]/
|
162
|
+
cleaned_value = -(cleaned_value) if options[:inverse]
|
162
163
|
cleaned_value
|
163
164
|
end
|
164
165
|
|
@@ -334,7 +335,15 @@ module Reckon
|
|
334
335
|
|
335
336
|
def parse
|
336
337
|
data = options[:string] || File.read(options[:file])
|
337
|
-
|
338
|
+
|
339
|
+
if RUBY_VERSION =~ /^1\.9/ || RUBY_VERSION =~ /^2/
|
340
|
+
data = data.force_encoding(options[:encoding] || 'BINARY').encode('UTF-8', :invalid => :replace, :undef => :replace, :replace => '?')
|
341
|
+
csv_engine = CSV
|
342
|
+
else
|
343
|
+
csv_engine = FasterCSV
|
344
|
+
end
|
345
|
+
|
346
|
+
@csv_data = csv_engine.parse data.strip, :col_sep => options[:csv_separator] || ','
|
338
347
|
csv_data.shift if options[:contains_header]
|
339
348
|
csv_data
|
340
349
|
end
|
@@ -353,6 +362,10 @@ module Reckon
|
|
353
362
|
options[:verbose] = v
|
354
363
|
end
|
355
364
|
|
365
|
+
opts.on("-i", "--inverse", "Use the negative of each amount") do |v|
|
366
|
+
options[:inverse] = v
|
367
|
+
end
|
368
|
+
|
356
369
|
opts.on("-p", "--print-table", "Print out the parsed CSV in table form") do |p|
|
357
370
|
options[:print_table] = p
|
358
371
|
end
|
@@ -381,6 +394,10 @@ module Reckon
|
|
381
394
|
options[:comma_separates_cents] = c
|
382
395
|
end
|
383
396
|
|
397
|
+
opts.on("", "--encoding", "Specify an encoding for the CSV file") do |e|
|
398
|
+
options[:encoding] = e
|
399
|
+
end
|
400
|
+
|
384
401
|
opts.on_tail("-h", "--help", "Show this message") do
|
385
402
|
puts opts
|
386
403
|
exit
|
data/reckon.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = %q{reckon}
|
6
|
-
s.version = "0.3.
|
6
|
+
s.version = "0.3.5"
|
7
7
|
s.authors = ["Andrew Cantino"]
|
8
8
|
s.email = %q{andrew@iterationlabs.com}
|
9
9
|
s.homepage = %q{https://github.com/cantino/reckon}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"Data","Dependencia Origem","Hist�rico","Data do Balancete","N�mero do documento","Valor",
|
2
|
+
"10/31/2012","","Saldo Anterior","","0","100.00",
|
3
|
+
"11/01/2012","0000-9","Transfer�ncia on line - 01/11 4885 256620-6 XXXXXXXXXXXXX","","224885000256620","100.00",
|
4
|
+
"11/01/2012","","Dep�sito COMPE - 033 0502 27588602104 XXXXXXXXXXXXXX","","101150","100.00",
|
5
|
+
"11/01/2012","","Proventos","","496774","1000.00",
|
6
|
+
"11/01/2012","","Benef�cio","","496775","100.00",
|
7
|
+
"11/01/2012","0000-0","Compra com Cart�o - 01/11 09:45 XXXXXXXXXXX","","135102","-1.00",
|
8
|
+
"11/01/2012","0000-0","Compra com Cart�o - 01/11 09:48 XXXXXXXXXXX","","235338","-10.00",
|
9
|
+
"11/01/2012","0000-0","Compra com Cart�o - 01/11 12:35 XXXXXXXX","","345329","-10.00",
|
10
|
+
"11/01/2012","0000-0","Compra com Cart�o - 01/11 23:57 XXXXXXXXXXXXXXXX","","686249","-10.00",
|
11
|
+
"11/01/2012","0000-0","Saque com cart�o - 01/11 13:17 XXXXXXXXXXXXXXXX","","11317296267021","-10.00",
|
12
|
+
"11/01/2012","","Pagto conta telefone - VIVO DF","","110101","-100.00",
|
13
|
+
"11/01/2012","","Cobran�a de I.O.F.","","391100701","-1.00",
|
14
|
+
"11/05/2012","0000-0","Compra com Cart�o - 02/11 16:57 XXXXXXXXXXXX","","161057","-10.00",
|
15
|
+
"11/05/2012","0000-0","Compra com Cart�o - 03/11 18:57 XXXXXXXXXXXXXXX","","168279","-10.00",
|
16
|
+
"11/05/2012","0000-0","Compra com Cart�o - 05/11 12:32 XXXXXXXXXXXXXXXXX","","245166","-10.00",
|
17
|
+
"11/05/2012","0000-0","Compra com Cart�o - 02/11 17:18 XXXXXXXXXXXXX","","262318","-1.00",
|
18
|
+
"11/05/2012","0000-0","Compra com Cart�o - 02/11 22:46 XXXXXXXXXXX","","382002","-100.00",
|
19
|
+
"11/05/2012","0000-0","Compra com Cart�o - 02/11 23:19 XXXXXXXXXXX","","683985","-1.00",
|
20
|
+
"11/05/2012","0000-0","Compra com Cart�o - 03/11 01:19 XXXXXXXXXXXXXXXX","","704772","-10.00",
|
21
|
+
"11/05/2012","0000-0","Compra com Cart�o - 03/11 11:08 XXXXXXXX","","840112","-1.00",
|
22
|
+
"11/05/2012","0000-0","Saque com cart�o - 05/11 19:24 XXXXXXXXXXXXXXXXX","","51924256267021","-10.00",
|
23
|
+
"11/05/2012","0000-0","Transfer�ncia on line - 05/11 4885 256620-6 XXXXXXXXXXXXX","","224885000256620","-100.00",
|
24
|
+
"11/05/2012","","Pagamento de T�tulo - XXXXXXXXXXXXXXXXXXX","","110501","-100.00",
|
data/spec/reckon/app_spec.rb
CHANGED
@@ -21,8 +21,16 @@ describe Reckon::App do
|
|
21
21
|
Reckon::App.settings[:testing].should be_true
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
describe "parse" do
|
25
|
+
it "should work with foreign character encodings" do
|
26
|
+
app = Reckon::App.new(:file => File.expand_path(File.join(File.dirname(__FILE__), "..", "data_fixtures", "extratofake.csv")))
|
27
|
+
app.columns[0][0..2].should == ["Data", "10/31/2012", "11/01/2012"]
|
28
|
+
app.columns[2].first.should == "Hist?rico"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should work with other separators" do
|
32
|
+
Reckon::App.new(:string => "one;two\nthree;four", :csv_separator => ';').columns.should == [['one', 'three'], ['two', 'four']]
|
33
|
+
end
|
26
34
|
end
|
27
35
|
|
28
36
|
describe "columns" do
|
@@ -96,12 +104,18 @@ describe Reckon::App do
|
|
96
104
|
@danish_kroner_nordea.money_for(4).should == -3452.90
|
97
105
|
@danish_kroner_nordea.money_for(5).should == -655.00
|
98
106
|
end
|
99
|
-
|
107
|
+
|
100
108
|
it "should handle the comma_separates_cents option correctly" do
|
101
109
|
european_csv = Reckon::App.new(:string => "$2,00;something\n1.025,67;something else", :csv_separator => ';', :comma_separates_cents => true)
|
102
110
|
european_csv.money_for(0).should == 2.00
|
103
111
|
european_csv.money_for(1).should == 1025.67
|
104
112
|
end
|
113
|
+
|
114
|
+
it "should return negated values if the inverse option is passed" do
|
115
|
+
inversed_csv = Reckon::App.new(:string => INVERSED_CREDIT_CARD, :inverse => true)
|
116
|
+
inversed_csv.money_for(0).should == -30.00
|
117
|
+
inversed_csv.money_for(3).should == 500.00
|
118
|
+
end
|
105
119
|
end
|
106
120
|
|
107
121
|
describe "date_for" do
|
@@ -177,6 +191,25 @@ describe Reckon::App do
|
|
177
191
|
CREDIT,2003/12/24,"Some Company vendorpymt PPD ID: 5KL3832735",$2105.00
|
178
192
|
CSV
|
179
193
|
|
194
|
+
INVERSED_CREDIT_CARD = (<<-CSV).strip
|
195
|
+
2013/01/17,2013/01/16,2013011702,DEBIT,2226,"VODAFONE PREPAY VISA M AUCKLAND NZL",30.00
|
196
|
+
2013/01/18,2013/01/17,2013011801,DEBIT,2226,"WILSON PARKING AUCKLAND NZL",4.60
|
197
|
+
2013/01/18,2013/01/17,2013011802,DEBIT,2226,"AUCKLAND TRANSPORT HENDERSON NZL",2.00
|
198
|
+
2013/01/19,2013/01/19,2013011901,CREDIT,2226,"INTERNET PAYMENT RECEIVED ",-500.00
|
199
|
+
2013/01/26,2013/01/23,2013012601,DEBIT,2226,"ITUNES NZ CORK IRL",64.99
|
200
|
+
2013/01/26,2013/01/25,2013012602,DEBIT,2226,"VODAFONE FXFLNE BBND R NEWTON NZL",90.26
|
201
|
+
2013/01/29,2013/01/29,2013012901,CREDIT,2101,"PAYMENT RECEIVED THANK YOU ",-27.75
|
202
|
+
2013/01/30,2013/01/29,2013013001,DEBIT,2226,"AUCKLAND TRANSPORT HENDERSON NZL",3.50
|
203
|
+
2013/02/05,2013/02/03,2013020501,DEBIT,2226,"Z BEACH RD AUCKLAND NZL",129.89
|
204
|
+
2013/02/05,2013/02/03,2013020502,DEBIT,2226,"TOURNAMENT KHYBER PASS AUCKLAND NZL",8.00
|
205
|
+
2013/02/05,2013/02/04,2013020503,DEBIT,2226,"VODAFONE PREPAY VISA M AUCKLAND NZL",30.00
|
206
|
+
2013/02/08,2013/02/07,2013020801,DEBIT,2226,"AKLD TRANSPORT PARKING AUCKLAND NZL",2.50
|
207
|
+
2013/02/08,2013/02/07,2013020802,DEBIT,2226,"AUCKLAND TRANSPORT HENDERSON NZL",3.50
|
208
|
+
2013/02/12,2013/02/11,2013021201,DEBIT,2226,"AKLD TRANSPORT PARKING AUCKLAND NZL",1.50
|
209
|
+
2013/02/17,2013/02/17,2013021701,CREDIT,2226,"INTERNET PAYMENT RECEIVED ",-12.00
|
210
|
+
2013/02/17,2013/02/17,2013021702,CREDIT,2226,"INTERNET PAYMENT RECEIVED ",-18.00
|
211
|
+
CSV
|
212
|
+
|
180
213
|
TWO_MONEY_COLUMNS_BANK = (<<-CSV).strip
|
181
214
|
4/1/2008,Check - 0000000122,122,-$76.00,"","$1,750.06"
|
182
215
|
3/28/2008,BLARG R SH 456930,"","",+$327.49,"$1,826.06"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reckon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-03-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -103,6 +103,7 @@ files:
|
|
103
103
|
- .document
|
104
104
|
- .gitignore
|
105
105
|
- .rvmrc
|
106
|
+
- CHANGES.md
|
106
107
|
- Gemfile
|
107
108
|
- Gemfile.lock
|
108
109
|
- LICENSE
|
@@ -114,6 +115,7 @@ files:
|
|
114
115
|
- lib/reckon/app.rb
|
115
116
|
- lib/reckon/ledger_parser.rb
|
116
117
|
- reckon.gemspec
|
118
|
+
- spec/data_fixtures/extratofake.csv
|
117
119
|
- spec/reckon/app_spec.rb
|
118
120
|
- spec/reckon/ledger_parser_spec.rb
|
119
121
|
- spec/spec.opts
|
@@ -144,6 +146,7 @@ specification_version: 3
|
|
144
146
|
summary: Utility for interactively converting and labeling CSV files for the Ledger
|
145
147
|
accounting tool.
|
146
148
|
test_files:
|
149
|
+
- spec/data_fixtures/extratofake.csv
|
147
150
|
- spec/reckon/app_spec.rb
|
148
151
|
- spec/reckon/ledger_parser_spec.rb
|
149
152
|
- spec/spec.opts
|