quickpep 0.1.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b97633e4858dbf3bb2de75706b1d46b21720f03fdae7ae403900cce56fa0db33
4
+ data.tar.gz: b54fb051c4849b6dc7b1632e3335db8cb790abbd6041501db1b25793a9a67491
5
+ SHA512:
6
+ metadata.gz: e82606e40d2cca4b1318382afe68a45330f27206c2a4fffc9dbd67a0b6bd3698c4a9673fcee92caacf43be4b4685007b6a66f757975665569afb143f219ec0cc
7
+ data.tar.gz: d1d3f7097e8887b68127ba4984aeba58b544c78fa11273fcb9c9286e55ca4408e99853e6b5196020e63e4b449f81131edf98b19ce562bc889cd8b8881b9e900d
checksums.yaml.gz.sig ADDED
Binary file
data/lib/quickpep.rb ADDED
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: quickpep.rb
4
+
5
+ require 'dynarex'
6
+ require 'event_nlp'
7
+
8
+ # Quick Personal Expenses Planner - for people too lazy to use a
9
+ # spreadsheet or finance app
10
+ #
11
+ class QuickPep
12
+
13
+ attr_reader :to_s
14
+
15
+ def initialize(s, balance: 0, currency: '', debug: false)
16
+
17
+ @balance, @currency, @debug = balance, currency, debug
18
+
19
+ @to_s = calc_expenses(s)
20
+
21
+ end
22
+
23
+ private
24
+
25
+ def calc_expenses(s)
26
+
27
+ dx = Dynarex.new(s)
28
+
29
+ h = dx.all.map {|x| [x.title, x]}.to_h
30
+
31
+ date_events = dx.all.flat_map do |rx|
32
+
33
+ title = [rx.title, rx.day, rx.recurring].join(' ')
34
+ puts '1. title: ' + title.inspect if @debug
35
+ e = EventNlp.new()
36
+ e.project(title).map {|x| [x.to_date, e.parse(title).title]}
37
+
38
+ end.clone.sort_by(&:first)
39
+
40
+
41
+ # identify the source of income
42
+ found = dx.all.find {|x| x.amount[0] == '+'}
43
+ income = found.title if found
44
+
45
+ # opening balance
46
+ bal = @balance
47
+
48
+ a = date_events.map do |date, title|
49
+
50
+ puts '2. title: ' + title.inspect if @debug
51
+ credit, debit = 0.0, 0.0
52
+ amount = h[title].amount
53
+
54
+ if amount[0] == '+' then
55
+ credit = amount.gsub(/\D/,'').to_f
56
+ bal +=credit
57
+ else
58
+ debit = amount.gsub(/\D/,'').to_f
59
+ bal -= debit
60
+ end
61
+
62
+ [date, title, debit, credit, bal]
63
+
64
+ end
65
+
66
+ dx2 = Dynarex.new('items/item(date, title, debit, credit, balance)')
67
+
68
+ a.each do |date, title, debit, credit, balance|
69
+
70
+ puts [title, debit, credit, balance].inspect if @debug
71
+
72
+ row = {
73
+ date: date.to_s,
74
+ title: title,
75
+ debit: debit > 0 ? (@currency + "%.2f" % debit) : '',
76
+ credit: credit > 0 ? (@currency + "%.2f" % credit) : '',
77
+ balance: @currency + "%.2f" % balance
78
+ }
79
+
80
+ dx2.create row
81
+ end
82
+
83
+ dx2.to_table
84
+ end
85
+
86
+ end
87
+
data.tar.gz.sig ADDED
Binary file
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: quickpep
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Robertson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjIwNDAyMTU1NDQ0WhcN
15
+ MjMwNDAyMTU1NDQ0WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCjqEVo
17
+ JHgzDqjSKVpPwSfacVZY9Z9TbjHacsPB18o8pdh+qQqHMb37k41Ky2JXXB7PQS1q
18
+ 4XXbUxcx/0aKMIWRZEW1rlgA0w81BIwEbq3BCxthzEyw4SA2ae21Kljs8YsCxoUt
19
+ fBhRdP9px9fr7+ZOpTCgR14ZEyjAJJXN9/8oc1MnIYKsGpKhrmsRPsoHmgVz6azI
20
+ RyLlzqxJZgjOTbj/K0ahFJZc9ShOvvmP801EIwIcL906TwR4Z2MyvkwAVgQpjP4C
21
+ 9uraTfOWw4QcMtUYRE8DLtvjwMe8/mQ3SXFIZQ9IdOVGiBklV0Y9ryLPizuDTbE5
22
+ T4pTNfErD9xgr8H9wd4+rRUM7em9veEVlNWole7eSqD1mxBJHDFUV3bqLO1zpPOc
23
+ P34wa0pXKaV1n7V5m8v/tzpWPOP5iPSya3h3uUpXKvsweHw3XFukDKtoOs2sV++p
24
+ QR/7LWaYLNrJZsJTWcYvZ+l4cftnTGK2vPntROU+ffeIBgQdqZH8toCgdMkCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU8ZvBZx5g
26
+ ZIGa+6XX/FdjkM2BnPwwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
+ BgkqhkiG9w0BAQsFAAOCAYEALspM6toPi8Z92sj2bseE6e8lrHZd4wHgTc7fYL1y
29
+ FKNzyoFYP92s4F0QvKRRUnjX3e8wgkCcH1TXsu/0m0eKX7ihdgwZNPD0RsOSkDlr
30
+ gMAwAwVVgMVml0uL/DJOUx0X5JSRjwMavMTkIKTI4cME/enRzmcx7mRqEwyuMvJ5
31
+ 78a4rEai+a8u3kCtI+OgqlxCbkbD3SUzXMkdfSuwmugxGvS/slqVDRawD8i47c8G
32
+ f0CiyLat7Z3b+ehYvSNP8NWquIaxANawgCiA5wMGamwV5w1DRtqTDDPzoFKILVIM
33
+ soUltlwH2pSRdqJ9kBBpnUClHMrbYJ+XG91DNSxJxSEuSOr6VuG/tgsAxK+PzdSV
34
+ d4whrwLr2vzkdpJKzOcL3q4PdbXnNelM3QIPDWV+zue3oOtVoMGYUxwjv6O1Qv/1
35
+ kmcJnzHNiVwSBry7rnILYU3ouLJeHEtQY1v/S4KqPXGNS1FPvas3Wb429Cui2LtB
36
+ CkYfvLZCZS1SZGB2dGilreNS
37
+ -----END CERTIFICATE-----
38
+ date: 2022-04-02 00:00:00.000000000 Z
39
+ dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: event_nlp
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.6'
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 0.6.4
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '0.6'
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 0.6.4
60
+ - !ruby/object:Gem::Dependency
61
+ name: dynarex
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '1.9'
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 1.9.8
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '1.9'
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 1.9.8
80
+ description:
81
+ email: digital.robertson@gmail.com
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - lib/quickpep.rb
87
+ homepage: https://github.com/jrobertson/quickpep
88
+ licenses:
89
+ - MIT
90
+ metadata: {}
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirements: []
106
+ rubygems_version: 3.2.22
107
+ signing_key:
108
+ specification_version: 4
109
+ summary: Quick Personal Expenses Planner - for people too lazy to use a spreadsheet
110
+ or finance app.
111
+ test_files: []
metadata.gz.sig ADDED
@@ -0,0 +1,3 @@
1
+
2
+ ������a�2i������5X���%���K���|��;vY8��و���7X��K�����h�.6�|�|W�����9)�1��������'���,�W*��nD�&�K�]b��t)�������𻌉�X|�L�"��S?�eE�,OL+��7Ñm��૭y�9� ��S�����P���Z|w�R�&5�bu�h�1��;���T��� #�j]���I�ž�&�3�����O��-�6�����x�;vm��}6�}惛�18�טo���}t�Fk#3s�7�}&nvs��{jl�%RD�JpT�� �D�$��8����V��j����z�
3
+ �-�8�)pT9�E�����$�w�|a �