Skip to content

Commit

Permalink
Merge branch 'v2' into v3-development
Browse files Browse the repository at this point in the history
  • Loading branch information
Dean Karn authored and Dean Karn committed Mar 10, 2015
2 parents f1877db + bb80e92 commit 49af756
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 10 deletions.
20 changes: 10 additions & 10 deletions validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ type FieldValidationError struct {
Field string
ErrorTag string
Kind reflect.Kind
Type reflect.Type
Param string
Value interface{}
}
Expand Down Expand Up @@ -168,12 +169,6 @@ func ValidateStruct(s interface{}) *StructValidationErrors {
// ValidateStruct validates a struct and returns a struct containing the errors
func (v *Validator) ValidateStruct(s interface{}) *StructValidationErrors {

structValue := reflect.ValueOf(s)

if structValue.Kind() == reflect.Ptr && !structValue.IsNil() {
return v.ValidateStruct(structValue.Elem().Interface())
}

return v.validateStructRecursive(s, s)
}

Expand Down Expand Up @@ -298,16 +293,19 @@ func (v *Validator) validateFieldByNameAndTagAndValue(val interface{}, f interfa
}

valueField := reflect.ValueOf(f)
fieldKind := valueField.Kind()

if valueField.Kind() == reflect.Ptr && !valueField.IsNil() {
if fieldKind == reflect.Ptr && !valueField.IsNil() {
return v.validateFieldByNameAndTagAndValue(val, valueField.Elem().Interface(), name, tag)
}

switch valueField.Kind() {
fieldType := valueField.Type()

switch fieldKind {

case reflect.Struct, reflect.Interface, reflect.Invalid:

if valueField.Type() != reflect.TypeOf(time.Time{}) {
if fieldType != reflect.TypeOf(time.Time{}) {
panic("Invalid field passed to ValidateFieldWithTag")
}
}
Expand Down Expand Up @@ -339,13 +337,15 @@ func (v *Validator) validateFieldByNameAndTagAndValue(val interface{}, f interfa
errTag = strings.TrimLeft(errTag, "|")

valErr.ErrorTag = errTag
valErr.Kind = valueField.Kind()
valErr.Kind = fieldKind

return valErr
}

if valErr, err = v.validateFieldByNameAndSingleTag(val, f, name, valTag); err != nil {

valErr.Kind = valueField.Kind()
valErr.Type = fieldType

return valErr
}
Expand Down
3 changes: 3 additions & 0 deletions validator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package validator_test

import (
"fmt"
"reflect"
"testing"
"time"

Expand Down Expand Up @@ -197,6 +198,7 @@ func (ms *MySuite) TestUnexposedStruct(c *C) {
A string `validate:"required"`
}
}

s := &Test{
Name: "TEST",
}
Expand Down Expand Up @@ -290,6 +292,7 @@ func (ms *MySuite) TestIsGte(c *C) {
err = validator.ValidateFieldByTag(t2, "gte")
c.Assert(err, NotNil)
c.Assert(err.ErrorTag, Equals, "gte")
c.Assert(err.Type, Equals, reflect.TypeOf(time.Time{}))

type Test struct {
Now *time.Time `validate:"gte"`
Expand Down

0 comments on commit 49af756

Please sign in to comment.