From: Cameron Moore Date: Wed, 10 May 2017 01:24:23 +0000 (-0500) Subject: tpl/time: Support overlapping namespace and template func X-Git-Tag: v0.21~11 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=3954160a;p=brevno-suite%2Fhugo tpl/time: Support overlapping namespace and template func Fixes #3421 --- diff --git a/tpl/time/init.go b/tpl/time/init.go index 33f8a7db..9f9cf275 100644 --- a/tpl/time/init.go +++ b/tpl/time/init.go @@ -25,8 +25,26 @@ func init() { ctx := New() ns := &internal.TemplateFuncsNamespace{ - Name: name, - Context: func() interface{} { return ctx }, + Name: name, + Context: func(v ...interface{}) interface{} { + // Handle overlapping "time" namespace and func. + // + // If no args are passed to `time`, assume namespace usage and + // return namespace context. + // + // If args are passed, show a deprecation warning and attempt to + // simulate the old "as time" behavior. + + if len(v) == 0 { + return ctx + } + + t, err := ctx.AsTime(v[0]) + if err != nil { + return err + } + return t + }, } ns.AddMethodMapping(ctx.Format, @@ -42,7 +60,7 @@ func init() { ) ns.AddMethodMapping(ctx.AsTime, - []string{"asTime"}, // TODO(bep) handle duplicate + []string{"asTime"}, [][2]string{ {`{{ (asTime "2015-01-21").Year }}`, `2015`}, }, diff --git a/tpl/time/init_test.go b/tpl/time/init_test.go index a41d8e4f..fd49dc4b 100644 --- a/tpl/time/init_test.go +++ b/tpl/time/init_test.go @@ -34,5 +34,5 @@ func TestInit(t *testing.T) { } require.True(t, found) - require.IsType(t, &Namespace{}, ns.Context.(func() interface{})()) + require.IsType(t, &Namespace{}, ns.Context.(func(v ...interface{}) interface{})()) }