mercury_banking 0.5.34 → 0.5.37

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: 30960a19dc6f93e69961414fa8eaa97d39821b5143c1c68f745d95f73f71fe38
4
- data.tar.gz: 67b8f43f1035cd73bb266a82c306844781973c0cb51dcd2a2c8b9ef02c764c71
3
+ metadata.gz: d911a07f674d64b6c7f51721e61f6206bf8df0617a2ff49359fe60b0c21bfd67
4
+ data.tar.gz: 38ea8c7134a967578e272a579f584551aee9291704d801334282f668a92c9650
5
5
  SHA512:
6
- metadata.gz: 947d1a012d252ad361cd629216cf4376a7580b947975f0f776b1f58bce82eb7f7fb6eaa0c737a194e3eff552b6e0a864c0aa2d8a5d6a2dd0e9ea16ffe09613b5
7
- data.tar.gz: 40e68e11df82741dfa756e43a8d58dc335a03b9582489dec803a40785cda0abc1a4b03ff440bc5a3bb49db35c7f66d0e8c8f19b5546ee0bb86adcc4073ab7563
6
+ metadata.gz: e3c9026d8ddf19000481a2ade598537f0d8d499941e789c47615bdace60b90f96ba38928f4ba8ada644966cefb9458a3ece9d15b1f1743a46e0b6b4790eee45f
7
+ data.tar.gz: efd73dbe4b0020e26e235775dab67d1b728ca545404ddb6471020d1e75f21139e670ec045222538a51df49e45a5777afad1e31c9e1729ad1d20a804dadd896e9
data/Gemfile CHANGED
@@ -9,7 +9,7 @@ gem 'dotenv'
9
9
  gem 'activesupport'
10
10
  gem 'terminal-table'
11
11
  gem 'pry'
12
- gem 'webmock'
12
+ gem 'webmock', '~> 3.18'
13
13
  gem 'thor'
14
14
  gem 'symmetric-encryption'
15
15
  gem 'lockbox'
data/Gemfile.lock CHANGED
@@ -1,8 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mercury_banking (0.5.34)
4
+ mercury_banking (0.5.37)
5
5
  activesupport (~> 7.0.0)
6
+ dotenv (~> 2.8)
7
+ fiddle (~> 1.1)
8
+ json (~> 2.6)
9
+ lockbox (~> 1.1)
10
+ logger (~> 1.5)
6
11
  symmetric-encryption (~> 4.6.0)
7
12
  terminal-table (~> 1.8.0)
8
13
  thor (~> 1.2.0)
@@ -36,12 +41,14 @@ GEM
36
41
  descendants_tracker (0.0.4)
37
42
  thread_safe (~> 0.3, >= 0.3.1)
38
43
  diff-lcs (1.6.0)
39
- dotenv (3.1.7)
44
+ dotenv (2.8.1)
45
+ fiddle (1.1.2)
40
46
  hashdiff (1.1.2)
41
47
  i18n (1.14.7)
42
48
  concurrent-ruby (~> 1.0)
43
49
  json (2.10.1)
44
- lockbox (2.0.1)
50
+ lockbox (1.4.1)
51
+ logger (1.6.6)
45
52
  method_source (1.1.0)
46
53
  minitest (5.25.4)
47
54
  parallel (1.26.3)
@@ -131,7 +138,7 @@ DEPENDENCIES
131
138
  symmetric-encryption
132
139
  terminal-table
133
140
  thor
134
- webmock
141
+ webmock (~> 3.18)
135
142
 
136
143
  RUBY VERSION
137
144
  ruby 3.3.5p100
@@ -461,12 +461,27 @@ module MercuryBanking
461
461
  end
462
462
 
463
463
  def write_ledger_account_declarations(file, transactions)
464
- # Get unique account names from transactions
465
- account_names = transactions.map { |t| t["accountName"] || "Unknown Account" }.uniq
464
+ # Get unique accounts from transactions
465
+ accounts = transactions.map do |t|
466
+ {
467
+ "name" => t["accountName"] || "Unknown Account",
468
+ "number" => t["accountNumber"]
469
+ }
470
+ end.uniq { |a| [a["name"], a["number"]] }
466
471
 
