From 4e5ba587bfe8285968ac617937a6b205b8842411 Mon Sep 17 00:00:00 2001 From: Ankit Hans Date: Thu, 1 Jul 2021 16:07:54 +0530 Subject: [PATCH] fix: rule config overriding --- go.mod | 1 + go.sum | 2 ++ validator/rules/executor.go | 39 +++++++++++++++++-------------------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/go.mod b/go.mod index be74727..d40a322 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.16 require ( github.com/BurntSushi/toml v0.3.1 + github.com/imdario/mergo v0.3.12 github.com/nicksnyder/go-i18n/v2 v2.1.2 github.com/spf13/cobra v1.1.3 golang.org/x/text v0.3.3 diff --git a/go.sum b/go.sum index 1847c22..0b1f1c2 100644 --- a/go.sum +++ b/go.sum @@ -89,6 +89,8 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/validator/rules/executor.go b/validator/rules/executor.go index 80c8d18..7ddd5e8 100644 --- a/validator/rules/executor.go +++ b/validator/rules/executor.go @@ -1,15 +1,17 @@ package rules import ( - "encoding/json" "fmt" "log" "os" "github.com/aerogear/charmil/validator" + "github.com/imdario/mergo" "github.com/spf13/cobra" ) +// Rules is an interface that is implemented +// by every rule defined in rules package type Rules interface { Validate() []validator.ValidationError } @@ -84,6 +86,7 @@ func (config *RuleConfig) validate(cmd *cobra.Command, info *validator.StatusLog &MustExistHelper{cmd: cmd, config: config}, } + // traverse all rules and validate for _, rule := range rules { validationErrors := rule.Validate() info.TotalErrors += len(validationErrors) @@ -113,28 +116,22 @@ func (config *RuleConfig) initDefaultRules() { }, } - // Check verbose input from user - var verbose bool - if config != nil && config.Verbose { - verbose = true + if err := mergo.Merge(&config.Length, defaultConfig.Length); err != nil { + log.Fatal(err) } + config.Fields = append(config.Fields, defaultConfig.Fields...) + config.Fields = removeDuplicates(config.Fields) +} - // Set Config to defaultConfig - *config = *defaultConfig - config.Verbose = verbose - - // Merge the defaultConfig and Config given by user - if config.Length.Limits != nil && config.MustExist.Fields != nil { - out, err := json.Marshal(config) - if err != nil { - log.Fatal(err) - } - data := []byte(out) - - errr := json.Unmarshal(data, &defaultConfig) - if errr != nil { - log.Fatal(errr) +// remove duplicates from slice +func removeDuplicates(input []string) []string { + keys := make(map[string]bool) + list := []string{} + for _, entry := range input { + if _, value := keys[entry]; !value { + keys[entry] = true + list = append(list, entry) } } - + return list }