public void Merge(CorrectValueRule rule) { if (rule is null) { return; } if (Name != rule.Name) { return; } if (rule.Mode != CorrectValueRuleMode.Append) { return; } foreach (var token in rule.Tokens) { if (token.MutuallyExclusive) { continue; } if (!TokenMutexCalculator.Available(Tokens, token)) { continue; } Tokens.Add(token); } }
protected void AddOrUpdateValueRule(CorrectValueRule rule) { lock (_valueRuleLockObj) { var target = _correctValueRules.FirstOrDefault(r => r.Name == rule.Name); if (target is null) { // Regardless of the value of ValueRuleMode, as long as the rule does not exist, // this branch is always entered. _correctValueRules.Add(rule); } else if (rule.Mode == CorrectValueRuleMode.Overwrite) { _correctValueRules.Remove(target); _correctValueRules.Add(rule); } else if (rule.Mode == CorrectValueRuleMode.Append) { target.Merge(rule); } } }
private static void ValidCore(object value, CorrectValueRule valueRule, List <LeoVerifyFailure> failures, List <string> nameOfExecutedRules) { var verifyValSet = valueRule .ValidValue(value) .Where(x => x.IsSuccess == false) .ToList(); if (verifyValSet.Any()) { var count = verifyValSet.Count; var failure = new LeoVerifyFailure( valueRule.Name, $"Member {valueRule.Name} encountered {(count == 1 ? "an error" : "some errors")} during verification.", value) { Details = verifyValSet.Select(verifyVal => new LeoVerifyError { ErrorMessage = verifyVal.ErrorMessage }).ToList() }; failures.Add(failure); nameOfExecutedRules.AddRange(verifyValSet.Select(verifyVal => verifyVal.NameOfExecutedRule)); } }