quickpep 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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 