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);
     }
 }