Giter VIP home page Giter VIP logo

ruleengine's Introduction

IoTSharp.RuleEngine

About IoTSharp.RuleEngine

IoTSharp.RuleEngine is a https://github.com/gsoulavy/RuleEngine fork, I'm will implement a rule engine for IoTSharp based on https://github.com/gsoulavy/RuleEngine, so, thanks to Gab Soulavy for the great work.

Purpose

This simple rule engine is a .NET Standard library 2.0, which uses Microsoft's DLR DynamicExpressionParser in the background. The goal was to make a simple engine which is easy to use and compatible with many projects.

Use

Workflow Rules Engine

下面的示例实现了 在输入的数据中通过规则链MsgT_Exit_Waste 中的 STATION_NAME 不为空并且不以“某某某收费站”开头的数据输出, 这是个简单的例子 只有 Then , 没有Else

         Rule rule = new Rule()
            {
                RuleName = "data",
                ErrorType = ErrorType.Error,
                ErrorMessage = "未能找到数据",
                Expression = "f.MsgT_Exit_Waste!=null",
                ThenSelect = "MsgT_Exit_Waste",
                Then = new Rule()
                {
                    Expression = "f.STATION_NAME!=null && !f.STATION_NAME.StartsWith(\"某某收费站\")",
                    ThenSelect = "STATION_NAME",
                    ErrorMessage = "收费站配置信息错误",
                    RuleName = "moumou",
                    RuleExpressionType = RuleExpressionType.LambdaExpression
                }
            };
            var  engine = new RulesEngine(rule);
            var result = engine.Execute(Properties.Resources.MsgT_Exit_Waste);
            Assert.True(result.Result);
            Assert.Equal("**米东北主线站", result.Output);

Instantiating the kernel

The IKernel interface is implemented with Kerner in order to support Inverson Of Control.

IKernel ruleEngine = new Kernel();
Role of the IRule

The engine is designed to use any object as a rule which implements IRule interface in order to make it easy to use with an ORM.

public interface IRule
{
    string Key { get; set; }
    string Expression { get; set; }
}
//...
void AddRule(IRule rule);
//...
Simple Validation

String expressions can be simply against the object passed to the engine.
Creating a fact:

var fact = new Person {Age = 37, Income = 45000, NumberOfChildren = 3};

Validating the fact:

var result = ruleEngine.Validate(fact, "(f.Age > 3 && f.Income > 100000) || f.NumberOfChildren > 5");
// result = false
Validate All

More than one expreession can be added to the engine

var rules = new List<Rule>
{
    new Rule {Key = "1", Expression = "(f.Age > 3 && f.Income < 50000) || f.NumberOfChildren > 2"},
    new Rule {Key = "2", Expression = "(f.Age > 3 && f.Income > 100000) || f.NumberOfChildren > 5"}
};

ruleEngine.AddRules(rules);

// Validate against all rules when no key passed
var result = ruleEngine.ValidateAll(f);
// result = false

// Only validate against rules with the matching key
var result = ruleEngine.ValidateAll(f, "1");
// result = true
Validate Any

The calls are the same as the case of validate all, however it returns true if any case is true.

var rules = new List<Rule>
{
    new Rule {Key = "1", Expression = "(f.Age > 3 && f.Income < 50000) || f.NumberOfChildren > 2"},
    new Rule {Key = "2", Expression = "(f.Age > 3 && f.Income > 100000) || f.NumberOfChildren > 5"}
};

ruleEngine.AddRules(rules);

// Validate against all rules when no key passed
var result = ruleEngine.ValidateAny(f);
// result = true

// Only validate against rules with the matching key
var result = ruleEngine.ValidateAny(f, "1");
// result = true

ruleengine's People

Contributors

gsoulavy avatar maikebing avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

ruleengine's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.