private static PathExpressionFilterFn BinaryCondition()

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;
            };
        }