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()); }
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); }
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")); }
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); }
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 }
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()); }
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); }
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); }
public CustomerController() //: this(new CustomerLogic()) { _customerLogic = new CustomerLogic(); RulesEngine.AddRule <string>(nameof(EmailUniqueAttribute), _customerLogic.IsEmailUnique); }