reckon 0.6.2 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +4 -4
  3. data/.gitignore +1 -0
  4. data/CHANGELOG.md +54 -3
  5. data/Gemfile.lock +1 -1
  6. data/README.md +23 -19
  7. data/Rakefile +2 -2
  8. data/bin/build-new-version.sh +26 -0
  9. data/bin/reckon +4 -1
  10. data/lib/reckon.rb +1 -0
  11. data/lib/reckon/app.rb +13 -150
  12. data/lib/reckon/cosine_similarity.rb +67 -62
  13. data/lib/reckon/date_column.rb +3 -2
  14. data/lib/reckon/ledger_parser.rb +1 -1
  15. data/lib/reckon/money.rb +12 -5
  16. data/lib/reckon/options.rb +157 -0
  17. data/lib/reckon/version.rb +1 -1
  18. data/spec/cosine_training_and_test.rb +52 -0
  19. data/spec/integration/another_bank_example/output.ledger +3 -3
  20. data/spec/integration/ask_for_account/cli_input.exp +33 -0
  21. data/spec/integration/ask_for_account/expected_output +11 -0
  22. data/spec/integration/ask_for_account/input.csv +9 -0
  23. data/spec/integration/ask_for_account/test_args +1 -0
  24. data/spec/integration/broker_canada_example/output.ledger +2 -2
  25. data/spec/integration/chase/account_tokens_and_regex/output.ledger +3 -3
  26. data/spec/integration/chase/default_account_names/output.ledger +3 -3
  27. data/spec/integration/chase/learn_from_existing/output.ledger +3 -3
  28. data/spec/integration/chase/simple/output.ledger +3 -3
  29. data/spec/integration/danish_kroner_nordea_example/output.ledger +1 -1
  30. data/spec/integration/extratofake/output.ledger +1 -1
  31. data/spec/integration/harder_date_example/output.ledger +2 -2
  32. data/spec/integration/invalid_header_example/test_args +1 -1
  33. data/spec/integration/ledger_date_format/compare_cmds +1 -0
  34. data/spec/integration/ledger_date_format/input.csv +3 -0
  35. data/spec/integration/ledger_date_format/output.ledger +12 -0
  36. data/spec/integration/ledger_date_format/test_args +1 -0
  37. data/spec/integration/test.sh +78 -27
  38. data/spec/reckon/app_spec.rb +21 -19
  39. data/spec/reckon/csv_parser_spec.rb +3 -3
  40. data/spec/reckon/date_column_spec.rb +12 -0
  41. data/spec/reckon/money_spec.rb +3 -3
  42. data/spec/reckon/options_spec.rb +17 -0
  43. data/spec/spec_helper.rb +6 -1
  44. metadata +15 -2
@@ -242,7 +242,7 @@ describe Reckon::CSVParser do
242
242
  describe "pretty_money_for" do
243
243
  it "work with negative and positive numbers" do
244
244
  some_other_bank.pretty_money_for(1).should == "-$20.00"
245
- some_other_bank.pretty_money_for(4).should == " $1558.52"
245
+ some_other_bank.pretty_money_for(4).should == " $1,558.52"
246
246
  some_other_bank.pretty_money_for(7).should == "-$116.22"
247
247
  some_other_bank.pretty_money_for(5).should == " $0.23"
248
248
  some_other_bank.pretty_money_for(6).should == "-$0.96"
@@ -251,7 +251,7 @@ describe Reckon::CSVParser do
251
251
  it "work with other currencies such as €" do
252
252
  euro_bank = Reckon::CSVParser.new(file: fixture_path('some_other.csv'), currency: "€", suffixed: false )
253
253
  euro_bank.pretty_money_for(1).should == "-€20.00"
254
- euro_bank.pretty_money_for(4).should == " €1558.52"
254
+ euro_bank.pretty_money_for(4).should == " €1,558.52"
255
255
  euro_bank.pretty_money_for(7).should == "-€116.22"
