burglar 0.1.0 → 0.2.0

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