tpl/collections: Add like operator to where function - hugo - [fork] hugo port for 9front
(HTM) git clone git@git.drkhsh.at/hugo.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Submodules
(DIR) README
(DIR) LICENSE
---
(DIR) commit f4598a09864bee2689a7630dda83a71a9b9cf55b
(DIR) parent dc2a544fac7a3f9cb8bff70d5cbe92b37dee98d1
(HTM) Author: Joe Mooring <joe.mooring@veriphor.com>
Date: Thu, 22 Dec 2022 14:17:19 -0800
tpl/collections: Add like operator to where function
Closes #11279
Diffstat:
M tpl/collections/integration_test.go | 35 +++++++++++++++++++++++++++++++
M tpl/collections/where.go | 12 ++++++++++++
2 files changed, 47 insertions(+), 0 deletions(-)
---
(DIR) diff --git 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 --
+<ul>
+ {{- range where site.RegularPages "Params.foo" "like" "^ab" -}}
+ <li>{{ .Title }}</li>
+ {{- end -}}
+</ul>
+ `
+ b := hugolib.NewIntegrationTestBuilder(
+ hugolib.IntegrationTestConfig{
+ T: t,
+ TxtarString: files,
+ },
+ ).Build()
+ b.AssertFileContent("public/index.html", "<ul><li>P1</li><li>P2</li></ul>")
+}
(DIR) diff --git 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")
}