From 480d358f5a2ae6b8be157fdf941ce0bcd0ebcf1a Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Tue, 24 Oct 2023 12:54:11 -0600 Subject: [PATCH] to multifile always --- ledger/file.go | 17 ++++++----------- ledger/file_test.go | 19 +++++++++++++++---- ledger/transaction.go | 14 +++++++++++++- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/ledger/file.go b/ledger/file.go index 0ff7624..e3ba278 100644 --- a/ledger/file.go +++ b/ledger/file.go @@ -4,20 +4,15 @@ import ( "fmt" ) -type File string +type Files []string -func NewFile(p string) (File, error) { - f := File(p) +func NewFiles(p string, q ...string) (Files, error) { + f := Files(append([]string{p}, q...)) _, err := f.Deltas() return f, err } -func (file File) Balances(like ...Like) (map[string]map[Currency]float64, error) { - deltas, err := file.Deltas(like...) - if err != nil { - return nil, err - } - +func Balances(deltas []Delta) (map[string]map[Currency]float64, error) { result := make(map[string]map[Currency]float64) for _, delta := range deltas { if _, ok := result[delta.Account]; !ok { @@ -32,8 +27,8 @@ func (file File) Balances(like ...Like) (map[string]map[Currency]float64, error) return result, nil } -func (file File) Deltas(like ...Like) ([]Delta, error) { - transactions, err := file.transactions() +func (files Files) Deltas(like ...Like) ([]Delta, error) { + transactions, err := files.transactions() if err != nil { return nil, err } diff --git a/ledger/file_test.go b/ledger/file_test.go index 3bd7d5f..a43633d 100644 --- a/ledger/file_test.go +++ b/ledger/file_test.go @@ -14,7 +14,7 @@ func TestFileTestdata(t *testing.T) { for _, pathd := range paths { path := pathd t.Run(path, func(t *testing.T) { - f, err := NewFile(path) + f, err := NewFiles(path) if err != nil { t.Fatal(err) } @@ -24,13 +24,19 @@ func TestFileTestdata(t *testing.T) { if err != nil { t.Fatal(err) } + for i := range deltas { t.Logf("%+v", deltas[i].Debug()) } }) t.Run("balances", func(t *testing.T) { - balances, err := f.Balances() + deltas, err := f.Deltas() + if err != nil { + t.Fatal(err) + } + + balances, err := Balances(deltas) if err != nil { t.Fatal(err) } @@ -40,7 +46,12 @@ func TestFileTestdata(t *testing.T) { }) t.Run("balances like", func(t *testing.T) { - balances, err := f.Balances(LikeAcc(`AssetAccount:Cash:Fidelity76`)) + deltas, err := f.Deltas(LikeAcc(`AssetAccount:Cash:Fidelity76`)) + if err != nil { + t.Fatal(err) + } + + balances, err := Balances(deltas) if err != nil { t.Fatal(err) } @@ -93,7 +104,7 @@ func TestFileDeltas(t *testing.T) { for name, d := range cases { want := d t.Run(name, func(t *testing.T) { - f, err := NewFile("./testdata/" + name + ".dat") + f, err := NewFiles("./testdata/" + name + ".dat") if err != nil { t.Fatal(err) } diff --git a/ledger/transaction.go b/ledger/transaction.go index dbafcf9..ca759c3 100644 --- a/ledger/transaction.go +++ b/ledger/transaction.go @@ -32,7 +32,19 @@ func (t transactionRecipient) empty() bool { return t == (transactionRecipient{}) } -func (file File) transactions() ([]transaction, error) { +func (files Files) transactions() ([]transaction, error) { + result := make([]transaction, 0) + for i := range files { + some, err := files._transactions(files[i]) + if err != nil { + return nil, err + } + result = append(result, some...) + } + return result, nil +} + +func (files Files) _transactions(file string) ([]transaction, error) { f, err := os.Open(string(file)) if err != nil { return nil, err