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")
                }