From 68fba6b74611e89e22bc6f1d5a386695fa103f6d Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Wed, 25 Oct 2023 07:52:05 -0600 Subject: [PATCH] thar we GO --- cmd/clitest/main.go | 25 +++++++++++++++++++++---- ledger/like.go | 8 +++++--- ledger/like_test.go | 15 +++++++++++++++ 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/cmd/clitest/main.go b/cmd/clitest/main.go index a0dc73e..444ae0e 100644 --- a/cmd/clitest/main.go +++ b/cmd/clitest/main.go @@ -11,7 +11,10 @@ import ( func main() { foo := flag.String("foo", "bal", "bal or reg") - likePattern := flag.String("like", ".", "regexp to match") + likeName := flag.String("like", ".", "regexp to match") + likeBefore := flag.String("like-before", "9", "date str to compare") + likeAfter := flag.String("like-after", "0", "date str to compare") + likeLedger := flag.Bool("like-ledger", false, "limit data to these -like-* rather than zoom to these -like-*") flag.Parse() if flag.NArg() < 1 { @@ -26,8 +29,16 @@ func main() { if err != nil { panic(err) } - like := ledger.LikeName(*likePattern) - deltas = deltas.Like(like) + like := []ledger.Like{ledger.LikeName(*likeName)} + if *likeLedger { + like = append(like, ledger.LikeBefore(*likeBefore)) + like = append(like, ledger.LikeAfter(*likeAfter)) + deltas = deltas.Like(like...) + } else { + deltas = deltas.Like(like...) + like = append(like, ledger.LikeBefore(*likeBefore)) + like = append(like, ledger.LikeAfter(*likeAfter)) + } switch *foo { case "reg": @@ -36,7 +47,13 @@ func main() { }) register := deltas.Register() for i := range deltas { - fmt.Printf("%s (%+v)\n", deltas[i].Debug(), register[deltas[i].Date][deltas[i].Name].Debug()) + all := true + for _, like := range like { + all = all && like(deltas[i]) + } + if all { + fmt.Printf("%s (%+v)\n", deltas[i].Debug(), register[deltas[i].Date][deltas[i].Name].Debug()) + } } case "bal": for k, v := range deltas.Balances() { diff --git a/ledger/like.go b/ledger/like.go index de3c31b..4461801 100644 --- a/ledger/like.go +++ b/ledger/like.go @@ -1,6 +1,8 @@ package ledger -import "regexp" +import ( + "regexp" +) type Like func(Delta) bool @@ -8,13 +10,13 @@ type likes []Like func LikeBefore(date string) Like { return func(d Delta) bool { - return date <= d.Date + return date >= d.Date } } func LikeAfter(date string) Like { return func(d Delta) bool { - return date >= d.Date + return date <= d.Date } } diff --git a/ledger/like_test.go b/ledger/like_test.go index 7517df6..6ad6325 100644 --- a/ledger/like_test.go +++ b/ledger/like_test.go @@ -2,6 +2,21 @@ package ledger import "testing" +func TestLikeBeforeAfter(t *testing.T) { + if got := LikeBefore("9")(Delta{Date: "2021"}); !got { + t.Error("got 2021 is NOT before 9") + } + if got := LikeBefore("1")(Delta{Date: "2021"}); got { + t.Error("got 2021 IS before 1") + } + if got := LikeAfter("9")(Delta{Date: "2021"}); got { + t.Error("got 2021 IS after 9") + } + if got := LikeAfter("1")(Delta{Date: "2021"}); !got { + t.Error("got 2021 is NOT after 1") + } +} + func TestLikeName(t *testing.T) { delta := Delta{Name: "x"} if got := LikeName("^x$")(delta); !got {