From e5bc3b3840dc7927a24f0e69121467c3190f549e Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Mon, 23 Oct 2023 10:38:28 -0600 Subject: [PATCH] impl all --- ledger/delta.go | 9 +++++++++ ledger/file.go | 11 ++--------- ledger/like.go | 11 +++++++++++ 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/ledger/delta.go b/ledger/delta.go index 8fc6509..e062516 100644 --- a/ledger/delta.go +++ b/ledger/delta.go @@ -36,3 +36,12 @@ func newDelta(d time.Time, a ledger.Account) Delta { Currency: USD, // TODO } } + +func (delta Delta) Plus(other Delta) Delta { + return Delta{ + Date: other.Date, + Account: delta.Account, + Value: delta.Value + other.Value, + Currency: other.Currency, + } +} diff --git a/ledger/file.go b/ledger/file.go index 3d94f87..f8e4268 100644 --- a/ledger/file.go +++ b/ledger/file.go @@ -12,7 +12,7 @@ func NewFile(p string) (File, error) { return f, err } -func (file File) Deltas(likes ...Like) ([]Delta, error) { +func (file File) Deltas(like ...Like) ([]Delta, error) { transactions, err := file.transactions() if err != nil { return nil, err @@ -20,14 +20,7 @@ func (file File) Deltas(likes ...Like) ([]Delta, error) { result := make([]Delta, 0, len(transactions)*2) for _, transaction := range transactions { for _, delta := range newDeltas(transaction) { - if got := func() bool { - for _, like := range likes { - if !like(delta) { - return false - } - } - return true - }(); !got { + if !likes(like).all(delta) { continue } result = append(result, delta) diff --git a/ledger/like.go b/ledger/like.go index 3a88a5b..e0d3e16 100644 --- a/ledger/like.go +++ b/ledger/like.go @@ -4,6 +4,8 @@ import "regexp" type Like func(Delta) bool +type likes []Like + func LikeAcc(pattern string) Like { return func(d Delta) bool { return like(pattern, d.Account) @@ -13,3 +15,12 @@ func LikeAcc(pattern string) Like { func like(pattern string, other string) bool { return regexp.MustCompile(pattern).MatchString(other) } + +func (likes likes) all(delta Delta) bool { + for i := range likes { + if !likes[i](delta) { + return false + } + } + return true +}