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 +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +11 -4
- data/lib/mercury_banking/reports/balance_sheet.rb +64 -16
- data/lib/mercury_banking/version.rb +1 -1
- data/mercury_banking.gemspec +10 -0
- metadata +85 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d911a07f674d64b6c7f51721e61f6206bf8df0617a2ff49359fe60b0c21bfd67
|
4
|
+
data.tar.gz: 38ea8c7134a967578e272a579f584551aee9291704d801334282f668a92c9650
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3c9026d8ddf19000481a2ade598537f0d8d499941e789c47615bdace60b90f96ba38928f4ba8ada644966cefb9458a3ece9d15b1f1743a46e0b6b4790eee45f
|
7
|
+
data.tar.gz: efd73dbe4b0020e26e235775dab67d1b728ca545404ddb6471020d1e75f21139e670ec045222538a51df49e45a5777afad1e31c9e1729ad1d20a804dadd896e9
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
mercury_banking (0.5.
|
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 (
|
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 (
|
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
|
465
|
-
|
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
|
-
|
469
|
-
|
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:#{
|
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:#{
|
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
|
533
|
-
|
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
|
-
|
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
|
-
|
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:#{
|
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:#{
|
629
|
+
file.puts " Assets:#{formatted_account_name} -#{format("%.2f", amount.abs)} USD"
|
582
630
|
end
|
583
631
|
end
|
584
632
|
end
|
data/mercury_banking.gemspec
CHANGED
@@ -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.
|
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:
|