reckon 0.7.2 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -5
- data/Gemfile.lock +1 -1
- data/README.md +8 -5
- data/lib/reckon/date_column.rb +3 -2
- data/lib/reckon/ledger_parser.rb +1 -1
- data/lib/reckon/options.rb +5 -1
- data/lib/reckon/version.rb +1 -1
- data/spec/integration/ledger_date_format/compare_cmds +1 -0
- data/spec/integration/ledger_date_format/input.csv +3 -0
- data/spec/integration/ledger_date_format/output.ledger +12 -0
- data/spec/integration/ledger_date_format/test_args +1 -0
- data/spec/integration/test.sh +36 -26
- data/spec/reckon/date_column_spec.rb +12 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fbf144e0683d1b618fbc046ade5af1c9fd37a69c2a62ee393301ce26f9b9a475
|
4
|
+
data.tar.gz: 32fc57d45adec068894497619c357a36482ede4e547a3169a4c8faf95e731a2c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a5cdf653ec68d8360526c131335249fce69c9b51b12824023263621fb743c4c769cf9e9a44aa37108d8d1ef3ad51bba9b9268e36259c7d4597dddf20abf3c368
|
7
|
+
data.tar.gz: 0af870f477d800fb76edf3d7a4e31ef1120d40817b55d8e8da7175bad0e6daa2a981186e5bfc258a46703dd81cb1c07ed805a0260e9472264a5817fd207a9649
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v0.8.0](https://github.com/cantino/reckon/tree/v0.8.0) (2021-08-08)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/cantino/reckon/compare/v0.7.2...v0.8.0)
|
6
|
+
|
7
|
+
**Closed issues:**
|
8
|
+
|
9
|
+
- --date-format '%d/%m/%Y' not working [\#113](https://github.com/cantino/reckon/issues/113)
|
10
|
+
- Reckon behaviour does not match what is explained on README.md [\#112](https://github.com/cantino/reckon/issues/112)
|
11
|
+
- --date-format '%d/%m/%Y' not working [\#111](https://github.com/cantino/reckon/issues/111)
|
12
|
+
- --date-format '%d/ [\#110](https://github.com/cantino/reckon/issues/110)
|
13
|
+
|
14
|
+
**Merged pull requests:**
|
15
|
+
|
16
|
+
- Add ledger-date-format option to specify ledger file date format [\#114](https://github.com/cantino/reckon/pull/114) ([benprew](https://github.com/benprew))
|
17
|
+
|
3
18
|
## [v0.7.2](https://github.com/cantino/reckon/tree/v0.7.2) (2021-04-22)
|
4
19
|
|
5
20
|
[Full Changelog](https://github.com/cantino/reckon/compare/v0.7.1...v0.7.2)
|
@@ -150,6 +165,7 @@
|
|
150
165
|
- Fix bugs in ledger file parsing. Fixes \#56. [\#81](https://github.com/cantino/reckon/pull/81) ([benprew](https://github.com/benprew))
|
151
166
|
- Better file encoding suggestions [\#80](https://github.com/cantino/reckon/pull/80) ([benprew](https://github.com/benprew))
|
152
167
|
- :bug: fix matching algorithm, add logging and a spec helper. Fixes \#73 [\#79](https://github.com/cantino/reckon/pull/79) ([benprew](https://github.com/benprew))
|
168
|
+
- bug: invalid header lines should be ignored, not parsed. [\#78](https://github.com/cantino/reckon/pull/78) ([benprew](https://github.com/benprew))
|
153
169
|
- convert default date format to iso8601 [\#77](https://github.com/cantino/reckon/pull/77) ([benprew](https://github.com/benprew))
|
154
170
|
- Fix rspec failure for ruby 2.3 and 2.4 [\#69](https://github.com/cantino/reckon/pull/69) ([BlackEdder](https://github.com/BlackEdder))
|
155
171
|
- Allow setting of money and date columns by index [\#67](https://github.com/cantino/reckon/pull/67) ([cantino](https://github.com/cantino))
|
@@ -202,11 +218,11 @@
|
|
202
218
|
|
203
219
|
**Merged pull requests:**
|
204
220
|
|
205
|
-
- bug: invalid header lines should be ignored, not parsed. [\#78](https://github.com/cantino/reckon/pull/78) ([benprew](https://github.com/benprew))
|
206
221
|
- Better ISO 8601 dates support [\#49](https://github.com/cantino/reckon/pull/49) ([vzctl](https://github.com/vzctl))
|
207
222
|
- Unattended mode and custom tokens support [\#47](https://github.com/cantino/reckon/pull/47) ([vzctl](https://github.com/vzctl))
|
208
223
|
- \[RFC\] Implement issue \#40: Tab completion [\#46](https://github.com/cantino/reckon/pull/46) ([BlackEdder](https://github.com/BlackEdder))
|
209
224
|
- 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))
|
210
226
|
|
211
227
|
## [v0.3.10](https://github.com/cantino/reckon/tree/v0.3.10) (2014-08-16)
|
212
228
|
|
@@ -214,9 +230,7 @@
|
|
214
230
|
|
215
231
|
**Merged pull requests:**
|
216
232
|
|
217
|
-
- Fix --encoding option [\#41](https://github.com/cantino/reckon/pull/41) ([mamciek](https://github.com/mamciek))
|
218
233
|
- Bumped version number [\#37](https://github.com/cantino/reckon/pull/37) ([BlackEdder](https://github.com/BlackEdder))
|
219
|
-
- Ing csv [\#30](https://github.com/cantino/reckon/pull/30) ([BlackEdder](https://github.com/BlackEdder))
|
220
234
|
|
221
235
|
## [v0.3.9](https://github.com/cantino/reckon/tree/v0.3.9) (2014-02-20)
|
222
236
|
|
@@ -233,12 +247,15 @@
|
|
233
247
|
- Date format [\#35](https://github.com/cantino/reckon/pull/35) ([BlackEdder](https://github.com/BlackEdder))
|
234
248
|
- Added example from a french bank [\#34](https://github.com/cantino/reckon/pull/34) ([BlackEdder](https://github.com/BlackEdder))
|
235
249
|
- Austrian example [\#33](https://github.com/cantino/reckon/pull/33) ([BlackEdder](https://github.com/BlackEdder))
|
250
|
+
- Ing csv [\#30](https://github.com/cantino/reckon/pull/30) ([BlackEdder](https://github.com/BlackEdder))
|
236
251
|
- Further improvements in nationwide csv handling [\#29](https://github.com/cantino/reckon/pull/29) ([BlackEdder](https://github.com/BlackEdder))
|
237
252
|
- Refactor: Add money class [\#28](https://github.com/cantino/reckon/pull/28) ([BlackEdder](https://github.com/BlackEdder))
|
238
253
|
- Initial split of CSVparser from class App [\#27](https://github.com/cantino/reckon/pull/27) ([BlackEdder](https://github.com/BlackEdder))
|
239
254
|
- Updated version of pull request 24: Allow for other currency symbols while calculating money\_score [\#26](https://github.com/cantino/reckon/pull/26) ([BlackEdder](https://github.com/BlackEdder))
|
240
255
|
- Change double column detection [\#23](https://github.com/cantino/reckon/pull/23) ([BlackEdder](https://github.com/BlackEdder))
|
256
|
+
- Added optional argument to contains\_header to skip multiple header lines [\#22](https://github.com/cantino/reckon/pull/22) ([BlackEdder](https://github.com/BlackEdder))
|
241
257
|
- Add a Bitdeli Badge to README [\#20](https://github.com/cantino/reckon/pull/20) ([bitdeli-chef](https://github.com/bitdeli-chef))
|
258
|
+
- Update README to show latest usage info [\#19](https://github.com/cantino/reckon/pull/19) ([purcell](https://github.com/purcell))
|
242
259
|
|
243
260
|
## [v0.3.8](https://github.com/cantino/reckon/tree/v0.3.8) (2013-07-03)
|
244
261
|
|
@@ -255,7 +272,6 @@
|
|
255
272
|
|
256
273
|
**Merged pull requests:**
|
257
274
|
|
258
|
-
- Update README to show latest usage info [\#19](https://github.com/cantino/reckon/pull/19) ([purcell](https://github.com/purcell))
|
259
275
|
- add support for spanish dates dd/mm/yyyy closes \#13 [\#14](https://github.com/cantino/reckon/pull/14) ([mauromorales](https://github.com/mauromorales))
|
260
276
|
- fix issue showing true when parsing the currency option related to \#7 [\#12](https://github.com/cantino/reckon/pull/12) ([mauromorales](https://github.com/mauromorales))
|
261
277
|
|
@@ -265,7 +281,6 @@
|
|
265
281
|
|
266
282
|
**Merged pull requests:**
|
267
283
|
|
268
|
-
- Added optional argument to contains\_header to skip multiple header lines [\#22](https://github.com/cantino/reckon/pull/22) ([BlackEdder](https://github.com/BlackEdder))
|
269
284
|
- Updated the sources to allow for custom curreny [\#11](https://github.com/cantino/reckon/pull/11) ([ghost](https://github.com/ghost))
|
270
285
|
- Add --account option on the commandline [\#10](https://github.com/cantino/reckon/pull/10) ([copiousfreetime](https://github.com/copiousfreetime))
|
271
286
|
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -58,10 +58,13 @@ Learn more:
|
|
58
58
|
--encoding 'UTF-8'
|
59
59
|
Specify an encoding for the CSV file
|
60
60
|
-c, --currency '$' Currency symbol to use - default $ (ex £, EUR)
|
61
|
-
--date-format
|
62
|
-
|
61
|
+
--date-format FORMAT
|
62
|
+
CSV file date format (see `date` for format)
|
63
|
+
--ledger-date-format FORMAT
|
64
|
+
Ledger date format (see `date` for format)
|
63
65
|
-u, --unattended Don't ask questions and guess all the accounts automatically. Use with --learn-from or --account-tokens options.
|
64
66
|
-t, --account-tokens FILE YAML file with manually-assigned tokens for each account (see README)
|
67
|
+
--table-output-file FILE
|
65
68
|
--default-into-account NAME
|
66
69
|
Default into account
|
67
70
|
--default-outof-account NAME
|
@@ -80,13 +83,13 @@ If you find CSV files that it can't parse, send me examples or pull requests!
|
|
80
83
|
You can run reckon in a non-interactive mode.
|
81
84
|
To guess the accounts reckon can use an existing ledger file or a token file with keywords.
|
82
85
|
|
83
|
-
`reckon --unattended -l 2010.dat -f bank.csv -o ledger.dat`
|
86
|
+
`reckon --unattended -a Checking -l 2010.dat -f bank.csv -o ledger.dat`
|
84
87
|
|
85
|
-
`reckon --unattended --account-tokens tokens.yaml -f bank.csv -o ledger.dat`
|
88
|
+
`reckon --unattended -a Checking --account-tokens tokens.yaml -f bank.csv -o ledger.dat`
|
86
89
|
|
87
90
|
In unattended mode, you can use STDIN to read your csv data, by specifying `-` as the argument to `-f`.
|
88
91
|
|
89
|
-
`csv_file_generator | reckon --unattended -l 2010.dat -o ledger.dat -f -`
|
92
|
+
`csv_file_generator | reckon --unattended -a Checking -l 2010.dat -o ledger.dat -f -`
|
90
93
|
|
91
94
|
### Account Tokens
|
92
95
|
|
data/lib/reckon/date_column.rb
CHANGED
@@ -2,12 +2,13 @@ module Reckon
|
|
2
2
|
class DateColumn < Array
|
3
3
|
attr_accessor :endian_precedence
|
4
4
|
def initialize( arr = [], options = {} )
|
5
|
+
@options = options
|
5
6
|
arr.each do |value|
|
6
7
|
if options[:date_format]
|
7
8
|
begin
|
8
9
|
value = Date.strptime(value, options[:date_format])
|
9
10
|
rescue
|
10
|
-
puts "I'm having trouble parsing #{value} with the desired format: #{options[:date_format]}"
|
11
|
+
puts "I'm having trouble parsing '#{value}' with the desired format: #{options[:date_format]}"
|
11
12
|
exit 1
|
12
13
|
end
|
13
14
|
else
|
@@ -53,7 +54,7 @@ module Reckon
|
|
53
54
|
date = self.for(index)
|
54
55
|
return "" if date.nil?
|
55
56
|
|
56
|
-
date.
|
57
|
+
date.strftime(@options[:ledger_date_format] || '%Y-%m-%d')
|
57
58
|
end
|
58
59
|
|
59
60
|
def self.likelihood(entry)
|
data/lib/reckon/ledger_parser.rb
CHANGED
@@ -114,7 +114,7 @@ module Reckon
|
|
114
114
|
|
115
115
|
def initialize(ledger, options = {})
|
116
116
|
@options = options
|
117
|
-
@date_format = options[:date_format] || '%Y-%m-%d'
|
117
|
+
@date_format = options[:ledger_date_format] || options[:date_format] || '%Y-%m-%d'
|
118
118
|
parse(ledger)
|
119
119
|
end
|
120
120
|
|
data/lib/reckon/options.rb
CHANGED
@@ -73,10 +73,14 @@ module Reckon
|
|
73
73
|
options[:currency] = e
|
74
74
|
end
|
75
75
|
|
76
|
-
opts.on("", "--date-format
|
76
|
+
opts.on("", "--date-format FORMAT", "CSV file date format (see `date` for format)") do |d|
|
77
77
|
options[:date_format] = d
|
78
78
|
end
|
79
79
|
|
80
|
+
opts.on("", "--ledger-date-format FORMAT", "Ledger date format (see `date` for format)") do |d|
|
81
|
+
options[:ledger_date_format] = d
|
82
|
+
end
|
83
|
+
|
80
84
|
opts.on("-u", "--unattended", "Don't ask questions and guess all the accounts automatically. Use with --learn-from or --account-tokens options.") do |n|
|
81
85
|
options[:unattended] = n
|
82
86
|
end
|
data/lib/reckon/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
ledger --input-date-format '%d/%m/%Y'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
02/12/2009 BLARG R SH 456930; $1,826.06
|
2
|
+
Assets:Bank:Checking $327.49
|
3
|
+
Income:Unknown
|
4
|
+
|
5
|
+
02/12/2009 Check - 0000000122; 122; $1,750.06
|
6
|
+
Income:Unknown
|
7
|
+
Assets:Bank:Checking -$76.00
|
8
|
+
|
9
|
+
02/12/2009 Check - 0000000112; 112; $1,498.57
|
10
|
+
Income:Unknown
|
11
|
+
Assets:Bank:Checking -$800.00
|
12
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
-f input.csv --unattended --account Assets:Bank:Checking --date-format '%d/%m/%Y' --ledger-date-format '%d/%m/%Y'
|
data/spec/integration/test.sh
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/bin/bash
|
2
2
|
|
3
|
-
# set -x
|
4
|
-
|
5
3
|
set -Euo pipefail
|
6
4
|
|
7
5
|
|
@@ -23,7 +21,7 @@ main () {
|
|
23
21
|
|
24
22
|
echo > test.log
|
25
23
|
|
26
|
-
NUM_TESTS=$(echo "$TESTS" |wc -l)
|
24
|
+
NUM_TESTS=$(echo "$TESTS" |wc -l |awk '{print $1}')
|
27
25
|
|
28
26
|
echo "1..$NUM_TESTS"
|
29
27
|
|
@@ -31,17 +29,19 @@ main () {
|
|
31
29
|
|
32
30
|
for t in $TESTS; do
|
33
31
|
TEST_DIR=$(dirname "$t")
|
32
|
+
TEST_LOG=$(mktemp)
|
34
33
|
pushd "$TEST_DIR" >/dev/null || exit 1
|
35
34
|
if [[ -e "cli_input.exp" ]]; then
|
36
|
-
cli_test
|
35
|
+
cli_test >$TEST_LOG 2>&1
|
37
36
|
else
|
38
|
-
unattended_test
|
37
|
+
unattended_test >$TEST_LOG 2>&1
|
39
38
|
fi
|
40
39
|
|
41
40
|
popd >/dev/null || exit 1
|
42
41
|
# have to save output after popd
|
43
42
|
echo -e "\n\n======>$TEST_DIR" >> test.log
|
44
|
-
echo -e "TEST_CMD
|
43
|
+
echo -e "TEST_CMD: $TEST_CMD" >> test.log
|
44
|
+
cat $TEST_LOG >> test.log
|
45
45
|
|
46
46
|
if [[ $ERROR -ne 0 ]]; then
|
47
47
|
echo -e "not ok $I - $TEST_DIR"
|
@@ -56,11 +56,11 @@ main () {
|
|
56
56
|
|
57
57
|
cli_test () {
|
58
58
|
OUTPUT_FILE=$(mktemp)
|
59
|
-
|
60
|
-
TEST_CMD="expect -d -c 'spawn $
|
61
|
-
|
59
|
+
CLI_CMD="$RECKON_CMD --table-output-file $OUTPUT_FILE $(cat test_args)"
|
60
|
+
TEST_CMD="expect -d -c 'spawn $CLI_CMD' cli_input.exp"
|
61
|
+
eval $TEST_CMD 2>&1
|
62
62
|
ERROR=0
|
63
|
-
TEST_DIFF=$(diff -u "$OUTPUT_FILE"
|
63
|
+
TEST_DIFF=$(diff -u "$OUTPUT_FILE" expected_output)
|
64
64
|
|
65
65
|
# ${#} is character length, test that there was no output from diff
|
66
66
|
if [ ${#TEST_DIFF} -eq 0 ]; then
|
@@ -73,7 +73,7 @@ cli_test () {
|
|
73
73
|
unattended_test() {
|
74
74
|
OUTPUT_FILE=$(mktemp)
|
75
75
|
TEST_CMD="$RECKON_CMD -o $OUTPUT_FILE $(cat test_args)"
|
76
|
-
|
76
|
+
eval $TEST_CMD 2>&1
|
77
77
|
ERROR=0
|
78
78
|
|
79
79
|
compare_output "$OUTPUT_FILE"
|
@@ -87,6 +87,26 @@ test_fail () {
|
|
87
87
|
fi
|
88
88
|
}
|
89
89
|
|
90
|
+
compare_output () {
|
91
|
+
OUTPUT_FILE=$1
|
92
|
+
pwd
|
93
|
+
if [[ -e compare_cmds ]]; then
|
94
|
+
COMPARE_CMDS=$(cat compare_cmds)
|
95
|
+
else
|
96
|
+
COMPARE_CMDS=$'ledger\nhledger'
|
97
|
+
fi
|
98
|
+
|
99
|
+
ERROR=1
|
100
|
+
while IFS= read -r n; do
|
101
|
+
if compare_output_for "$OUTPUT_FILE" "$n"; then
|
102
|
+
ERROR=0
|
103
|
+
else
|
104
|
+
ERROR=1
|
105
|
+
break
|
106
|
+
fi
|
107
|
+
done <<< "$COMPARE_CMDS"
|
108
|
+
}
|
109
|
+
|
90
110
|
compare_output_for () {
|
91
111
|
OUTPUT_FILE=$1
|
92
112
|
LEDGER=$2
|
@@ -94,8 +114,11 @@ compare_output_for () {
|
|
94
114
|
EXPECTED_FILE=$(mktemp)
|
95
115
|
ACTUAL_FILE=$(mktemp)
|
96
116
|
|
97
|
-
$LEDGER -f output.ledger r
|
98
|
-
$LEDGER -f output.ledger r >"$
|
117
|
+
echo $LEDGER -f output.ledger r "$EXPECTED_FILE"
|
118
|
+
eval $LEDGER -f output.ledger r >"$EXPECTED_FILE" || return 1
|
119
|
+
|
120
|
+
echo $LEDGER -f output.ledger r "$ACTUAL_FILE"
|
121
|
+
eval $LEDGER -f output.ledger r >"$ACTUAL_FILE" || return 1
|
99
122
|
|
100
123
|
TEST_DIFF=$(diff -u "$EXPECTED_FILE" "$ACTUAL_FILE")
|
101
124
|
|
@@ -107,17 +130,4 @@ compare_output_for () {
|
|
107
130
|
fi
|
108
131
|
}
|
109
132
|
|
110
|
-
compare_output () {
|
111
|
-
OUTPUT_FILE=$1
|
112
|
-
|
113
|
-
for n in {ledger,hledger}; do
|
114
|
-
if compare_output_for "$OUTPUT_FILE" "$n"; then
|
115
|
-
ERROR=0
|
116
|
-
else
|
117
|
-
ERROR=1
|
118
|
-
return 0
|
119
|
-
fi
|
120
|
-
done
|
121
|
-
}
|
122
|
-
|
123
133
|
main "$@"
|
@@ -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
|
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.
|
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-
|
13
|
+
date: 2021-08-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
@@ -217,6 +217,10 @@ files:
|
|
217
217
|
- spec/integration/inversed_credit_card/input.csv
|
218
218
|
- spec/integration/inversed_credit_card/output.ledger
|
219
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
|
220
224
|
- spec/integration/nationwide/input.csv
|
221
225
|
- spec/integration/nationwide/output.ledger
|
222
226
|
- spec/integration/nationwide/test_args
|