public RatingEngineCompiler(IRulesEngineCodeProvider codeProvider, RuleEngineCodeModel rulesEngineCodeModel) { RuleEngineCodeModel = rulesEngineCodeModel; CodeProvider = codeProvider; if (codeProvider == null) throw new Exception("Code Provider cannot be null"); }
public string GetCode(RuleEngineCodeModel model) { //var ruleBooks = decorator.GetRuleBooks().Select( // p => new RuleBookTemplateModel( // p.Name, decorator.GetRuleBookRules(Convert.ToInt32((string) p.Id), null).ToArray(),null // ) // ).ToArray(); //var model = new RuleEngineCodeModel() // { // RuleBooks = ruleBooks, // BaseLookupTables = // decorator.DecorateTables(false, // ruleBooks.SelectMany(p=>p.Lookups).ToArray()).ToArray() // }; var codeGenerator = new RulesEngineCode() { Model = model, Context = new RulesEngineCodeContext("TESTRATER") }; var result = codeGenerator.TransformText(); return result; }
public RatingEngineCompiler(RuleEngineCodeModel rulesEngineCodeModel) : this(new RulesEngineCodeProvider(), rulesEngineCodeModel) { }
/// <summary> /// A simple method to data from both lookup repository and engine repository to provide a combined model for compiling. /// </summary> /// <param name="nameSpace"></param> /// <param name="effectiveDate"></param> /// <param name="ruleBookIds"></param> /// <returns></returns> public static RuleEngineCodeModel GetRuleEngineCodeModel(string nameSpace, DateTime effectiveDate, string[] ruleBookIds = null) { var lookupRepository = GetLookupRepository(effectiveDate); var engineRepository = GetEngineRepository(effectiveDate); var rbs = engineRepository.GetAllRuleBooks().ToArray(); RuleBookTemplateModel[] ruleBooks = null; if (ruleBookIds != null) { ruleBooks = rbs.Where(p => ruleBookIds.Contains(p.Id)).Select( p => new RuleBookTemplateModel( p.Name, "CommonRuleBook", RuleHelper.SortRules(engineRepository.GetRuleBookRules(Convert.ToInt32((string)p.Id), null).ToArray()).ToArray(), null ) ).ToArray(); } else { ruleBooks = rbs.Select( p => new RuleBookTemplateModel( p.Name, "CommonRuleBook", RuleHelper.SortRules(engineRepository.GetRuleBookRules(Convert.ToInt32((string)p.Id), null).ToArray()).ToArray(), null ) ).ToArray(); } var model = new RuleEngineCodeModel() { EffectiveDate = effectiveDate, Namespace = nameSpace, RuleBooks = ruleBooks, BaseLookupTables = lookupRepository.GetRatingTables(). Select(p => lookupRepository.GetLookupTable(p.ChangeId)).ToArray() }; return model; }