URI: 
       Change to variadic int args in Slicestr - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit be84f937169ebcd6b3f6d1d2323fb03feaa416f0
   DIR parent 5b0245ca59e22d90add28b11898ecfd602429e43
  HTML Author: bep <bjorn.erik.pedersen@gmail.com>
       Date:   Mon, 23 Mar 2015 19:18:17 +0100
       
       Change to variadic int args in Slicestr
       
       Makes for a better template api.
       
       Diffstat:
         M tpl/template.go                     |      21 +++++++++++----------
         M tpl/template_test.go                |      23 ++++++++++++-----------
       
       2 files changed, 23 insertions(+), 21 deletions(-)
       ---
   DIR diff --git a/tpl/template.go b/tpl/template.go
       @@ -190,22 +190,23 @@ func compareGetFloat(a interface{}, b interface{}) (float64, float64) {
        
        // Slicing in Slicestr is done by specifying a half-open range with
        // two indices, start and end. 1 and 4 creates a slice including elements 1 through 3.
       -// The start and/or end indices can be omitted by setting one or both of them to -1;
       -// they default to zero and the slice's length respectively
       -func Slicestr(a interface{}, start, end int) (string, error) {
       +// The end index can be omitted, it defaults to the string's length.
       +func Slicestr(a interface{}, startEnd ...int) (string, error) {
                aStr, err := cast.ToStringE(a)
                if err != nil {
                        return "", err
                }
        
       -        if start != -1 && end != -1 {
       -                return aStr[start:end], nil
       -        } else if start == -1 && end == -1 {
       -                return aStr[:], nil
       -        } else if start == -1 {
       -                return aStr[:end], nil
       +        if len(startEnd) > 2 {
       +                return "", errors.New("too many arguments")
       +        }
       +
       +        if len(startEnd) == 2 {
       +                return aStr[startEnd[0]:startEnd[1]], nil
       +        } else if len(startEnd) == 1 {
       +                return aStr[startEnd[0]:], nil
                } else {
       -                return aStr[start:], nil
       +                return aStr[:], nil
                }
        
        }
   DIR diff --git a/tpl/template_test.go b/tpl/template_test.go
       @@ -279,20 +279,21 @@ func TestIn(t *testing.T) {
        func TestSlicestr(t *testing.T) {
                for i, this := range []struct {
                        v1     interface{}
       -                v2     int
       -                v3     int
       +                v2     []int
                        expect interface{}
                }{
       -                {"abc", 1, 2, "b"},
       -                {"abc", 1, 3, "bc"},
       -                {"abc", 0, 1, "a"},
       -                {"abcdef", -1, -1, "abcdef"},
       -                {"abcdef", -1, 2, "ab"},
       -                {"abcdef", 2, -1, "cdef"},
       -                {123, 1, 3, "23"},
       -                {tstNoStringer{}, 0, 1, false},
       +                {"abc", []int{1, 2}, "b"},
       +                {"abc", []int{1, 3}, "bc"},
       +                {"abc", []int{0, 1}, "a"},
       +                {"abcdef", []int{}, "abcdef"},
       +                {"abcdef", []int{0, 6}, "abcdef"},
       +                {"abcdef", []int{0, 2}, "ab"},
       +                {"abcdef", []int{2}, "cdef"},
       +                {123, []int{1, 3}, "23"},
       +                {123, []int{1, 2, 3}, false},
       +                {tstNoStringer{}, []int{0, 1}, false},
                } {
       -                result, err := Slicestr(this.v1, this.v2, this.v3)
       +                result, err := Slicestr(this.v1, this.v2...)
        
                        if b, ok := this.expect.(bool); ok && !b {
                                if err == nil {