256
256
  euro_bank.pretty_money_for(5).should == " €0.23"
257
257
  euro_bank.pretty_money_for(6).should == "-€0.96"
@@ -260,7 +260,7 @@ describe Reckon::CSVParser do
260
260
  it "work with suffixed currencies such as SEK" do
261
261
  swedish_bank = Reckon::CSVParser.new(file: fixture_path('some_other.csv'), currency: 'SEK', suffixed: true )
262
262
  swedish_bank.pretty_money_for(1).should == "-20.00 SEK"
263
- swedish_bank.pretty_money_for(4).should == " 1558.52 SEK"
263
+ swedish_bank.pretty_money_for(4).should == " 1,558.52 SEK"
264
264
  swedish_bank.pretty_money_for(7).should == "-116.22 SEK"
265
265
  swedish_bank.pretty_money_for(5).should == " 0.23 SEK"
266
266
  swedish_bank.pretty_money_for(6).should == "-0.96 SEK"
@@ -38,4 +38,16 @@ describe Reckon::DateColumn do
38
38
  .to eq(Date.new(2013, 2, 1))
39
39
  end
40
40
  end
41
+
42
+ describe "#pretty_for" do
43
+ it 'should use ledger_date_format' do
44
+ expect(Reckon::DateColumn.new(%w[13/02/2013], {ledger_date_format: '%d/%m/%Y'}).pretty_for(0))
45
+ .to eq('13/02/2013')
46
+ end
47
+
48
+ it 'should default to is' do
49
+ expect(Reckon::DateColumn.new(%w[13/12/2013]).pretty_for(0))
50
+ .to eq('2013-12-13')
51
+ end
52
+ end
41
53
  end
@@ -32,17 +32,17 @@ describe Reckon::Money do
32
32
  describe "pretty" do
33
33
  it "work with negative and positive numbers" do
34
34
  expect(Reckon::Money.new(-20.00).pretty).to eq("-$20.00")
35
- expect(Reckon::Money.new(1558.52).pretty).to eq(" $1558.52")
35
+ expect(Reckon::Money.new(1558.52).pretty).to eq(" $1,558.52")
36
36
  end
37
37
 
38
38
  it "work with other currencies such as €" do
39
39
  expect(Reckon::Money.new(-20.00, currency: "€", suffixed: false).pretty).to eq("-€20.00")
40
- expect(Reckon::Money.new(1558.52, currency: "€", suffixed: false).pretty).to eq(" €1558.52")
40
+ expect(Reckon::Money.new(1558.52, currency: "€", suffixed: false).pretty).to eq(" €1,558.52")
41
41
  end
42
42
 
43
43
  it "work with suffixed currencies such as SEK" do
44
44
  expect(Reckon::Money.new(-20.00, currency: "SEK", suffixed: true).pretty).to eq("-20.00 SEK")
45
- expect(Reckon::Money.new(1558.52, currency: "SEK", suffixed: true).pretty).to eq(" 1558.52 SEK")
45
+ expect(Reckon::Money.new(1558.52, currency: "SEK", suffixed: true).pretty).to eq(" 1,558.52 SEK")
46
46
  end
47
47
  end
48
48
 
@@ -0,0 +1,17 @@
1
+ require "spec_helper"
2
+
3
+ describe '#parse_opts' do
4
+ it 'should assign to :string option' do
5
+ options = Reckon::Options.parse(
6
+ %w[-f - --unattended --account bank],
7
+ StringIO.new('foo,bar,baz')
8
+ )
9
+ expect(options[:string]).to eq('foo,bar,baz')
10
+ end
11
+
12
+ it 'should require --unattended flag' do
13
+ expect { Reckon::Options.parse(%w[-f - --account bank]) }.to(
14
+ raise_error(RuntimeError, "--unattended is required to use STDIN as CSV source.")
15
+ )
16
+ end
17
+ end
data/spec/spec_helper.rb CHANGED
@@ -16,13 +16,18 @@ public
16
16
  def silence_output
