Merge pull request #1242 from calebthompson/make-errors-public

Make gorm.Errors available for use outside gorm
This commit is contained in:
Jinzhu 2016-11-03 21:47:49 +08:00 committed by GitHub
commit d5d3e3a67b
3 changed files with 43 additions and 25 deletions

View File

@ -18,40 +18,38 @@ var (
ErrUnaddressable = errors.New("using unaddressable value") ErrUnaddressable = errors.New("using unaddressable value")
) )
type errorsInterface interface {
GetErrors() []error
}
// Errors contains all happened errors // Errors contains all happened errors
type Errors struct { type Errors []error
errors []error
}
// GetErrors get all happened errors // GetErrors gets all happened errors
func (errs Errors) GetErrors() []error { func (errs Errors) GetErrors() []error {
return errs.errors return errs
} }
// Add add an error // Add adds an error
func (errs *Errors) Add(err error) { func (errs Errors) Add(newErrors ...error) Errors {
if errors, ok := err.(errorsInterface); ok { for _, err := range newErrors {
for _, err := range errors.GetErrors() { if errors, ok := err.(Errors); ok {
errs.Add(err) errs = errs.Add(errors...)
}
} else { } else {
for _, e := range errs.errors { ok = true
for _, e := range errs {
if err == e { if err == e {
return ok = false
} }
} }
errs.errors = append(errs.errors, err) if ok {
errs = append(errs, err)
} }
} }
}
return errs
}
// Error format happened errors // Error format happened errors
func (errs Errors) Error() string { func (errs Errors) Error() string {
var errors = []string{} var errors = []string{}
for _, e := range errs.errors { for _, e := range errs {
errors = append(errors, e.Error()) errors = append(errors, e.Error())
} }
return strings.Join(errors, "; ") return strings.Join(errors, "; ")

20
errors_test.go Normal file
View File

@ -0,0 +1,20 @@
package gorm_test
import (
"errors"
"testing"
"github.com/jinzhu/gorm"
)
func TestErrorsCanBeUsedOutsideGorm(t *testing.T) {
errs := []error{errors.New("First"), errors.New("Second")}
gErrs := gorm.Errors(errs)
gErrs = gErrs.Add(errors.New("Third"))
gErrs = gErrs.Add(gErrs)
if gErrs.Error() != "First; Second; Third" {
t.Fatalf("Gave wrong error, got %s", gErrs.Error())
}
}

View File

@ -655,9 +655,9 @@ func (s *DB) AddError(err error) error {
s.log(err) s.log(err)
} }
errors := Errors{errors: s.GetErrors()} errors := Errors(s.GetErrors())
errors.Add(err) errors.Add(err)
if len(errors.GetErrors()) > 1 { if len(errors) > 1 {
err = errors err = errors
} }
} }
@ -669,8 +669,8 @@ func (s *DB) AddError(err error) error {
// GetErrors get happened errors from the db // GetErrors get happened errors from the db
func (s *DB) GetErrors() (errors []error) { func (s *DB) GetErrors() (errors []error) {
if errs, ok := s.Error.(errorsInterface); ok { if errs, ok := s.Error.(Errors); ok {
return errs.GetErrors() return errs
} else if s.Error != nil { } else if s.Error != nil {
return []error{s.Error} return []error{s.Error}
} }