reckon 0.8.0 ā 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +4 -12
- data/.gitignore +8 -0
- data/CHANGELOG.md +25 -1
- data/Gemfile.lock +23 -21
- data/README.md +2 -0
- data/bin/build-new-version.sh +1 -1
- data/lib/reckon/csv_parser.rb +17 -8
- data/lib/reckon/options.rb +4 -0
- data/lib/reckon/version.rb +1 -1
- data/reckon.gemspec +1 -0
- data/spec/integration/ask_for_account/cli_input.txt +1 -0
- data/spec/integration/test.sh +10 -10
- data/spec/integration/two_money_columns_manual/input.csv +5 -0
- data/spec/integration/two_money_columns_manual/output.ledger +16 -0
- data/spec/integration/two_money_columns_manual/test_args +1 -0
- metadata +24 -7
- data/spec/integration/ask_for_account/cli_input.exp +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26126e1e4ead4fcd93a94093f8e4a4fd557a9c46ccc6983198d4bdd516e639ee
|
4
|
+
data.tar.gz: f196a86ca58ebaeee4f27030bb21af9fd3c3001d20d06b74f2063ea42d96cfcc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02ad471caf5a5b6b69d98cde9cfa5e0579bbe680f50bb7fa8c1f5b3a7908018a48075531674a27d23139913be9156f889cac8010e06de87439c0665b064d7171
|
7
|
+
data.tar.gz: a8abf375fab7ba91d31a0d05ee372a5fc788feca0fe6a61859cb4ed6c72a3387238a4df2d2dac2ce300fe4f047142ea18bbe03a364e008e2b9588143f0223852
|
data/.github/workflows/ruby.yml
CHANGED
@@ -9,9 +9,7 @@ name: Build Status
|
|
9
9
|
|
10
10
|
on:
|
11
11
|
push:
|
12
|
-
branches: [ master ]
|
13
12
|
pull_request:
|
14
|
-
branches: [ master ]
|
15
13
|
|
16
14
|
jobs:
|
17
15
|
test:
|
@@ -21,23 +19,17 @@ jobs:
|
|
21
19
|
matrix:
|
22
20
|
ruby-version:
|
23
21
|
# Current ruby stable version
|
22
|
+
- 3.1.2
|
23
|
+
# Ubuntu 22.04
|
24
24
|
- 3.0
|
25
|
-
# Ubuntu 20.
|
25
|
+
# Ubuntu 20.04
|
26
26
|
- 2.7
|
27
|
-
# Ubuntu 19.10
|
28
|
-
- 2.5
|
29
|
-
# Mac v11 Big Sur
|
30
|
-
# - 2.6?
|
31
|
-
# Mac v10.15 Catalina
|
32
|
-
- 2.6
|
33
|
-
# Mac v10.14 Mojave
|
34
|
-
- 2.3.7
|
35
27
|
steps:
|
36
28
|
- uses: actions/checkout@v2
|
37
29
|
- name: Update package
|
38
30
|
run: sudo apt-get update
|
39
31
|
- name: Install packages
|
40
|
-
run: sudo apt-get -y install ledger hledger
|
32
|
+
run: sudo apt-get -y install ledger hledger
|
41
33
|
- name: Set up Ruby
|
42
34
|
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
43
35
|
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,29 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v0.9.0](https://github.com/cantino/reckon/tree/v0.9.0) (2023-02-23)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/cantino/reckon/compare/v0.9.0-beta...v0.9.0)
|
6
|
+
|
7
|
+
**Merged pull requests:**
|
8
|
+
|
9
|
+
- Add support for multiple money columns [\#118](https://github.com/cantino/reckon/pull/118) ([oskarth](https://github.com/oskarth))
|
10
|
+
|
11
|
+
## [v0.9.0-beta](https://github.com/cantino/reckon/tree/v0.9.0-beta) (2023-02-21)
|
12
|
+
|
13
|
+
[Full Changelog](https://github.com/cantino/reckon/compare/v0.8.1...v0.9.0-beta)
|
14
|
+
|
15
|
+
## [v0.8.1](https://github.com/cantino/reckon/tree/v0.8.1) (2022-07-02)
|
16
|
+
|
17
|
+
[Full Changelog](https://github.com/cantino/reckon/compare/v0.8.0...v0.8.1)
|
18
|
+
|
19
|
+
**Closed issues:**
|
20
|
+
|
21
|
+
- Reckon files every transaction \(incoming and outgoing\) as Income:Unknown [\#116](https://github.com/cantino/reckon/issues/116)
|
22
|
+
|
23
|
+
**Merged pull requests:**
|
24
|
+
|
25
|
+
- fix bugs with test.sh [\#117](https://github.com/cantino/reckon/pull/117) ([benprew](https://github.com/benprew))
|
26
|
+
|
3
27
|
## [v0.8.0](https://github.com/cantino/reckon/tree/v0.8.0) (2021-08-08)
|
4
28
|
|
5
29
|
[Full Changelog](https://github.com/cantino/reckon/compare/v0.7.2...v0.8.0)
|
@@ -222,7 +246,6 @@
|
|
222
246
|
- Unattended mode and custom tokens support [\#47](https://github.com/cantino/reckon/pull/47) ([vzctl](https://github.com/vzctl))
|
223
247
|
- \[RFC\] Implement issue \#40: Tab completion [\#46](https://github.com/cantino/reckon/pull/46) ([BlackEdder](https://github.com/BlackEdder))
|
224
248
|
- set readline to allow for backspace in ask dialog [\#44](https://github.com/cantino/reckon/pull/44) ([mrtazz](https://github.com/mrtazz))
|
225
|
-
- Fix --encoding option [\#41](https://github.com/cantino/reckon/pull/41) ([mamciek](https://github.com/mamciek))
|
226
249
|
|
227
250
|
## [v0.3.10](https://github.com/cantino/reckon/tree/v0.3.10) (2014-08-16)
|
228
251
|
|
@@ -230,6 +253,7 @@
|
|
230
253
|
|
231
254
|
**Merged pull requests:**
|
232
255
|
|
256
|
+
- Fix --encoding option [\#41](https://github.com/cantino/reckon/pull/41) ([mamciek](https://github.com/mamciek))
|
233
257
|
- Bumped version number [\#37](https://github.com/cantino/reckon/pull/37) ([BlackEdder](https://github.com/BlackEdder))
|
234
258
|
|
235
259
|
## [v0.3.9](https://github.com/cantino/reckon/tree/v0.3.9) (2014-02-20)
|
data/Gemfile.lock
CHANGED
@@ -1,38 +1,40 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
reckon (0.
|
4
|
+
reckon (0.9.0)
|
5
5
|
chronic (>= 0.3.0)
|
6
6
|
highline (>= 1.5.2)
|
7
|
+
matrix (>= 0.4.2)
|
7
8
|
rchardet (>= 1.8.0)
|
8
9
|
|
9
10
|
GEM
|
10
11
|
remote: http://rubygems.org/
|
11
12
|
specs:
|
12
13
|
chronic (0.10.2)
|
13
|
-
coderay (1.1.
|
14
|
-
diff-lcs (1.
|
15
|
-
highline (2.0
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
coderay (1.1.3)
|
15
|
+
diff-lcs (1.5.0)
|
16
|
+
highline (2.1.0)
|
17
|
+
matrix (0.4.2)
|
18
|
+
method_source (1.0.0)
|
19
|
+
pry (0.14.2)
|
20
|
+
coderay (~> 1.1)
|
21
|
+
method_source (~> 1.0)
|
22
|
+
rake (13.0.6)
|
21
23
|
rantly (1.2.0)
|
22
24
|
rchardet (1.8.0)
|
23
|
-
rspec (3.
|
24
|
-
rspec-core (~> 3.
|
25
|
-
rspec-expectations (~> 3.
|
26
|
-
rspec-mocks (~> 3.
|
27
|
-
rspec-core (3.
|
28
|
-
rspec-support (~> 3.
|
29
|
-
rspec-expectations (3.
|
25
|
+
rspec (3.12.0)
|
26
|
+
rspec-core (~> 3.12.0)
|
27
|
+
rspec-expectations (~> 3.12.0)
|
28
|
+
rspec-mocks (~> 3.12.0)
|
29
|
+
rspec-core (3.12.1)
|
30
|
+
rspec-support (~> 3.12.0)
|
31
|
+
rspec-expectations (3.12.2)
|
30
32
|
diff-lcs (>= 1.2.0, < 2.0)
|
31
|
-
rspec-support (~> 3.
|
32
|
-
rspec-mocks (3.
|
33
|
+
rspec-support (~> 3.12.0)
|
34
|
+
rspec-mocks (3.12.3)
|
33
35
|
diff-lcs (>= 1.2.0, < 2.0)
|
34
|
-
rspec-support (~> 3.
|
35
|
-
rspec-support (3.
|
36
|
+
rspec-support (~> 3.12.0)
|
37
|
+
rspec-support (3.12.0)
|
36
38
|
|
37
39
|
PLATFORMS
|
38
40
|
ruby
|
@@ -45,4 +47,4 @@ DEPENDENCIES
|
|
45
47
|
rspec (>= 1.2.9)
|
46
48
|
|
47
49
|
BUNDLED WITH
|
48
|
-
|
50
|
+
2.3.5
|
data/README.md
CHANGED
@@ -45,6 +45,8 @@ Learn more:
|
|
45
45
|
Columns to ignore, starts from 1
|
46
46
|
--money-column 2
|
47
47
|
Column number of the money column, starts from 1
|
48
|
+
--money-columns 2,3
|
49
|
+
Column number of the money columns, starts from 1 (1 or 2 columns)
|
48
50
|
--raw-money
|
49
51
|
Don't format money column (for stocks)
|
50
52
|
--date-column 3
|
data/bin/build-new-version.sh
CHANGED
@@ -5,7 +5,7 @@ set -e
|
|
5
5
|
VERSION=$1
|
6
6
|
|
7
7
|
echo "Install github_changelog_generator"
|
8
|
-
|
8
|
+
gem install --user github_changelog_generator
|
9
9
|
|
10
10
|
echo "Update 'lib/reckon/version.rb'"
|
11
11
|
echo -e "module Reckon\n VERSION=\"$VERSION\"\nend" > lib/reckon/version.rb
|
data/lib/reckon/csv_parser.rb
CHANGED
@@ -126,13 +126,6 @@ module Reckon
|
|
126
126
|
return results.sort_by { |n| n[:index] }
|
127
127
|
end
|
128
128
|
|
129
|
-
def found_double_money_column(id1, id2)
|
130
|
-
self.money_column_indices = [id1, id2]
|
131
|
-
puts "It looks like this CSV has two seperate columns for money, one of which shows positive"
|
132
|
-
puts "changes and one of which shows negative changes. If this is true, great. Otherwise,"
|
133
|
-
puts "please report this issue to us so we can take a look!\n"
|
134
|
-
end
|
135
|
-
|
136
129
|
# Some csv files negative/positive amounts are indicated in separate account
|
137
130
|
def detect_sign_column
|
138
131
|
return if columns[0].length <= 2 # This test needs requires more than two rows otherwise will lead to false positives
|
@@ -162,14 +155,30 @@ module Reckon
|
|
162
155
|
def detect_columns
|
163
156
|
results = evaluate_columns(columns)
|
164
157
|
|
158
|
+
# We keep money_column options for backwards compatibility reasons, while
|
159
|
+
# adding option to specify multiple money_columns
|
165
160
|
if options[:money_column]
|
166
161
|
self.money_column_indices = [options[:money_column] - 1]
|
162
|
+
|
163
|
+
# One or two columns can be specified as money_columns
|
164
|
+
elsif options[:money_columns]
|
165
|
+
if options[:money_columns].length == 1
|
166
|
+
self.money_column_indices = [options[:money_column] - 1]
|
167
|
+
elsif options[:money_columns].length == 2
|
168
|
+
in_col, out_col = options[:money_columns]
|
169
|
+
self.money_column_indices = [in_col -1, out_col -1]
|
170
|
+
else
|
171
|
+
puts "Unable to determine money columns, use --money-columns to specify the 1 or 2 column(s) reckon should use."
|
172
|
+
end
|
173
|
+
|
174
|
+
# If no money_column(s) argument is supplied, try to automatically infer money_column(s)
|
167
175
|
else
|
168
176
|
self.money_column_indices = results.select { |n| n[:is_money_column] }.map { |n| n[:index] }
|
169
177
|
if self.money_column_indices.length == 1
|
170
178
|
puts "Using column #{money_column_indices.first + 1} as the money column. Use --money-colum to specify a different one."
|
171
179
|
elsif self.money_column_indices.length == 2
|
172
|
-
|
180
|
+
puts "Using columns #{money_column_indices[0] + 1} and #{money_column_indices[1] + 1} as money column. Use --money-columns to specify different ones."
|
181
|
+
self.money_column_indices = self.money_column_indices[0..1]
|
173
182
|
else
|
174
183
|
puts "Unable to determine a money column, use --money-column to specify the column reckon should use."
|
175
184
|
end
|
data/lib/reckon/options.rb
CHANGED
@@ -44,6 +44,10 @@ module Reckon
|
|
44
44
|
options[:money_column] = col
|
45
45
|
end
|
46
46
|
|
47
|
+
opts.on("", "--money-columns 2,3", "Column number of the money columns, starts from 1 (1 or 2 columns)") do |ignore|
|
48
|
+
options[:money_columns] = ignore.split(",").map(&:to_i)
|
49
|
+
end
|
50
|
+
|
47
51
|
opts.on("", "--raw-money", "Don't format money column (for stocks)") do |n|
|
48
52
|
options[:raw] = n
|
49
53
|
end
|
data/lib/reckon/version.rb
CHANGED
data/reckon.gemspec
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
Test::Bank
|
data/spec/integration/test.sh
CHANGED
@@ -31,7 +31,7 @@ main () {
|
|
31
31
|
TEST_DIR=$(dirname "$t")
|
32
32
|
TEST_LOG=$(mktemp)
|
33
33
|
pushd "$TEST_DIR" >/dev/null || exit 1
|
34
|
-
if [[ -e "cli_input.
|
34
|
+
if [[ -e "cli_input.txt" ]]; then
|
35
35
|
cli_test >$TEST_LOG 2>&1
|
36
36
|
else
|
37
37
|
unattended_test >$TEST_LOG 2>&1
|
@@ -56,10 +56,8 @@ main () {
|
|
56
56
|
|
57
57
|
cli_test () {
|
58
58
|
OUTPUT_FILE=$(mktemp)
|
59
|
-
|
60
|
-
|
61
|
-
eval $TEST_CMD 2>&1
|
62
|
-
ERROR=0
|
59
|
+
TEST_CMD="$RECKON_CMD --table-output-file $OUTPUT_FILE $(cat test_args)"
|
60
|
+
cat cli_input.txt | $TEST_CMD
|
63
61
|
TEST_DIFF=$(diff -u "$OUTPUT_FILE" expected_output)
|
64
62
|
|
65
63
|
# ${#} is character length, test that there was no output from diff
|
@@ -73,7 +71,7 @@ cli_test () {
|
|
73
71
|
unattended_test() {
|
74
72
|
OUTPUT_FILE=$(mktemp)
|
75
73
|
TEST_CMD="$RECKON_CMD -o $OUTPUT_FILE $(cat test_args)"
|
76
|
-
eval $TEST_CMD 2>&1
|
74
|
+
eval "$TEST_CMD" 2>&1
|
77
75
|
ERROR=0
|
78
76
|
|
79
77
|
compare_output "$OUTPUT_FILE"
|
@@ -114,11 +112,13 @@ compare_output_for () {
|
|
114
112
|
EXPECTED_FILE=$(mktemp)
|
115
113
|
ACTUAL_FILE=$(mktemp)
|
116
114
|
|
117
|
-
|
118
|
-
|
115
|
+
EXPECTED_CMD="$LEDGER -f output.ledger r >$EXPECTED_FILE"
|
116
|
+
echo "$EXPECTED_CMD"
|
117
|
+
eval "$EXPECTED_CMD" || return 1
|
119
118
|
|
120
|
-
|
121
|
-
|
119
|
+
ACTUAL_CMD="$LEDGER -f \"$OUTPUT_FILE\" r"
|
120
|
+
echo "running $ACTUAL_CMD"
|
121
|
+
eval $ACTUAL_CMD >$ACTUAL_FILE || return 1
|
122
122
|
|
123
123
|
TEST_DIFF=$(diff -u "$EXPECTED_FILE" "$ACTUAL_FILE")
|
124
124
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
2021-07-02 Expense; 999
|
2
|
+
Expenses:Unknown
|
3
|
+
Assets:Bank:Checking -$100.00
|
4
|
+
|
5
|
+
2021-07-02 Expense; 999
|
6
|
+
Expenses:Unknown
|
7
|
+
Assets:Bank:Checking -$200.00
|
8
|
+
|
9
|
+
2021-07-08 Transfer; 999; In1
|
10
|
+
Assets:Bank:Checking $200.00
|
11
|
+
Expenses:Unknown
|
12
|
+
|
13
|
+
2021-07-08 Transfer; 999; Out1
|
14
|
+
Expenses:Unknown
|
15
|
+
Assets:Bank:Checking -$500.00
|
16
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
-f input.csv --unattended --account Assets:Bank:Checking --money-columns 3,4
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reckon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Cantino
|
8
8
|
- BlackEdder
|
9
9
|
- Ben Prew
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2023-02-23 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
@@ -96,6 +96,20 @@ dependencies:
|
|
96
96
|
- - ">="
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: 1.8.0
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: matrix
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: 0.4.2
|
106
|
+
type: :runtime
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 0.4.2
|
99
113
|
description: Reckon automagically converts CSV files for use with the command-line
|
100
114
|
accounting tool Ledger. It also helps you to select the correct accounts associated
|
101
115
|
with the CSV data using Bayesian machine learning.
|
@@ -163,7 +177,7 @@ files:
|
|
163
177
|
- spec/integration/another_bank_example/input.csv
|
164
178
|
- spec/integration/another_bank_example/output.ledger
|
165
179
|
- spec/integration/another_bank_example/test_args
|
166
|
-
- spec/integration/ask_for_account/cli_input.
|
180
|
+
- spec/integration/ask_for_account/cli_input.txt
|
167
181
|
- spec/integration/ask_for_account/expected_output
|
168
182
|
- spec/integration/ask_for_account/input.csv
|
169
183
|
- spec/integration/ask_for_account/test_args
|
@@ -251,6 +265,9 @@ files:
|
|
251
265
|
- spec/integration/two_money_columns/input.csv
|
252
266
|
- spec/integration/two_money_columns/output.ledger
|
253
267
|
- spec/integration/two_money_columns/test_args
|
268
|
+
- spec/integration/two_money_columns_manual/input.csv
|
269
|
+
- spec/integration/two_money_columns_manual/output.ledger
|
270
|
+
- spec/integration/two_money_columns_manual/test_args
|
254
271
|
- spec/integration/yyyymmdd_date_example/input.csv
|
255
272
|
- spec/integration/yyyymmdd_date_example/output.ledger
|
256
273
|
- spec/integration/yyyymmdd_date_example/test_args
|
@@ -267,7 +284,7 @@ homepage: https://github.com/cantino/reckon
|
|
267
284
|
licenses:
|
268
285
|
- MIT
|
269
286
|
metadata: {}
|
270
|
-
post_install_message:
|
287
|
+
post_install_message:
|
271
288
|
rdoc_options: []
|
272
289
|
require_paths:
|
273
290
|
- lib
|
@@ -282,8 +299,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
282
299
|
- !ruby/object:Gem::Version
|
283
300
|
version: '0'
|
284
301
|
requirements: []
|
285
|
-
rubygems_version: 3.
|
286
|
-
signing_key:
|
302
|
+
rubygems_version: 3.3.5
|
303
|
+
signing_key:
|
287
304
|
specification_version: 4
|
288
305
|
summary: Utility for interactively converting and labeling CSV files for the Ledger
|
289
306
|
accounting tool.
|
@@ -1,33 +0,0 @@
|
|
1
|
-
#!/usr/bin/expect -f
|
2
|
-
|
3
|
-
|
4
|
-
set timeout 7
|
5
|
-
match_max 100000
|
6
|
-
expect "What is this account named in Ledger |Assets:Bank:Checking|?\r
|
7
|
-
\[1Gā½\[6n"
|
8
|
-
send -- "\[45;2R"
|
9
|
-
expect -exact "\[1G\[K\[6n"
|
10
|
-
send -- "\[45;1R"
|
11
|
-
expect "\[1G\[K\[1G\[1G"
|
12
|
-
send -- "T"
|
13
|
-
expect "\[1GT\[K\[1G\[2G"
|
14
|
-
send -- "e"
|
15
|
-
expect "\[1GTe\[K\[1G\[3G"
|
16
|
-
send -- "s"
|
17
|
-
expect "\[1GTes\[K\[1G\[4G"
|
18
|
-
send -- "t"
|
19
|
-
expect "\[1GTest\[K\[1G\[5G"
|
20
|
-
send -- ":"
|
21
|
-
expect "\[1GTest:\[K\[1G\[6G"
|
22
|
-
send -- ":"
|
23
|
-
expect "\[1GTest::\[K\[1G\[7G"
|
24
|
-
send -- "B"
|
25
|
-
expect "\[1GTest::B\[K\[1G\[8G"
|
26
|
-
send -- "a"
|
27
|
-
expect "\[1GTest::Ba\[K\[1G\[9G"
|
28
|
-
send -- "n"
|
29
|
-
expect "\[1GTest::Ban\[K\[1G\[10G"
|
30
|
-
send -- "k"
|
31
|
-
expect "\[1GTest::Bank\[K\[1G\[11G"
|
32
|
-
send -- "\r"
|
33
|
-
expect eof
|