17
17
  # Store the original stderr and stdout in order to restore them later
18
18
  @original_stdout = $stdout
19
+ @original_stderr = $stderr
19
20
 
20
21
  # Redirect stderr and stdout
21
- $stdout = File.new(File.join(File.dirname(__FILE__), 'test_log.txt'), 'w')
22
+ $stderr = File.new(File.join(File.dirname(__FILE__), 'test_log.txt'), 'w')
23
+ $stdout = $stderr
24
+ Reckon::LOGGER.reopen $stderr
22
25
  end
23
26
 
24
27
  # Replace stderr and stdout so anything else is output correctly
25
28
  def enable_output
26
29
  $stdout = @original_stdout
27
30
  @original_stdout = nil
31
+ $stderr = @original_stderr
32
+ @original_stderr = nil
28
33
  end
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.6.2
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Cantino
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-01-25 00:00:00.000000000 Z
13
+ date: 2021-08-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
@@ -101,6 +101,7 @@ description: Reckon automagically converts CSV files for use with the command-li
101
101
  with the CSV data using Bayesian machine learning.
102
102
  email: andrew@iterationlabs.com
103
103
  executables:
104
+ - build-new-version.sh
104
105
  - reckon
105
106
  extensions: []
106
107
  extra_rdoc_files: []
@@ -116,6 +117,7 @@ files:
116
117
  - LICENSE
117
118
  - README.md
118
119
  - Rakefile
120
+ - bin/build-new-version.sh
119
121
  - bin/reckon
120
122
  - lib/reckon.rb
121
123
  - lib/reckon/app.rb
@@ -125,8 +127,10 @@ files:
125
127
  - lib/reckon/ledger_parser.rb
126
128
  - lib/reckon/logger.rb
127
129
  - lib/reckon/money.rb
130
+ - lib/reckon/options.rb
128
131
  - lib/reckon/version.rb
129
132
  - reckon.gemspec
133
+ - spec/cosine_training_and_test.rb
130
134
  - spec/data_fixtures/51-sample.csv
131
135
  - spec/data_fixtures/51-tokens.yml
132
136
  - spec/data_fixtures/73-sample.csv
@@ -159,6 +163,10 @@ files:
159
163
  - spec/integration/another_bank_example/input.csv
160
164
  - spec/integration/another_bank_example/output.ledger
161
165
  - spec/integration/another_bank_example/test_args
166
+ - spec/integration/ask_for_account/cli_input.exp
167
+ - spec/integration/ask_for_account/expected_output
168
+ - spec/integration/ask_for_account/input.csv
169
+ - spec/integration/ask_for_account/test_args
162
170
  - spec/integration/austrian_example/input.csv
163
171
  - spec/integration/austrian_example/output.ledger
164
172
  - spec/integration/austrian_example/test_args
@@ -209,6 +217,10 @@ files:
209
217
  - spec/integration/inversed_credit_card/input.csv
210
218
  - spec/integration/inversed_credit_card/output.ledger
211
219
  - spec/integration/inversed_credit_card/test_args
220
+ - spec/integration/ledger_date_format/compare_cmds
221
+ - spec/integration/ledger_date_format/input.csv
222
+ - spec/integration/ledger_date_format/output.ledger
223
+ - spec/integration/ledger_date_format/test_args
212
224
  - spec/integration/nationwide/input.csv
213
225
  - spec/integration/nationwide/output.ledger
214
226
  - spec/integration/nationwide/test_args
@@ -248,6 +260,7 @@ files:
248
260
  - spec/reckon/ledger_parser_spec.rb
249
261
  - spec/reckon/money_column_spec.rb
250
262
  - spec/reckon/money_spec.rb
263
+ - spec/reckon/options_spec.rb
251
264
  - spec/spec.opts
252
265
  - spec/spec_helper.rb
253
266
  homepage: https://github.com/cantino/reckon