CacheControl / json-rules-engine

A rules engine expressed in JSON
ISC License
2.54k stars 455 forks source link

Support Facts In Events #345

Closed chris-pardy closed 11 months ago

chris-pardy commented 11 months ago

This adds support via an engine option flag to allow event params to include reference to facts like values do. The structure of this is that for event parameters the top-level keys may have the value: { "fact": "<fact id>" } at which point they'll be converted into the actual fact value when the rule is evaluated. You can use path and param helpers the same as any other reference to a fact.

The primary use case for this is as a way to externaize values for the events into facts so they can be shared, or so they can change without the rule needing to change. Additionally moving away from needing event / rule specific handlers allows the rules to more completely configure the system for instance:

const maxBidRule = {
   conditions: {
      all: [
         { condition: "desireable" },
         {
            fact: "remainingCash",
            operator: "greaterThanInclusive",
            value: { fact: "maxBid" }
         }
     ]
  },
  event: {
      type: "bid",
      params: {
          amount: { fact: "maxBid" }
      }
  }
}

const allInRule = {
      conditions: {
         all: [
            { condition: "desireable"  },
            {
                fact: "remainingCash",
                operator: "lessThan",
                value: { fact: "maxBid" }
            }
        ]
    },
   event: {
       type: "bid",
       params: { 
         amount: { fact: "remainingCash" }
       }
   }
 }
CacheControl commented 11 months ago

Will look at this today!