private void ApplyRule(Rule rule, IWorkItem workItem) { if (rule.Scope.All(s => s.Matches(workItem))) { this.logger.RunningRule(rule.Name, workItem); this.engine.Run(rule.Name, workItem); } }
private Dictionary<string, Rule> ParseRulesSection(XDocument doc) { var rules = new Dictionary<string, Rule>(); foreach (var ruleElem in doc.Root.Elements("rule")) { var rule = new Rule() { Name = ruleElem.Attribute("name").Value, }; var ruleScopes = new List<RuleScope>(); if (ruleElem.Attribute("appliesTo") != null) { ruleScopes.Add(new WorkItemTypeScope() { ApplicableTypes = ruleElem.Attribute("appliesTo").Value.Split(ListSeparators) }); } if (ruleElem.Attribute("hasFields") != null) { ruleScopes.Add(new HasFieldsScope() { FieldNames = ruleElem.Attribute("hasFields").Value.Split(ListSeparators) }); } rule.Scope = ruleScopes.ToArray(); rule.Script = ruleElem.Value; rules.Add(rule.Name, rule); } this.instance.Rules = rules.Values.ToList(); return rules; }
private void ApplyRule(Rule rule, IWorkItem workItem) { if (rule.Scope.All(scope => { var result = scope.Matches(workItem); this.logger.RuleScopeMatchResult(scope, result); return result.Success; })) { this.logger.RunningRule(rule.Name, workItem); this.engine.Run(rule.Name, workItem, this.store); } }