mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
parent
06f56fc983
commit
7fbfedf013
3 changed files with 16 additions and 12 deletions
|
@ -242,17 +242,16 @@ func (ns *Namespace) First(limit interface{}, seq interface{}) (interface{}, err
|
|||
}
|
||||
|
||||
// In returns whether v is in the set l. l may be an array or slice.
|
||||
func (ns *Namespace) In(l interface{}, v interface{}) bool {
|
||||
func (ns *Namespace) In(l interface{}, v interface{}) (bool, error) {
|
||||
if l == nil || v == nil {
|
||||
return false
|
||||
return false, nil
|
||||
}
|
||||
|
||||
lv := reflect.ValueOf(l)
|
||||
vv := reflect.ValueOf(v)
|
||||
|
||||
if !vv.Type().Comparable() {
|
||||
// TODO(bep) consider adding error to the signature.
|
||||
return false
|
||||
return false, errors.Errorf("value to check must be comparable: %T", v)
|
||||
}
|
||||
|
||||
// Normalize numeric types to float64 etc.
|
||||
|
@ -269,15 +268,15 @@ func (ns *Namespace) In(l interface{}, v interface{}) bool {
|
|||
lvvk := normalize(lvv)
|
||||
|
||||
if lvvk == vvk {
|
||||
return true
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
case reflect.String:
|
||||
if vv.Type() == lv.Type() && strings.Contains(lv.String(), vv.String()) {
|
||||
return true
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
return false
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// Intersect returns the common elements in the given sets, l1 and l2. l1 and
|
||||
|
|
|
@ -313,9 +313,14 @@ func TestIn(t *testing.T) {
|
|||
|
||||
errMsg := fmt.Sprintf("[%d] %v", i, test)
|
||||
|
||||
result := ns.In(test.l1, test.l2)
|
||||
result, err := ns.In(test.l1, test.l2)
|
||||
assert.NoError(err)
|
||||
assert.Equal(test.expect, result, errMsg)
|
||||
}
|
||||
|
||||
// Slices are not comparable
|
||||
_, err := ns.In([]string{"a", "b"}, []string{"a", "b"})
|
||||
assert.Error(err)
|
||||
}
|
||||
|
||||
type testPage struct {
|
||||
|
|
|
@ -225,14 +225,14 @@ func (ns *Namespace) checkCondition(v, mv reflect.Value, op string) (bool, error
|
|||
var r bool
|
||||
switch {
|
||||
case ivp != nil && len(ima) > 0:
|
||||
r = ns.In(ima, *ivp)
|
||||
r, _ = ns.In(ima, *ivp)
|
||||
case fvp != nil && len(fma) > 0:
|
||||
r = ns.In(fma, *fvp)
|
||||
r, _ = ns.In(fma, *fvp)
|
||||
case svp != nil:
|
||||
if len(sma) > 0 {
|
||||
r = ns.In(sma, *svp)
|
||||
r, _ = ns.In(sma, *svp)
|
||||
} else if smvp != nil {
|
||||
r = ns.In(*smvp, *svp)
|
||||
r, _ = ns.In(*smvp, *svp)
|
||||
}
|
||||
default:
|
||||
return false, nil
|
||||
|
|
Loading…
Reference in a new issue