tpl: Add path.Split template func - 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 01b72eb592d0e0aefc5f7ae42f9f6ff112883bb6
(DIR) parent 61d52f146297950e283ae086d8b1af61099d22a0
(HTM) Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date: Sun, 15 Apr 2018 20:54:22 +0200
tpl: Add path.Split template func
Diffstat:
A tpl/path/init.go | 43 ++++++++++++++++++++++++++++++
A tpl/path/init_test.go | 38 +++++++++++++++++++++++++++++++
A tpl/path/path.go | 60 +++++++++++++++++++++++++++++++
M tpl/tplimpl/template_funcs.go | 1 +
4 files changed, 142 insertions(+), 0 deletions(-)
---
(DIR) diff --git a/tpl/path/init.go b/tpl/path/init.go
@@ -0,0 +1,43 @@
+// Copyright 2018 The Hugo Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package path
+
+import (
+ "github.com/gohugoio/hugo/deps"
+ "github.com/gohugoio/hugo/tpl/internal"
+)
+
+const name = "path"
+
+func init() {
+ f := func(d *deps.Deps) *internal.TemplateFuncsNamespace {
+ ctx := New(d)
+
+ ns := &internal.TemplateFuncsNamespace{
+ Name: name,
+ Context: func(args ...interface{}) interface{} { return ctx },
+ }
+
+ ns.AddMethodMapping(ctx.Split,
+ nil,
+ [][2]string{
+ {`{{ "/my/path/filename.txt" | path.Split }}`, `/my/path/|filename.txt`},
+ },
+ )
+
+ return ns
+
+ }
+ internal.AddTemplateFuncsNamespace(f)
+}
(DIR) diff --git a/tpl/path/init_test.go b/tpl/path/init_test.go
@@ -0,0 +1,38 @@
+// Copyright 2018 The Hugo Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package path
+
+import (
+ "testing"
+
+ "github.com/gohugoio/hugo/deps"
+ "github.com/gohugoio/hugo/tpl/internal"
+ "github.com/stretchr/testify/require"
+)
+
+func TestInit(t *testing.T) {
+ var found bool
+ var ns *internal.TemplateFuncsNamespace
+
+ for _, nsf := range internal.TemplateFuncsNamespaceRegistry {
+ ns = nsf(&deps.Deps{})
+ if ns.Name == name {
+ found = true
+ break
+ }
+ }
+
+ require.True(t, found)
+ require.IsType(t, &Namespace{}, ns.Context())
+}
(DIR) diff --git a/tpl/path/path.go b/tpl/path/path.go
@@ -0,0 +1,60 @@
+// Copyright 2018 The Hugo Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package path
+
+import (
+ "fmt"
+ _path "path"
+
+ "github.com/gohugoio/hugo/deps"
+ "github.com/spf13/cast"
+)
+
+// New returns a new instance of the path-namespaced template functions.
+func New(deps *deps.Deps) *Namespace {
+ return &Namespace{
+ deps: deps,
+ }
+}
+
+// Namespace provides template functions for the "os" namespace.
+type Namespace struct {
+ deps *deps.Deps
+}
+
+// DirFile holds the result from path.Split.
+type DirFile struct {
+ Dir string
+ File string
+}
+
+// Used in test.
+func (df DirFile) String() string {
+ return fmt.Sprintf("%s|%s", df.Dir, df.File)
+}
+
+// Split splits path immediately following the final slash,
+// separating it into a directory and file name component.
+// If there is no slash in path, Split returns an empty dir and
+// file set to path.
+// The returned values have the property that path = dir+file.
+func (ns *Namespace) Split(path interface{}) (DirFile, error) {
+ spath, err := cast.ToStringE(path)
+ if err != nil {
+ return DirFile{}, err
+ }
+ dir, file := _path.Split(spath)
+
+ return DirFile{Dir: dir, File: file}, nil
+}
(DIR) diff --git a/tpl/tplimpl/template_funcs.go b/tpl/tplimpl/template_funcs.go
@@ -34,6 +34,7 @@ import (
_ "github.com/gohugoio/hugo/tpl/math"
_ "github.com/gohugoio/hugo/tpl/os"
_ "github.com/gohugoio/hugo/tpl/partials"
+ _ "github.com/gohugoio/hugo/tpl/path"
_ "github.com/gohugoio/hugo/tpl/safe"
_ "github.com/gohugoio/hugo/tpl/strings"
_ "github.com/gohugoio/hugo/tpl/time"