Skip to content

Commit

Permalink
tpl: Add strings.TrimLeft and TrimRight
Browse files Browse the repository at this point in the history
  • Loading branch information
moorereason authored and bep committed Aug 18, 2017
1 parent 08f48b9 commit 7674ad7
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 0 deletions.
14 changes: 14 additions & 0 deletions tpl/strings/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,20 @@ func init() {
},
)

ns.AddMethodMapping(ctx.TrimLeft,
nil,
[][2]string{
{`{{ "aabbaa" | strings.TrimLeft "a" }}`, `bbaa`},
},
)

ns.AddMethodMapping(ctx.TrimRight,
nil,
[][2]string{
{`{{ "aabbaa" | strings.TrimRight "a" }}`, `aabb`},
},
)

ns.AddMethodMapping(ctx.Title,
[]string{"title"},
[][2]string{
Expand Down
32 changes: 32 additions & 0 deletions tpl/strings/strings.go
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,22 @@ func (ns *Namespace) Trim(s, cutset interface{}) (string, error) {
return _strings.Trim(ss, sc), nil
}

// TrimLeft returns a slice of the string s with all leading characters
// contained in cutset removed.
func (ns *Namespace) TrimLeft(cutset, s interface{}) (string, error) {
ss, err := cast.ToStringE(s)
if err != nil {
return "", err
}

sc, err := cast.ToStringE(cutset)
if err != nil {
return "", err
}

return _strings.TrimLeft(ss, sc), nil
}

// TrimPrefix returns s without the provided leading prefix string. If s doesn't
// start with prefix, s is returned unchanged.
func (ns *Namespace) TrimPrefix(s, prefix interface{}) (string, error) {
Expand All @@ -363,6 +379,22 @@ func (ns *Namespace) TrimPrefix(s, prefix interface{}) (string, error) {
return _strings.TrimPrefix(ss, sx), nil
}

// TrimRight returns a slice of the string s with all trailing characters
// contained in cutset removed.
func (ns *Namespace) TrimRight(cutset, s interface{}) (string, error) {
ss, err := cast.ToStringE(s)
if err != nil {
return "", err
}

sc, err := cast.ToStringE(cutset)
if err != nil {
return "", err
}

return _strings.TrimRight(ss, sc), nil
}

// TrimSuffix returns s without the provided trailing suffix string. If s
// doesn't end with suffix, s is returned unchanged.
func (ns *Namespace) TrimSuffix(s, suffix interface{}) (string, error) {
Expand Down
70 changes: 70 additions & 0 deletions tpl/strings/strings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -574,6 +574,41 @@ func TestTrim(t *testing.T) {
}
}

func TestTrimLeft(t *testing.T) {
t.Parallel()

for i, test := range []struct {
s interface{}
cutset interface{}
expect interface{}
}{
{"abba", "a", "bba"},
{"abba", "ab", ""},
{"<tag>", "<>", "tag>"},
{`"quote"`, `"`, `quote"`},
{1221, "1", "221"},
{1221, "12", ""},
{"007", "0", "7"},
{template.HTML("<tag>"), "<>", "tag>"},
{[]byte("<tag>"), "<>", "tag>"},
// errors
{"", tstNoStringer{}, false},
{tstNoStringer{}, "", false},
} {
errMsg := fmt.Sprintf("[%d] %v", i, test)

result, err := ns.TrimLeft(test.cutset, test.s)

if b, ok := test.expect.(bool); ok && !b {
require.Error(t, err, errMsg)
continue
}

require.NoError(t, err, errMsg)
assert.Equal(t, test.expect, result, errMsg)
}
}

func TestTrimPrefix(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -604,6 +639,41 @@ func TestTrimPrefix(t *testing.T) {
}
}

func TestTrimRight(t *testing.T) {
t.Parallel()

for i, test := range []struct {
s interface{}
cutset interface{}
expect interface{}
}{
{"abba", "a", "abb"},
{"abba", "ab", ""},
{"<tag>", "<>", "<tag"},
{`"quote"`, `"`, `"quote`},
{1221, "1", "122"},
{1221, "12", ""},
{"007", "0", "007"},
{template.HTML("<tag>"), "<>", "<tag"},
{[]byte("<tag>"), "<>", "<tag"},
// errors
{"", tstNoStringer{}, false},
{tstNoStringer{}, "", false},
} {
errMsg := fmt.Sprintf("[%d] %v", i, test)

result, err := ns.TrimRight(test.cutset, test.s)

if b, ok := test.expect.(bool); ok && !b {
require.Error(t, err, errMsg)
continue
}

require.NoError(t, err, errMsg)
assert.Equal(t, test.expect, result, errMsg)
}
}

func TestTrimSuffix(t *testing.T) {
t.Parallel()

Expand Down

0 comments on commit 7674ad7

Please sign in to comment.