Example #1
0
        static void Main(string[] args)
        {
            LogProvider.SetCurrentLogProvider(new ColoredConsoleLogProvider());

            Rule rule1 = new Rule();

            rule1.Add(new AndFilter(new List <IConstraint> {
                new EqualsConstraint("name", "Joao Paulo")
            }));

            IRuleStore  pool   = new MemoryRuleStore(new[] { rule1 });
            IRuleEngine engine = new RuleEngine(pool);
            var         result = engine.Evaluate(new {
                name = "Joao Paulo",
                age  = 17
            }).ToList();

            Console.Read();
        }
Example #2
0
        public void ShouldBePossibleEvaluateRuleWithCustomStrategy()
        {
            var rule = new Rule();

            rule.Name = "fake.rule";

            rule.AddAndFilter().Add(new EqualsConstraint("Name", "John Doe"));

            this.AddRule(rule);

            var data = new
            {
                Name = "John Doe"
            };

            Assert.NotEmpty(this.Engine.Evaluate(data));

            var customEngine = new RuleEngine(this.Pool, new EmptyRuleStrategy());

            Assert.Empty(customEngine.Evaluate(data));
        }
Example #3
0
        public void TestMethod1()
        {
            var filename = "Rules.json";
            var car      = new SerializableCar();

            car.Classification = CarClassification.SportUtilityVehicle;
            car.WheelCount     = 2;

            var json = File.ReadAllText(filename);
            var deserializedObject = JsonConvert.DeserializeObject <SerializableCar>(json);
            var ruleEngine         = new RuleEngine <SerializableCar>();

            foreach (var deserializedRule in deserializedObject.Rules)
            {
                var rule = new Rule <SerializableCar>();

                foreach (var compositeCondition in deserializedRule.Conditions)
                {
                    foreach (var condition in compositeCondition.Conditions)
                    {
                        rule.AddCondition(condition.FieldName, condition.Operation, condition.Value, compositeCondition.LogicalOperation);
                    }
                }

                foreach (var action in deserializedRule.Actions)
                {
                    rule.AddAction(action.FieldName, action.Operation, action.Data);
                }

                ruleEngine.AddRule(rule);
            }

            ruleEngine.Evaluate(car);

            Assert.AreEqual(300, car.WheelCount);
        }