Ejemplo n.º 1
0
        public static void NonGenericBasicExample()
        {
            var engine       = new RulesEngine();
            var rule         = new Rule((c, o) => { Console.WriteLine("None generic called"); return(true); });
            var ruleDelegate = new Rule(NonGenericDelegate);

            engine.AddRule(ruleDelegate);
            engine.AddRule(rule);
            Console.WriteLine(engine.RunAllRules());
        }
Ejemplo n.º 2
0
        static void IRuleExample()
        {
            // Create an input object (component)
            var customer = new Customer {
                ID = 1, Name = "Amitabh"
            };

            // Create an output object (discount)
            var discount = new CustomerDiscount();

            // Create a new rule for xmas seasson
            SeasonDiscount seasonal = new SeasonDiscount(new DateTime(2019, 12, 15), new DateTime(2019, 12, 25), 5);

            // Populate the engine
            var engine = new RulesEngine(component: customer, output: discount);

            engine.AddRule(new Rule(seasonal));

            // Run the rule
            var result = engine.RunAllRules();

            // Check if we got the discount
            Console.WriteLine($"Seasonal discount {discount.Discount}");

            // Let's inspect the result
            Console.WriteLine(result);
        }
Ejemplo n.º 3
0
        public void CheckRuleAddition()
        {
            RulesEngine ruleEngine = new RulesEngine("newOrder");

            ruleEngine.AddRule("payment", "make payment;send email");
            Assert.AreEqual("newOrder-payment-make payment;send email", ruleEngine.GetRule("newOrder"));
        }
Ejemplo n.º 4
0
        public void RequetsPerHour_10Min_RuleLocationUS_Success()
        {
            var retrieveTokenInfoMock = new Mock<IRetrieveTokenInfo>(MockBehavior.Strict);
            retrieveTokenInfoMock.Setup(s => s.GetTokenInfo(It.IsAny<string>()))
                .Returns(new TokenInfo()
                    { Location = "US", NoOfTimesCalledInLastHour = 89, LastRequestTime = DateTime.Now.AddHours(-3) });

            IRulesEngine ruleEngine = new RulesEngine();
            ruleEngine.AddRule(new RuleRequetsPerHour());
            ruleEngine.AddRule(new Rule10MinPassedSinceLastCall());
            ruleEngine.AddRule(new RuleLocationUS());
            IResource resource1 = new Resource1("tkn", ruleEngine, retrieveTokenInfoMock.Object);

            var result = resource1.CanContinue();

            Assert.IsTrue(result);
        }
Ejemplo n.º 5
0
        static void DelegateExample()
        {
            // Create EngineAttributes with Name
            var engineOptions = new EngineAttributes {
                Name = "MyEngine"
            };

            // Instantiate the RulesEngine with option
            var myEngine = new RulesEngine(engineOptions);

            // Now add Lambda rule
            myEngine.AddRule(new Rule((c, o) => { Console.WriteLine("Hello, world"); return(true); }));

            // Next, add a delegate method
            myEngine.AddRule(new Rule(ruleDelegate));

            myEngine.RunAllRules();
            // Output:
            // Hello, world
            // ruleDelegate called
        }
Ejemplo n.º 6
0
        static void RuleClassExample()
        {
            /**
             * Create the component to initialize the RulesEngine
             * We don't HAVE to have a component, the rules can still run
             */
            var bigB = new Customer
            {
                ID            = 1,
                Name          = "Amitabh",
                Birthdate     = new DateTime(1942, 10, 11),
                FirstPurchase = new DateTime(2005, 1, 2),
            };

            /**
             * Create an output object for Rules Engine
             * We don't HAVE to have an output object
             */
            var discount = new CustomerDiscount();

            // Create Engine Attributes
            var engineAttributes = new EngineAttributes {
                Component = bigB, Output = discount
            };

            // We can add individual rules or an array of rules
            var rulesArray = new Rule[] { new Rule(seniorCitizenDiscount, ruleName: "Senior") };

            // Start the engine with attributes and initial rules list
            var engine = new RulesEngine(engineAttributes, rulesArray);

            // We are adding multiple rules based on the same class, so we must name them explicitly
            engine.AddRule(new Rule(new LoyaltyDiscount(1, 5), ruleName: "L1"));
            engine.AddRule(new Rule(new LoyaltyDiscount(5, 8), ruleName: "L2"));
            engine.AddRule(new Rule(new LoyaltyDiscount(10, 10), ruleName: "L3"));

            Console.WriteLine(engine.RunAllRules());
        }
Ejemplo n.º 7
0
        public void RuleLocationUS_Fail()
        {
            var retrieveTokenInfoMock = new Mock<IRetrieveTokenInfo>(MockBehavior.Strict);
            retrieveTokenInfoMock.Setup(s => s.GetTokenInfo(It.IsAny<string>()))
                .Returns(new TokenInfo()
                    { Location = "EU", NoOfTimesCalledInLastHour = 100, LastRequestTime = DateTime.Now.AddHours(-3) });

            IRulesEngine ruleEngine = new RulesEngine();
            ruleEngine.AddRule(new RuleLocationUS());
            IResource resource1 = new Resource1("tkn", ruleEngine, retrieveTokenInfoMock.Object);

            var result = resource1.CanContinue();

            Assert.IsFalse(result);
        }
Ejemplo n.º 8
0
        static void BasicExample()
        {
            // Create an empty RulesEngine
            var myRules = new RulesEngine();

            // Add a lambda rule to the engine
            myRules.AddRule(new Rule((component, output) => { Console.WriteLine("Hello, world"); return(true); }));

            // Run the engine, it will print Hello, world
            var result = myRules.RunAllRules();

            // Hello, world

            // Result class contains detailed object graph
            // Which can be accessed thru properties
            // It's ToString() returns a Json string
            Console.WriteLine(result);
        }
Ejemplo n.º 9
0
        public CustomerController() //: this(new CustomerLogic())
        {
            _customerLogic = new CustomerLogic();

            RulesEngine.AddRule <string>(nameof(EmailUniqueAttribute), _customerLogic.IsEmailUnique);
        }