URI: 
       tpl/collections: Add collections.Reverse - 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 90d0cdf236b54000bfe444ba3a00236faaa28790
   DIR parent 95ef93be667afb480184175a319584fd651abf03
  HTML Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Mon, 11 Nov 2019 18:14:45 +0100
       
       tpl/collections: Add collections.Reverse
       
       Fixes #6499
       
       Diffstat:
         M tpl/collections/collections.go      |      23 +++++++++++++++++++++++
         M tpl/collections/collections_test.go |      19 +++++++++++++++++++
       
       2 files changed, 42 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/tpl/collections/collections.go b/tpl/collections/collections.go
       @@ -417,6 +417,29 @@ func (ns *Namespace) Querify(params ...interface{}) (string, error) {
                return qs.Encode(), nil
        }
        
       +// Reverse creates a copy of slice and reverses it.
       +func (ns *Namespace) Reverse(slice interface{}) (interface{}, error) {
       +        if slice == nil {
       +                return nil, nil
       +        }
       +        v := reflect.ValueOf(slice)
       +
       +        switch v.Kind() {
       +        case reflect.Slice:
       +        default:
       +                return nil, errors.New("argument must be a slice")
       +        }
       +
       +        sliceCopy := reflect.MakeSlice(v.Type(), v.Len(), v.Len())
       +
       +        for i := v.Len() - 1; i >= 0; i-- {
       +                element := sliceCopy.Index(i)
       +                element.Set(v.Index(v.Len() - 1 - i))
       +        }
       +
       +        return sliceCopy.Interface(), nil
       +}
       +
        // Seq creates a sequence of integers.  It's named and used as GNU's seq.
        //
        // Examples:
   DIR diff --git a/tpl/collections/collections_test.go b/tpl/collections/collections_test.go
       @@ -211,6 +211,25 @@ func TestDictionary(t *testing.T) {
                }
        }
        
       +func TestReverse(t *testing.T) {
       +        t.Parallel()
       +        c := qt.New(t)
       +        ns := New(&deps.Deps{})
       +
       +        s := []string{"a", "b", "c"}
       +        reversed, err := ns.Reverse(s)
       +        c.Assert(err, qt.IsNil)
       +        c.Assert(reversed, qt.DeepEquals, []string{"c", "b", "a"}, qt.Commentf(fmt.Sprint(reversed)))
       +        c.Assert(s, qt.DeepEquals, []string{"a", "b", "c"})
       +
       +        reversed, err = ns.Reverse(nil)
       +        c.Assert(err, qt.IsNil)
       +        c.Assert(reversed, qt.IsNil)
       +        _, err = ns.Reverse(43)
       +        c.Assert(err, qt.Not(qt.IsNil))
       +
       +}
       +
        func TestEchoParam(t *testing.T) {
                t.Parallel()
                c := qt.New(t)