/go-rule

go-rule engine

Primary LanguageGo

GO Rule engine support only number type

example

package main

import (
	"fmt"

	rule "github.com/Salpadding/go-rule"
)

func main() {
	evaultor := rule.NewEvaluator()
	// let assign variable rs1rule1 a rule
	evaultor.Eval(`(export rs1rule1 'c0 <= -9')`)
	// (or rule1 rule2) return composite rule
	evaultor.Eval(`(let rs1rule1 
			(or rs1rule1 (atLeast 2 'c0>=8' 'c1>=8' 'c2>=8' 'c3>=8' 'c4>=8' 'c5>=8' 'c6>=8' 'c7>=8'))
		)`)
	// (atLeast 2 rule1 rule2 rule3) success when at least 2 of rule1 rule2 success
	evaultor.Eval(`(let rs1rule1
			(or rs1rule1 
				(atLeast 2 'c0<=-8' 'c1<=-8' 'c2<=-8' 'c3<=-8' 'c4<=-8' 'c5<=-8' 'c6<=-8' 'c7<=-8')
			)
		)`)
	evaultor.Eval(`(
		let rs1rule1 (and rs1rule1 'isSportOrDrunk=1' )
	)`)
	ctx := rule.NewContext(map[string]interface{}{
		"c0":             10,
		"c1":             0,
		"c2":             0,
		"c3":             0,
		"c4":             0,
		"c5":             0,
		"c6":             0,
		"c7":             0,
		"isSportOrDrunk": 1,
	})
	results := evaultor.Expect(ctx)
	fmt.Printf("%v", results["rs1rule1"].Ok)
}