467
472
  # Define accounts dynamically based on transaction data
468
- account_names.each do |account_name|
469
- file.puts "account Assets:#{account_name}"
473
+ accounts.each do |account|
474
+ account_name = account["name"]
475
+ account_number = account["number"]
476
+
477
+ # Format the account name to include the account number if available
478
+ formatted_account_name = if account_number
479
+ "#{account_name} #{account_number.to_s[-4..-1]}"
480
+ else
481
+ account_name
482
+ end
483
+
484
+ file.puts "account Assets:#{formatted_account_name}"
470
485
  end
471
486
  file.puts "account Expenses:Unknown"
472
487
  file.puts "account Income:Unknown"
@@ -490,23 +505,31 @@ module MercuryBanking
490
505
  description = transaction["bankDescription"] || transaction["externalMemo"] || "Unknown transaction"
491
506
  amount = transaction["amount"]
492
507
  account_name = transaction["accountName"] || "Unknown Account"
508
+ account_number = transaction["accountNumber"]
493
509
 
494
510
  file.puts "#{date} #{description}"
495
511
  file.puts " ; Transaction ID: #{transaction["id"]}"
496
512
  file.puts " ; Status: #{transaction["status"]}"
497
513
  file.puts " ; Reconciled: No"
498
514
 
499
- write_ledger_postings(file, amount, account_name)
515
+ write_ledger_postings(file, amount, account_name, account_number)
500
516
  file.puts
501
517
  end
502
518
 
503
- def write_ledger_postings(file, amount, account_name)
519
+ def write_ledger_postings(file, amount, account_name, account_number = nil)
520
+ # Format the account name to include the account number if available
521
+ formatted_account_name = if account_number
522
+ "#{account_name} #{account_number.to_s[-4..-1]}"
523
+ else
524
+ account_name
525
+ end
526
+
504
527
  if amount > 0
505
528
  file.puts " Income:Unknown $-#{format("%.2f", amount)}"
506
- file.puts " Assets:#{account_name} $#{format("%.2f", amount)}"
529
+ file.puts " Assets:#{formatted_account_name} $#{format("%.2f", amount)}"
507
530
  else
508
531
  file.puts " Expenses:Unknown $#{format("%.2f", amount.abs)}"
509
- file.puts " Assets:#{account_name} $-#{format("%.2f", amount.abs)}"
532
+ file.puts " Assets:#{formatted_account_name} $-#{format("%.2f", amount.abs)}"
510
533
  end
511
534
  end
512
535
 
@@ -529,14 +552,30 @@ module MercuryBanking
529
552
  end
530
553
 
531
554
  def write_beancount_account_declarations(file, transactions)
532
- # Get unique account names from transactions
533
- account_names = transactions.map { |t| t["accountName"] || "Unknown Account" }.uniq
555
+ # Get unique accounts from transactions
556
+ accounts = transactions.map do |t|
557
+ {
558
+ "name" => t["accountName"] || "Unknown Account",
559
+ "number" => t["accountNumber"]
560
+ }
561
+ end.uniq { |a| [a["name"], a["number"]] }
534
562
 
535
563
  # Define accounts dynamically based on transaction data
536
- account_names.each do |account_name|
564
+ accounts.each do |account|
565
+ account_name = account["name"]
566
+ account_number = account["number"]
567
+
537
568
  # Sanitize account name for beancount format
538
569
  safe_account_name = account_name.gsub(/[^a-zA-Z0-9]/, '-')
539
- file.puts "1970-01-01 open Assets:#{safe_account_name}"
570
+
571
+ # Format the account name to include the account number if available
572
+ formatted_account_name = if account_number
573
+ "#{safe_account_name}-#{account_number.to_s[-4..-1]}"
574
+ else
575
+ safe_account_name
576
+ end
577
+
578
+ file.puts "1970-01-01 open Assets:#{formatted_account_name}"
540
579
  end
541
580
  file.puts "1970-01-01 open Expenses:Unknown"
542
581
  file.puts "1970-01-01 open Income:Unknown"
