Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tpl
diff options
context:
space:
mode:
authorTatsushi Demachi <tdemachi@gmail.com>2014-12-29 08:41:59 +0300
committerbep <bjorn.erik.pedersen@gmail.com>2014-12-29 17:47:50 +0300
commit975f4cf126fa757511a89246cfc14bbf7481b112 (patch)
treea44ea165cff1a00fb955c9433cfb4a9b38d9a084 /tpl
parentfa8ac87d5edfe3435e21579d19e86bba3be2089c (diff)
Refactor tpl codes
- Use indirect function instead of the same code copies - Fix missing arguments of some test codes
Diffstat (limited to 'tpl')
-rw-r--r--tpl/template.go31
-rw-r--r--tpl/template_test.go8
2 files changed, 13 insertions, 26 deletions
diff --git a/tpl/template.go b/tpl/template.go
index 1b8107f37..17746fd35 100644
--- a/tpl/template.go
+++ b/tpl/template.go
@@ -317,14 +317,9 @@ func First(limit interface{}, seq interface{}) (interface{}, error) {
}
seqv := reflect.ValueOf(seq)
- // this is better than my first pass; ripped from text/template/exec.go indirect():
- for ; seqv.Kind() == reflect.Ptr || seqv.Kind() == reflect.Interface; seqv = seqv.Elem() {
- if seqv.IsNil() {
- return nil, errors.New("can't iterate over a nil value")
- }
- if seqv.Kind() == reflect.Interface && seqv.NumMethod() > 0 {
- break
- }
+ seqv, isNil := indirect(seqv)
+ if isNil {
+ return nil, errors.New("can't iterate over a nil value")
}
switch seqv.Kind() {
@@ -477,13 +472,9 @@ func Delimit(seq, delimiter interface{}, last ...interface{}) (template.HTML, er
}
seqv := reflect.ValueOf(seq)
- for ; seqv.Kind() == reflect.Ptr || seqv.Kind() == reflect.Interface; seqv = seqv.Elem() {
- if seqv.IsNil() {
- return "", errors.New("can't iterate over a nil value")
- }
- if seqv.Kind() == reflect.Interface && seqv.NumMethod() > 0 {
- break
- }
+ seqv, isNil := indirect(seqv)
+ if isNil {
+ return "", errors.New("can't iterate over a nil value")
}
var str string
@@ -521,13 +512,9 @@ func Delimit(seq, delimiter interface{}, last ...interface{}) (template.HTML, er
func Sort(seq interface{}, args ...interface{}) ([]interface{}, error) {
seqv := reflect.ValueOf(seq)
- for ; seqv.Kind() == reflect.Ptr || seqv.Kind() == reflect.Interface; seqv = seqv.Elem() {
- if seqv.IsNil() {
- return nil, errors.New("can't iterate over a nil value")
- }
- if seqv.Kind() == reflect.Interface && seqv.NumMethod() > 0 {
- break
- }
+ seqv, isNil := indirect(seqv)
+ if isNil {
+ return nil, errors.New("can't iterate over a nil value")
}
// Create a list of pairs that will be used to do the sort
diff --git a/tpl/template_test.go b/tpl/template_test.go
index 00327ef76..123057afd 100644
--- a/tpl/template_test.go
+++ b/tpl/template_test.go
@@ -112,7 +112,7 @@ func TestDoArithmetic(t *testing.T) {
result, err := doArithmetic(this.a, this.b, this.op)
if b, ok := this.expect.(bool); ok && !b {
if err == nil {
- t.Errorf("[%d] doArithmetic didn't return an expected error")
+ t.Errorf("[%d] doArithmetic didn't return an expected error", i)
}
} else {
if err != nil {
@@ -147,7 +147,7 @@ func TestMod(t *testing.T) {
result, err := Mod(this.a, this.b)
if b, ok := this.expect.(bool); ok && !b {
if err == nil {
- t.Errorf("[%d] modulo didn't return an expected error")
+ t.Errorf("[%d] modulo didn't return an expected error", i)
}
} else {
if err != nil {
@@ -187,7 +187,7 @@ func TestModBool(t *testing.T) {
result, err := ModBool(this.a, this.b)
if this.expect == nil {
if err == nil {
- t.Errorf("[%d] modulo didn't return an expected error")
+ t.Errorf("[%d] modulo didn't return an expected error", i)
}
} else {
if err != nil {
@@ -218,7 +218,7 @@ func TestFirst(t *testing.T) {
results, err := First(this.count, this.sequence)
if b, ok := this.expect.(bool); ok && !b {
if err == nil {
- t.Errorf("[%d] First didn't return an expected error")
+ t.Errorf("[%d] First didn't return an expected error", i)
}
} else {
if err != nil {