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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6cbc26fc77ea4427b7ae6cbfa3d53fb441e0897beafba7797b63a7cd853b4a45
4
- data.tar.gz: 45e247c5fa8886e65d70ebc35e61227f9c64b5012247922b7373ed20aa76a8fd
3
+ metadata.gz: 25e844e95a2d468f0bcc283db3f4b1e8f5c229d7416d9ce6c801864b50a13674
4
+ data.tar.gz: 1767116723d58b400f42f80da9929003c22b050a0ddb5959579c0ac6cf3e2fb1
5
5
  SHA512:
6
- metadata.gz: 7d33eb6451240ee1300b6ecdb2a39792f859aec122084d31470b1ba2fbae0ed3ab50f84ae5d986b4584358c0b8d1d2090811da5de8dcfb749872796a64b42daa
7
- data.tar.gz: 20af4b002fc0e12ae83d54a70a22db7b9580816920fdf6ea0eb02d9392e5c2c3104a289a6ede64423cea94cc12fc1d119d905d9dc0f9f8dc2c7f6bc38306168f
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
- end
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
- config = load_config(options[:config]).merge(options)
37
- puts Burglar.new(config).transactions
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.3'
23
+ s.add_dependency 'libledger', '~> 0.0.8'
23
24
  s.add_dependency 'logcabin', '~> 0.1.3'
24
- s.add_dependency 'mercenary', '~> 0.3.4'
25
+ s.add_dependency 'mercenary', '~> 0.4.0'
25
26
 
26
- s.add_development_dependency 'codecov', '~> 0.1.1'
27
- s.add_development_dependency 'fuubar', '~> 2.3.0'
28
- s.add_development_dependency 'goodcop', '~> 0.7.0'
29
- s.add_development_dependency 'rake', '~> 12.3.0'
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].map do |k, v|
11
- [k, Burglar::Bank.new(@options.merge(v))]
12
- end.to_h
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 = "$#{row.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 ||= accounts.find do |x|
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
- 'No account name provided'
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
@@ -1,7 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
1
  ##
4
2
  # Set the version (needed for Mercenary -v)
5
3
  module Burglar
6
- VERSION = '0.1.0'.freeze
4
+ VERSION = '0.2.0'.freeze
7
5
  end
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.1.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: 2019-05-26 00:00:00.000000000 Z
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.3
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.3
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.3.4
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.3.4
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.1.1
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.1.1
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.7.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.7.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: 12.3.0
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: 12.3.0
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.8.0
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.8.0
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: '0'
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.0.1
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: