burglar 0.1.0 → 0.2.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 +4 -4
- data/bin/burglar +18 -10
- data/burglar.gemspec +7 -8
- data/lib/burglar/heist.rb +22 -4
- data/lib/burglar/modules/plaid.rb +12 -12
- data/lib/burglar/version.rb +1 -3
- metadata +19 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25e844e95a2d468f0bcc283db3f4b1e8f5c229d7416d9ce6c801864b50a13674
|
4
|
+
data.tar.gz: 1767116723d58b400f42f80da9929003c22b050a0ddb5959579c0ac6cf3e2fb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a50c49a22f97a600ff75ebf80473a497aeb52c66257526ee5b68cd5cfa9e78fc7ebb45bc23bbdf7eda6d22607cb099e9ccc9fdd8c8ac3a8ab1177ad4ee1f83e4
|
7
|
+
data.tar.gz: 032d386ed122727eb197e25efe77d4ef256967e7e2f18e8a2e27940847ab739c689ecc596c8d09dc3baac7a1575dd584126446dffb7b171c09656cd6c7e60dcd
|
data/bin/burglar
CHANGED
@@ -2,20 +2,14 @@
|
|
2
2
|
|
3
3
|
require 'burglar'
|
4
4
|
require 'mercenary'
|
5
|
-
require 'cymbal'
|
6
|
-
require 'yaml'
|
7
5
|
require 'date'
|
8
6
|
|
9
7
|
def add_common_opts(c)
|
10
8
|
c.option :config, '-c FILE', '--config FILE', 'Config file to load'
|
11
9
|
c.option :begin, '-b DATE', '--begin DATE', 'Beginning of date range'
|
12
10
|
c.option :end, '-e DATE', '--end DATE', 'End of date range'
|
13
|
-
|
14
|
-
|
15
|
-
def load_config(file)
|
16
|
-
file ||= '~/.burglar.yml'
|
17
|
-
file = File.expand_path file
|
18
|
-
Cymbal.symbolize YAML.safe_load(File.read(file))
|
11
|
+
c.option :pending, '-p', '--pending', 'Include pending transactions'
|
12
|
+
c.option :shell, '-s', '--shell', 'Launch a REPL with the burglar object'
|
19
13
|
end
|
20
14
|
|
21
15
|
def date_parse_or_default(string, default)
|
@@ -23,6 +17,16 @@ def date_parse_or_default(string, default)
|
|
23
17
|
Date.parse(string)
|
24
18
|
end
|
25
19
|
|
20
|
+
def launch_shell(res)
|
21
|
+
res.transactions
|
22
|
+
require 'pry'
|
23
|
+
binding.pry # rubocop:disable Lint/Debugger
|
24
|
+
rescue LoadError
|
25
|
+
warn 'Falling back to IRB because Pry failed to load'
|
26
|
+
require 'irb'
|
27
|
+
binding.irb # rubocop:disable Lint/Debugger
|
28
|
+
end
|
29
|
+
|
26
30
|
Mercenary.program(:burglar) do |p|
|
27
31
|
p.version Burglar::VERSION
|
28
32
|
p.description 'Load data from banks'
|
@@ -33,7 +37,11 @@ Mercenary.program(:burglar) do |p|
|
|
33
37
|
p.action do |_, options|
|
34
38
|
options[:end] = date_parse_or_default(options[:end], Date.today)
|
35
39
|
options[:begin] = date_parse_or_default(options[:begin], options[:end] - 30)
|
36
|
-
|
37
|
-
|
40
|
+
res = Burglar.new(options)
|
41
|
+
if options[:shell]
|
42
|
+
launch_shell res
|
43
|
+
else
|
44
|
+
puts res.transactions
|
45
|
+
end
|
38
46
|
end
|
39
47
|
end
|
data/burglar.gemspec
CHANGED
@@ -6,6 +6,7 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.name = 'burglar'
|
7
7
|
s.version = Burglar::VERSION
|
8
8
|
s.date = Time.now.strftime('%Y-%m-%d')
|
9
|
+
s.required_ruby_version = '>= 2.5.0'
|
9
10
|
|
10
11
|
s.summary = 'Tool for parsing data from bank websites'
|
11
12
|
s.description = 'Tool for parsing data from bank websites'
|
@@ -19,14 +20,12 @@ Gem::Specification.new do |s|
|
|
19
20
|
s.executables = ['burglar']
|
20
21
|
|
21
22
|
s.add_dependency 'cymbal', '~> 2.0.0'
|
22
|
-
s.add_dependency 'libledger', '~> 0.0.
|
23
|
+
s.add_dependency 'libledger', '~> 0.0.8'
|
23
24
|
s.add_dependency 'logcabin', '~> 0.1.3'
|
24
|
-
s.add_dependency 'mercenary', '~> 0.
|
25
|
+
s.add_dependency 'mercenary', '~> 0.4.0'
|
25
26
|
|
26
|
-
s.add_development_dependency 'codecov', '~> 0.
|
27
|
-
s.add_development_dependency '
|
28
|
-
s.add_development_dependency '
|
29
|
-
s.add_development_dependency '
|
30
|
-
s.add_development_dependency 'rspec', '~> 3.8.0'
|
31
|
-
s.add_development_dependency 'rubocop', '~> 0.67.2'
|
27
|
+
s.add_development_dependency 'codecov', '~> 0.5.1'
|
28
|
+
s.add_development_dependency 'goodcop', '~> 0.9.3'
|
29
|
+
s.add_development_dependency 'rake', '~> 13.0.3'
|
30
|
+
s.add_development_dependency 'rspec', '~> 3.10.0'
|
32
31
|
end
|
data/lib/burglar/heist.rb
CHANGED
@@ -1,15 +1,21 @@
|
|
1
|
+
require 'cymbal'
|
2
|
+
require 'yaml'
|
3
|
+
|
1
4
|
module Burglar
|
5
|
+
# Default config file
|
6
|
+
DEFAULT_CONFIG_FILE = '~/.burglar.yml'.freeze
|
7
|
+
|
2
8
|
##
|
3
9
|
# Collection of banks
|
4
10
|
class Heist
|
5
11
|
def initialize(params = {})
|
6
|
-
@options = params
|
12
|
+
@options = load_options(params)
|
7
13
|
end
|
8
14
|
|
9
15
|
def banks
|
10
|
-
@banks ||= @options[:banks].
|
11
|
-
|
12
|
-
end
|
16
|
+
@banks ||= @options[:banks].transform_values do |v|
|
17
|
+
Burglar::Bank.new(@options.merge(v))
|
18
|
+
end
|
13
19
|
end
|
14
20
|
|
15
21
|
def transactions
|
@@ -17,5 +23,17 @@ module Burglar
|
|
17
23
|
entries: banks.map { |_, v| v.transactions.entries }.flatten.sort
|
18
24
|
)
|
19
25
|
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def load_config(file)
|
30
|
+
file ||= DEFAULT_CONFIG_FILE
|
31
|
+
file = File.expand_path file
|
32
|
+
Cymbal.symbolize YAML.safe_load(File.read(file))
|
33
|
+
end
|
34
|
+
|
35
|
+
def load_options(params)
|
36
|
+
load_config(params[:config]).merge(params)
|
37
|
+
end
|
20
38
|
end
|
21
39
|
end
|
@@ -12,7 +12,7 @@ module LogCabin
|
|
12
12
|
|
13
13
|
def raw_transactions # rubocop:disable Metrics/MethodLength
|
14
14
|
@raw_transactions ||= all_transactions.map do |row|
|
15
|
-
amount =
|
15
|
+
amount = format('$%.2f', row.amount)
|
16
16
|
name = row.name.downcase
|
17
17
|
action = guess_action(name)
|
18
18
|
state = row.pending ? :pending : :cleared
|
@@ -24,7 +24,8 @@ module LogCabin
|
|
24
24
|
actions: [
|
25
25
|
{ name: action, amount: amount },
|
26
26
|
{ name: account_name }
|
27
|
-
]
|
27
|
+
],
|
28
|
+
tags: { 'transaction_id' => row.transaction_id }
|
28
29
|
)
|
29
30
|
end
|
30
31
|
end
|
@@ -35,8 +36,7 @@ module LogCabin
|
|
35
36
|
@api_client ||= ::Plaid::Client.new(
|
36
37
|
env: 'development',
|
37
38
|
client_id: client_id,
|
38
|
-
secret: secret_key
|
39
|
-
public_key: public_key
|
39
|
+
secret: secret_key
|
40
40
|
)
|
41
41
|
end
|
42
42
|
|
@@ -58,6 +58,7 @@ module LogCabin
|
|
58
58
|
new, total = get_transactions_page(list.length)
|
59
59
|
list += new
|
60
60
|
end
|
61
|
+
list.reject!(&:pending) unless @options[:pending]
|
61
62
|
@all_transactions = list
|
62
63
|
end
|
63
64
|
|
@@ -77,15 +78,18 @@ module LogCabin
|
|
77
78
|
@accounts ||= api_client.accounts.get(access_token)['accounts']
|
78
79
|
end
|
79
80
|
|
81
|
+
def account
|
82
|
+
@account ||= accounts.first if accounts.size == 1
|
83
|
+
@account ||= accounts.find { |x| x['name'] == account_clean_name }
|
84
|
+
end
|
85
|
+
|
80
86
|
def account_id
|
81
|
-
@account_id ||=
|
82
|
-
x['name'] == account_clean_name
|
83
|
-
end['account_id']
|
87
|
+
@account_id ||= account['account_id']
|
84
88
|
end
|
85
89
|
|
86
90
|
def account_clean_name
|
87
91
|
@account_clean_name ||= @options[:name] || raise(
|
88
|
-
'
|
92
|
+
'Account name needed (more than one option) but not provided'
|
89
93
|
)
|
90
94
|
end
|
91
95
|
|
@@ -97,10 +101,6 @@ module LogCabin
|
|
97
101
|
@secret_key ||= creds(PLAID_DOMAIN, 'secret_key')
|
98
102
|
end
|
99
103
|
|
100
|
-
def public_key
|
101
|
-
@public_key ||= creds(PLAID_DOMAIN, 'public_key')
|
102
|
-
end
|
103
|
-
|
104
104
|
def access_token
|
105
105
|
@access_token ||= creds(PLAID_DOMAIN, account_name)
|
106
106
|
end
|
data/lib/burglar/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: burglar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Les Aker
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cymbal
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.0.
|
33
|
+
version: 0.0.8
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.0.
|
40
|
+
version: 0.0.8
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: logcabin
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,98 +58,70 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.4.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 0.4.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: codecov
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.
|
75
|
+
version: 0.5.1
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: fuubar
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 2.3.0
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 2.3.0
|
82
|
+
version: 0.5.1
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: goodcop
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
87
|
- - "~>"
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.
|
89
|
+
version: 0.9.3
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
94
|
- - "~>"
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
96
|
+
version: 0.9.3
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: rake
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
101
|
- - "~>"
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
103
|
+
version: 13.0.3
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
108
|
- - "~>"
|
123
109
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
110
|
+
version: 13.0.3
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
112
|
name: rspec
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
128
114
|
requirements:
|
129
115
|
- - "~>"
|
130
116
|
- !ruby/object:Gem::Version
|
131
|
-
version: 3.
|
117
|
+
version: 3.10.0
|
132
118
|
type: :development
|
133
119
|
prerelease: false
|
134
120
|
version_requirements: !ruby/object:Gem::Requirement
|
135
121
|
requirements:
|
136
122
|
- - "~>"
|
137
123
|
- !ruby/object:Gem::Version
|
138
|
-
version: 3.
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: rubocop
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: 0.67.2
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: 0.67.2
|
124
|
+
version: 3.10.0
|
153
125
|
description: Tool for parsing data from bank websites
|
154
126
|
email: me@lesaker.org
|
155
127
|
executables:
|
@@ -183,7 +155,7 @@ homepage: https://github.com/akerl/burglar
|
|
183
155
|
licenses:
|
184
156
|
- MIT
|
185
157
|
metadata: {}
|
186
|
-
post_install_message:
|
158
|
+
post_install_message:
|
187
159
|
rdoc_options: []
|
188
160
|
require_paths:
|
189
161
|
- lib
|
@@ -191,15 +163,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
191
163
|
requirements:
|
192
164
|
- - ">="
|
193
165
|
- !ruby/object:Gem::Version
|
194
|
-
version:
|
166
|
+
version: 2.5.0
|
195
167
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
196
168
|
requirements:
|
197
169
|
- - ">="
|
198
170
|
- !ruby/object:Gem::Version
|
199
171
|
version: '0'
|
200
172
|
requirements: []
|
201
|
-
rubygems_version: 3.
|
202
|
-
signing_key:
|
173
|
+
rubygems_version: 3.1.2
|
174
|
+
signing_key:
|
203
175
|
specification_version: 4
|
204
176
|
summary: Tool for parsing data from bank websites
|
205
177
|
test_files:
|