reckon 0.3.6 → 0.3.7
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/CHANGES.md +2 -0
- data/Gemfile.lock +2 -2
- data/lib/reckon/app.rb +19 -1
- data/lib/reckon/ledger_parser.rb +2 -2
- data/reckon.gemspec +1 -1
- data/spec/reckon/app_spec.rb +19 -0
- data/spec/reckon/ledger_parser_spec.rb +12 -3
- metadata +4 -4
data/CHANGES.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
reckon (0.3.
|
4
|
+
reckon (0.3.7)
|
5
5
|
chronic (>= 0.3.0)
|
6
6
|
fastercsv (>= 1.5.1)
|
7
7
|
highline (>= 1.5.2)
|
@@ -13,7 +13,7 @@ GEM
|
|
13
13
|
chronic (0.9.1)
|
14
14
|
diff-lcs (1.1.3)
|
15
15
|
fastercsv (1.5.5)
|
16
|
-
highline (1.6.
|
16
|
+
highline (1.6.19)
|
17
17
|
rake (10.0.4)
|
18
18
|
rspec (2.11.0)
|
19
19
|
rspec-core (~> 2.11.0)
|
data/lib/reckon/app.rb
CHANGED
@@ -10,6 +10,7 @@ module Reckon
|
|
10
10
|
self.tokens = {}
|
11
11
|
self.accounts = {}
|
12
12
|
self.seen = {}
|
13
|
+
self.options[:currency] ||= '$'
|
13
14
|
learn!
|
14
15
|
parse
|
15
16
|
filter_csv
|
@@ -168,7 +169,12 @@ module Reckon
|
|
168
169
|
end
|
169
170
|
|
170
171
|
def pretty_money(amount, negate = false)
|
171
|
-
|
172
|
+
currency = options[:currency]
|
173
|
+
if options[:suffixed]
|
174
|
+
(amount >= 0 ? " " : "") + sprintf("%0.2f #{currency}", amount * (negate ? -1 : 1))
|
175
|
+
else
|
176
|
+
(amount >= 0 ? " " : "") + sprintf("%0.2f", amount * (negate ? -1 : 1)).gsub(/^((\-)|)(?=\d)/, "\\1#{currency}")
|
177
|
+
end
|
172
178
|
end
|
173
179
|
|
174
180
|
def date_for(index)
|
@@ -359,6 +365,10 @@ module Reckon
|
|
359
365
|
options[:file] = file
|
360
366
|
end
|
361
367
|
|
368
|
+
opts.on("-a", "--account name", "The Ledger Account this file is for") do |a|
|
369
|
+
options[:bank_account] = a
|
370
|
+
end
|
371
|
+
|
362
372
|
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
363
373
|
options[:verbose] = v
|
364
374
|
end
|
@@ -399,6 +409,14 @@ module Reckon
|
|
399
409
|
options[:encoding] = e
|
400
410
|
end
|
401
411
|
|
412
|
+
opts.on("-c", "--currency", "Currency symbol to use, defaults to $. ex.) $, EUR") do |e|
|
413
|
+
options[:currency] = e
|
414
|
+
end
|
415
|
+
|
416
|
+
opts.on("", "--suffixed", "If --currency should be used as a suffix. Defaults to false.") do |e|
|
417
|
+
options[:suffixed] = e
|
418
|
+
end
|
419
|
+
|
402
420
|
opts.on_tail("-h", "--help", "Show this message") do
|
403
421
|
puts opts
|
404
422
|
exit
|
data/lib/reckon/ledger_parser.rb
CHANGED
@@ -18,7 +18,7 @@ module Reckon
|
|
18
18
|
accounts = []
|
19
19
|
ledger.strip.split("\n").each do |entry|
|
20
20
|
next if entry =~ /^\s*$/ || entry =~ /^[^ \t\d]/
|
21
|
-
if entry =~ /^([\d
|
21
|
+
if entry =~ /^([\d\/-]+)(\=[\d\/-]+)?(\s+[\*!]?\s*.*?)$/
|
22
22
|
@entries << { :date => date.strip, :desc => desc.strip, :accounts => balance(accounts) } if date
|
23
23
|
date = $1
|
24
24
|
desc = $3
|
@@ -56,7 +56,7 @@ module Reckon
|
|
56
56
|
|
57
57
|
def clean_money(money)
|
58
58
|
return nil if money.nil? || money.length == 0
|
59
|
-
money.gsub(/[
|
59
|
+
money.gsub(/[^0-9.-]/, '').to_f
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
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.7"
|
7
7
|
s.authors = ["Andrew Cantino"]
|
8
8
|
s.email = %q{andrew@iterationlabs.com}
|
9
9
|
s.homepage = %q{https://github.com/cantino/reckon}
|
data/spec/reckon/app_spec.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
2
3
|
|
3
4
|
require "spec_helper"
|
4
5
|
require 'rubygems'
|
@@ -158,6 +159,24 @@ describe Reckon::App do
|
|
158
159
|
@some_other_bank.pretty_money_for(5).should == " $0.23"
|
159
160
|
@some_other_bank.pretty_money_for(6).should == "-$0.96"
|
160
161
|
end
|
162
|
+
|
163
|
+
it "work with other currencies such as €" do
|
164
|
+
euro_bank = Reckon::App.new(:string => SOME_OTHER_CSV, :currency => "€", :suffixed => false )
|
165
|
+
euro_bank.pretty_money_for(1).should == "-€20.00"
|
166
|
+
euro_bank.pretty_money_for(4).should == " €1558.52"
|
167
|
+
euro_bank.pretty_money_for(7).should == "-€116.22"
|
168
|
+
euro_bank.pretty_money_for(5).should == " €0.23"
|
169
|
+
euro_bank.pretty_money_for(6).should == "-€0.96"
|
170
|
+
end
|
171
|
+
|
172
|
+
it "work with suffixed currencies such as SEK" do
|
173
|
+
swedish_bank = Reckon::App.new(:string => SOME_OTHER_CSV, :currency => 'SEK', :suffixed => true )
|
174
|
+
swedish_bank.pretty_money_for(1).should == "-20.00 SEK"
|
175
|
+
swedish_bank.pretty_money_for(4).should == " 1558.52 SEK"
|
176
|
+
swedish_bank.pretty_money_for(7).should == "-116.22 SEK"
|
177
|
+
swedish_bank.pretty_money_for(5).should == " 0.23 SEK"
|
178
|
+
swedish_bank.pretty_money_for(6).should == "-0.96 SEK"
|
179
|
+
end
|
161
180
|
end
|
162
181
|
|
163
182
|
describe "merge_columns" do
|
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
#encoding: utf-8
|
2
3
|
|
3
4
|
require "spec_helper"
|
4
5
|
require 'rubygems'
|
@@ -12,12 +13,12 @@ describe Reckon::LedgerParser do
|
|
12
13
|
|
13
14
|
describe "parse" do
|
14
15
|
it "should ignore non-standard entries" do
|
15
|
-
@ledger.entries.length.should ==
|
16
|
+
@ledger.entries.length.should == 7
|
16
17
|
end
|
17
18
|
|
18
19
|
it "should parse entries correctly" do
|
19
20
|
@ledger.entries.first[:desc].should == "* Checking balance"
|
20
|
-
@ledger.entries.first[:date].should == "2004
|
21
|
+
@ledger.entries.first[:date].should == "2004-05-01"
|
21
22
|
@ledger.entries.first[:accounts].first[:name].should == "Assets:Bank:Checking"
|
22
23
|
@ledger.entries.first[:accounts].first[:amount].should == 1000
|
23
24
|
@ledger.entries.first[:accounts].last[:name].should == "Equity:Opening Balances"
|
@@ -72,10 +73,18 @@ describe Reckon::LedgerParser do
|
|
72
73
|
Assets:Bank:Checking $500.00
|
73
74
|
Income:Salary
|
74
75
|
|
75
|
-
2004
|
76
|
+
2004-05-01 * Checking balance
|
76
77
|
Assets:Bank:Checking $1,000.00
|
77
78
|
Equity:Opening Balances
|
78
79
|
|
80
|
+
2004-05-01 * Checking balance
|
81
|
+
Assets:Bank:Checking €1,000.00
|
82
|
+
Equity:Opening Balances
|
83
|
+
|
84
|
+
2004-05-01 * Checking balance
|
85
|
+
Assets:Bank:Checking 1,000.00 SEK
|
86
|
+
Equity:Opening Balances
|
87
|
+
|
79
88
|
2004/05/01 * Investment balance
|
80
89
|
Assets:Brokerage 50 AAPL @ $30.00
|
81
90
|
Equity:Opening Balances
|
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.7
|
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-06-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -136,7 +136,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
136
136
|
version: '0'
|
137
137
|
segments:
|
138
138
|
- 0
|
139
|
-
hash:
|
139
|
+
hash: 989806142141775865
|
140
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
141
|
none: false
|
142
142
|
requirements:
|
@@ -145,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
145
|
version: '0'
|
146
146
|
segments:
|
147
147
|
- 0
|
148
|
-
hash:
|
148
|
+
hash: 989806142141775865
|
149
149
|
requirements: []
|
150
150
|
rubyforge_project:
|
151
151
|
rubygems_version: 1.8.25
|