From f4598a09864bee2689a7630dda83a71a9b9cf55b Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Thu, 22 Dec 2022 14:17:19 -0800 Subject: [PATCH] tpl/collections: Add like operator to where function Closes #11279 --- tpl/collections/integration_test.go | 35 +++++++++++++++++++++++++++++ tpl/collections/where.go | 12 ++++++++++ 2 files changed, 47 insertions(+) diff --git a/tpl/collections/integration_test.go b/tpl/collections/integration_test.go index 7ef0b6c47..a059bfd26 100644 --- a/tpl/collections/integration_test.go +++ b/tpl/collections/integration_test.go @@ -196,3 +196,38 @@ title: "p3" Home: p1|p3| `) } + +// Issue #11279 +func TestWhereLikeOperator(t *testing.T) { + t.Parallel() + files := ` +-- content/p1.md -- +--- +title: P1 +foo: ab +--- +-- content/p2.md -- +--- +title: P2 +foo: abc +--- +-- content/p3.md -- +--- +title: P3 +foo: bc +--- +-- layouts/index.html -- + + ` + b := hugolib.NewIntegrationTestBuilder( + hugolib.IntegrationTestConfig{ + T: t, + TxtarString: files, + }, + ).Build() + b.AssertFileContent("public/index.html", "") +} diff --git a/tpl/collections/where.go b/tpl/collections/where.go index 2904b7cdd..07c2d3deb 100644 --- a/tpl/collections/where.go +++ b/tpl/collections/where.go @@ -21,6 +21,7 @@ import ( "strings" "github.com/gohugoio/hugo/common/hreflect" + "github.com/gohugoio/hugo/common/hstrings" "github.com/gohugoio/hugo/common/maps" ) @@ -272,6 +273,17 @@ func (ns *Namespace) checkCondition(v, mv reflect.Value, op string) (bool, error return false, nil } return false, errors.New("invalid intersect values") + case "like": + if svp != nil && smvp != nil { + re, err := hstrings.GetOrCompileRegexp(*smvp) + if err != nil { + return false, err + } + if re.MatchString(*svp) { + return true, nil + } + return false, nil + } default: return false, errors.New("no such operator") }