diff options
author | Cameron Moore <moorereason@gmail.com> | 2017-05-09 20:24:23 -0500 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-05-20 00:00:20 +0300 |
commit | 3954160a21bcde7d4f4c077f9cc9daa610f3e29e (patch) | |
tree | 217ce5d0a0ba3cb56f687a03b7c87a65e28cf522 /tpl | |
parent | 93c5774dd70b63c8b5e9268778a355c50b590bb6 (diff) |
tpl/time: Support overlapping namespace and template func
Fixes #3421
Diffstat (limited to 'tpl')
-rw-r--r-- | tpl/time/init.go | 24 | ||||
-rw-r--r-- | tpl/time/init_test.go | 2 |
2 files changed, 22 insertions, 4 deletions
diff --git a/tpl/time/init.go b/tpl/time/init.go index 33f8a7dbb..9f9cf275f 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 a41d8e4f3..fd49dc4be 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{})()) } |