/RuleBasedEngine

Simple rule based engine helps to create rules and apply it on multiple instances and may excute action based on rule

Primary LanguageC#

CodeFactor Build status

Rule Based Engine

based on a suggestion by Martin Konicek on his Blog post

built using:

  • .Net Core 2.1
  • Visual Studio Community

Install via Nuget

> Install-Package IbnSherien.RuleBasedEngine -Version 1.0.0-beta3

Example

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public bool IsAdult { get { return Age > 18; } }
    public void GoToClub()
    {
        Console.WriteLine($"{Name} went to the club");
    }
}

class Club
{
    public string Name { get; set; }
    public bool IsOpen { get; set; }
}

var rule = RuleEngine.CreateRule<Person, Club>()
            .If<Person>(p => p.Age).GreaterThan(18)
            .AndIf<Club>(c => c.IsOpen).IsTrue()
            .Then<Person, Club>(p => p.GoToClub);

var people = new List<Person> {
    new Person{ Name = "Anas", Age = 15 },
    new Person{ Name = "Ahmed", Age = 31 },
    new Person{ Name = "Sameh", Age = 54 },
    new Person{ Name = "Janna", Age = 9 }
};

var club = new Club
{
    Name = "The Club",
    IsOpen = true
};

people.ForEach(person =>
{
    rule.Match(person, club).Execute();
});

output will be like:

rule:---------------------------------
If Person Age GreaterThan 18 and Club IsOpen IsTrue, then GoToClub
--------------------------------------
--[person 1]--------------------------
Person whose name is Anas, age is 15, and is not adult
Person is not a match
--------------------------------------
--[person 2]--------------------------
Person whose name is Ahmed, age is 31, and is adult
Person is a match
Ahmed went to the club
--------------------------------------
--[person 3]--------------------------
Person whose name is Sameh, age is 54, and is adult
Person is a match
Sameh went to the club
--------------------------------------
--[person 4]--------------------------
Person whose name is Janna, age is 9, and is not adult
Person is not a match
--------------------------------------