From c888731918cc7c537ed7d6de914a2110ebe757ee Mon Sep 17 00:00:00 2001 From: Lars de Bruijn <9264036+ldebruijn@users.noreply.github.com> Date: Mon, 14 Oct 2024 18:45:46 +0800 Subject: [PATCH] Add exported function to remove rules (#316) * feat(rules): Add way to remove rule * feat(rules): Remove unnecessary change * feat(rules): Fix linting error * feat(rules): Fix linting error --- validator/validator.go | 11 +++++++++++ validator/validator_test.go | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/validator/validator.go b/validator/validator.go index 36564b23..fb4db194 100644 --- a/validator/validator.go +++ b/validator/validator.go @@ -23,6 +23,17 @@ func AddRule(name string, ruleFunc RuleFunc) { specifiedRules = append(specifiedRules, Rule{Name: name, RuleFunc: ruleFunc}) } +func RemoveRule(name string) { + var result []Rule // nolint:prealloc // using initialized with len(rules) produces a race condition + for _, r := range specifiedRules { + if r.Name == name { + continue + } + result = append(result, r) + } + specifiedRules = result +} + func Validate(schema *Schema, doc *QueryDocument, rules ...Rule) gqlerror.List { if rules == nil { rules = specifiedRules diff --git a/validator/validator_test.go b/validator/validator_test.go index 6c1b50bd..db2fde6b 100644 --- a/validator/validator_test.go +++ b/validator/validator_test.go @@ -178,3 +178,13 @@ func TestCustomRuleSet(t *testing.T) { require.Equal(t, "some error message", errList[0].Message) require.Equal(t, "some other error message", errList[1].Message) } + +func TestRemoveRule(t *testing.T) { + // no error + validator.RemoveRule("rule that does not exist") + + validator.AddRule("Rule that should no longer exist", func(observers *validator.Events, addError validator.AddErrFunc) {}) + + // no error + validator.RemoveRule("Rule that should no longer exist") +}