private RuleExpressionParameter[] GetRuleExpressionParameters(RuleExpressionType ruleExpressionType, IEnumerable <ScopedParam> localParams, RuleParameter[] ruleParams) { if (!_reSettings.EnableScopedParams) { return(new RuleExpressionParameter[] { }); } var ruleExpParams = new List <RuleExpressionParameter>(); if (localParams?.Any() == true) { var parameters = ruleParams.Select(c => c.ParameterExpression) .ToList(); var expressionBuilder = GetExpressionBuilder(ruleExpressionType); foreach (var lp in localParams) { var lpExpression = expressionBuilder.Parse(lp.Expression, parameters.ToArray(), null).Body; var ruleExpParam = new RuleExpressionParameter() { ParameterExpression = Expression.Parameter(lpExpression.Type, lp.Name), ValueExpression = lpExpression }; parameters.Add(ruleExpParam.ParameterExpression); ruleExpParams.Add(ruleExpParam); } } return(ruleExpParams.ToArray()); }
private RuleFunc <RuleResultTree> GetWrappedRuleFunc(RuleExpressionType ruleExpressionType, RuleFunc <RuleResultTree> ruleFunc, RuleParameter[] ruleParameters, RuleExpressionParameter[] ruleExpParams) { if (ruleExpParams.Length == 0) { return(ruleFunc); } var paramDelegate = GetExpressionBuilder(ruleExpressionType).CompileScopedParams(ruleParameters, ruleExpParams); return((ruleParams) => { var inputs = ruleParams.Select(c => c.Value).ToArray(); var scopedParamsDict = paramDelegate(inputs); var scopedParams = scopedParamsDict.Select(c => new RuleParameter(c.Key, c.Value)).ToList(); var extendedInputs = ruleParams.Concat(scopedParams); var result = ruleFunc(extendedInputs.ToArray()); // To be removed in next major release #pragma warning disable CS0618 // Type or member is obsolete if (result.RuleEvaluatedParams == null) { result.RuleEvaluatedParams = scopedParams; } #pragma warning restore CS0618 // Type or member is obsolete return result; }); }
public void RuleGetExpressionBuilderTest(RuleExpressionType expressionType, Type expectedExpressionBuilderType) { var objBuilderFactory = new RuleExpressionBuilderFactory(new ReSettings()); var builder = objBuilderFactory.RuleGetExpressionBuilder(expressionType); var builderType = builder.GetType(); Assert.Equal(expectedExpressionBuilderType.ToString(), builderType.ToString()); }
public RuleExpressionBuilderBase RuleGetExpressionBuilder(RuleExpressionType ruleExpressionType) { switch (ruleExpressionType) { case RuleExpressionType.LambdaExpression: return(new LambdaExpressionBuilder(_reSettings)); default: throw new InvalidOperationException($"{nameof(ruleExpressionType)} has not been supported yet."); } }
private RuleExpressionBuilderBase GetExpressionBuilder(RuleExpressionType expressionType) { return(_expressionBuilderFactory.RuleGetExpressionBuilder(expressionType)); }