mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
parent
a7d182cea1
commit
d1109f590a
3 changed files with 18 additions and 6 deletions
|
@ -184,7 +184,7 @@ path
|
||||||
: A [Glob](https://github.com/gobwas/glob) pattern matching the content path below /content. Expects Unix-styled slashes. Note that this is the virtual path, so it starts at the mount root. The matching support double-asterisks so you can match for patterns like `/blog/*/**` to match anything from the third level and down.
|
: A [Glob](https://github.com/gobwas/glob) pattern matching the content path below /content. Expects Unix-styled slashes. Note that this is the virtual path, so it starts at the mount root. The matching support double-asterisks so you can match for patterns like `/blog/*/**` to match anything from the third level and down.
|
||||||
|
|
||||||
kind
|
kind
|
||||||
: The Page's Kind, e.g. "section".
|
: A Glob pattern matching the Page's Kind(s), e.g. "{home,section}".
|
||||||
|
|
||||||
lang
|
lang
|
||||||
: A Glob pattern matching the Page's language, e.g. "{en,sv}".
|
: A Glob pattern matching the Page's language, e.g. "{en,sv}".
|
||||||
|
|
|
@ -17,11 +17,10 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/common/maps"
|
"github.com/gohugoio/hugo/common/maps"
|
||||||
"github.com/gohugoio/hugo/hugofs/glob"
|
"github.com/gohugoio/hugo/hugofs/glob"
|
||||||
"github.com/mitchellh/mapstructure"
|
"github.com/mitchellh/mapstructure"
|
||||||
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// A PageMatcher can be used to match a Page with Glob patterns.
|
// A PageMatcher can be used to match a Page with Glob patterns.
|
||||||
|
@ -114,8 +113,16 @@ func DecodePageMatcher(m interface{}, v *PageMatcher) error {
|
||||||
|
|
||||||
v.Kind = strings.ToLower(v.Kind)
|
v.Kind = strings.ToLower(v.Kind)
|
||||||
if v.Kind != "" {
|
if v.Kind != "" {
|
||||||
if _, found := kindMap[v.Kind]; !found {
|
g, _ := glob.GetGlob(v.Kind)
|
||||||
return errors.Errorf("%q is not a valid Page Kind", v.Kind)
|
found := false
|
||||||
|
for _, k := range kindMap {
|
||||||
|
if g.Match(k) {
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !found {
|
||||||
|
return errors.Errorf("%q did not match a valid Page Kind", v.Kind)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,12 @@ func TestPageMatcher(t *testing.T) {
|
||||||
|
|
||||||
c.Run("Decode", func(c *qt.C) {
|
c.Run("Decode", func(c *qt.C) {
|
||||||
var v PageMatcher
|
var v PageMatcher
|
||||||
c.Assert(DecodePageMatcher(map[string]interface{}{"kind": "foo"}, &v), qt.Not((qt.IsNil)))
|
c.Assert(DecodePageMatcher(map[string]interface{}{"kind": "foo"}, &v), qt.Not(qt.IsNil))
|
||||||
|
c.Assert(DecodePageMatcher(map[string]interface{}{"kind": "{foo,bar}"}, &v), qt.Not(qt.IsNil))
|
||||||
|
c.Assert(DecodePageMatcher(map[string]interface{}{"kind": "taxonomy"}, &v), qt.IsNil)
|
||||||
|
c.Assert(DecodePageMatcher(map[string]interface{}{"kind": "{taxonomy,foo}"}, &v), qt.IsNil)
|
||||||
|
c.Assert(DecodePageMatcher(map[string]interface{}{"kind": "{taxonomy,term}"}, &v), qt.IsNil)
|
||||||
|
c.Assert(DecodePageMatcher(map[string]interface{}{"kind": "*"}, &v), qt.IsNil)
|
||||||
c.Assert(DecodePageMatcher(map[string]interface{}{"kind": "home", "path": filepath.FromSlash("/a/b/**")}, &v), qt.IsNil)
|
c.Assert(DecodePageMatcher(map[string]interface{}{"kind": "home", "path": filepath.FromSlash("/a/b/**")}, &v), qt.IsNil)
|
||||||
c.Assert(v, qt.Equals, PageMatcher{Kind: "home", Path: "/a/b/**"})
|
c.Assert(v, qt.Equals, PageMatcher{Kind: "home", Path: "/a/b/**"})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue