in src/PSRule/Runtime/ObjectPath/PathExpressionBuilder.cs [268:304]
private static PathExpressionFilterFn BinaryCondition(PathExpressionFn left, PathExpressionFn right, FilterOperator op)
{
return (IPathExpressionContext context, object input) =>
{
if (!left(context, input, out var leftValue) || !right(context, input, out var rightValue))
return false;
var operand1 = leftValue.FirstOrDefault();
var operand2 = rightValue.FirstOrDefault();
// Get the specific operator
switch (op)
{
case FilterOperator.Equal:
return ExpressionHelpers.Equal(operand1, operand2, context.CaseSensitive);
case FilterOperator.NotEqual:
return !ExpressionHelpers.Equal(operand1, operand2, context.CaseSensitive);
case FilterOperator.Less:
return ExpressionHelpers.CompareNumeric(operand1, operand2, convert: false, compare: out var compare, value: out _) && compare < 0;
case FilterOperator.LessOrEqual:
return ExpressionHelpers.CompareNumeric(operand1, operand2, convert: false, compare: out compare, value: out _) && compare <= 0;
case FilterOperator.Greater:
return ExpressionHelpers.CompareNumeric(operand1, operand2, convert: false, compare: out compare, value: out _) && compare > 0;
case FilterOperator.GreaterOrEqual:
return ExpressionHelpers.CompareNumeric(operand1, operand2, convert: false, compare: out compare, value: out _) && compare >= 0;
case FilterOperator.RegEx:
return ExpressionHelpers.Match(operand1, operand2, context.CaseSensitive);
}
return false;
};
}