@@ -560,6 +599,8 @@ module MercuryBanking
560
599
  description = transaction["bankDescription"] || transaction["externalMemo"] || "Unknown transaction"
561
600
  amount = transaction["amount"]
562
601
  account_name = transaction["accountName"] || "Unknown Account"
602
+ account_number = transaction["accountNumber"]
603
+
563
604
  # Sanitize account name for beancount format
564
605
  safe_account_name = account_name.gsub(/[^a-zA-Z0-9]/, '-')
565
606
 
@@ -568,17 +609,24 @@ module MercuryBanking
568
609
  file.puts " ; Status: #{transaction["status"]}"
569
610
  file.puts " ; Reconciled: No"
570
611
 
571
- write_beancount_postings(file, amount, safe_account_name)
612
+ write_beancount_postings(file, amount, safe_account_name, account_number)
572
613
  file.puts
573
614
  end
574
615
 
575
- def write_beancount_postings(file, amount, account_name)
616
+ def write_beancount_postings(file, amount, account_name, account_number = nil)
617
+ # Format the account name to include the account number if available
618
+ formatted_account_name = if account_number
619
+ "#{account_name}-#{account_number.to_s[-4..-1]}"
620
+ else
621
+ account_name
622
+ end
623
+
576
624
  if amount > 0
577
625
  file.puts " Income:Unknown -#{format("%.2f", amount)} USD"
578
- file.puts " Assets:#{account_name} #{format("%.2f", amount)} USD"
626
+ file.puts " Assets:#{formatted_account_name} #{format("%.2f", amount)} USD"
579
627
  else
580
628
  file.puts " Expenses:Unknown #{format("%.2f", amount.abs)} USD"
581
- file.puts " Assets:#{account_name} -#{format("%.2f", amount.abs)} USD"
629
+ file.puts " Assets:#{formatted_account_name} -#{format("%.2f", amount.abs)} USD"
582
630
  end
583
631
  end
584
632
  end
@@ -1,3 +1,3 @@
1
1
  module MercuryBanking
2
- VERSION = "0.5.34"
2
+ VERSION = "0.5.37"
3
3
  end
@@ -27,11 +27,21 @@ Gem::Specification.new do |spec|
27
27
  spec.bindir = "bin"
28
28
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
29
29
  spec.require_paths = ["lib"]
30
+
31
+ # Development dependencies
30
32
  spec.add_development_dependency "rake", "~> 13.0"
31
33
  spec.add_development_dependency 'pry', '>= 0'
32
34
  spec.add_development_dependency "rspec", "~> 3.0"
35
+ spec.add_development_dependency 'webmock', '~> 3.18'
36
+
37
+ # Runtime dependencies
38
+ spec.add_dependency 'dotenv', '~> 2.8'
33
39
  spec.add_dependency 'thor', '~> 1.2.0'
34
40
  spec.add_dependency 'terminal-table', '~> 1.8.0'
35
41
  spec.add_dependency 'activesupport', '~> 7.0.0'
36
42
  spec.add_dependency 'symmetric-encryption', '~> 4.6.0'
43
+ spec.add_dependency 'json', '~> 2.6'
44
+ spec.add_dependency 'lockbox', '~> 1.1'
45
+ spec.add_dependency 'logger', '~> 1.5'
46
+ spec.add_dependency 'fiddle', '~> 1.1'
37
47
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mercury_banking
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.34
4
+ version: 0.5.37
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Siegel
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.18'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.18'
69
+ - !ruby/object:Gem::Dependency
70
+ name: dotenv
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.8'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.8'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: thor
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +136,62 @@ dependencies:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
138
  version: 4.6.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: json
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.6'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '2.6'
153
+ - !ruby/object:Gem::Dependency
154
+ name: lockbox
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '1.1'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.1'
167
+ - !ruby/object:Gem::Dependency
168
+ name: logger
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '1.5'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '1.5'
181
+ - !ruby/object:Gem::Dependency
182
+ name: fiddle
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '1.1'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '1.1'
111
195
  description: "Using this gem, you can access all of your accounts and their transaction
112
196
  histories or make payments to other accounts.\n "
113
197
  email: