Exemplo n.º 1
0
        public static bool Apply(string op, LdValue uValue, LdValue cValue)
        {
            try
            {
                if (uValue.IsNull || cValue.IsNull)
                {
                    return(false);
                }

                int comparison;

                switch (op)
                {
                case "in":
                    if (uValue.Equals(cValue))
                    {
                        return(true);
                    }

                    if (uValue.IsString || cValue.IsString)
                    {
                        return(StringOperator(uValue, cValue, (a, b) => a.Equals(b)));
                    }

                    if (TryCompareNumericValues(uValue, cValue, out comparison))
                    {
                        return(comparison == 0);
                    }
                    break;

                case "endsWith":
                    return(StringOperator(uValue, cValue, (a, b) => a.EndsWith(b)));

                case "startsWith":
                    return(StringOperator(uValue, cValue, (a, b) => a.StartsWith(b)));

                case "matches":
                    return(StringOperator(uValue, cValue, (a, b) => new Regex(b).IsMatch(a)));

                case "contains":
                    return(StringOperator(uValue, cValue, (a, b) => a.Contains(b)));

                case "lessThan":
                    if (TryCompareNumericValues(uValue, cValue, out comparison))
                    {
                        return(comparison < 0);
                    }
                    break;

                case "lessThanOrEqual":
                    if (TryCompareNumericValues(uValue, cValue, out comparison))
                    {
                        return(comparison <= 0);
                    }
                    break;

                case "greaterThan":
                    if (TryCompareNumericValues(uValue, cValue, out comparison))
                    {
                        return(comparison > 0);
                    }
                    break;

                case "greaterThanOrEqual":
                    if (TryCompareNumericValues(uValue, cValue, out comparison))
                    {
                        return(comparison >= 0);
                    }
                    break;

                case "before":
                    return(DateOperator(uValue, cValue, (a, b) => DateTime.Compare(a, b) < 0));

                case "after":
                    return(DateOperator(uValue, cValue, (a, b) => DateTime.Compare(a, b) > 0));

                case "semVerEqual":
                    return(SemVerOperator(uValue, cValue, (a, b) => a.ComparePrecedence(b) == 0));

                case "semVerLessThan":
                    return(SemVerOperator(uValue, cValue, (a, b) => a.ComparePrecedence(b) < 0));

                case "semVerGreaterThan":
                    return(SemVerOperator(uValue, cValue, (a, b) => a.ComparePrecedence(b) > 0));

                default:
                    return(false);
                }
            }
            catch (Exception e)
            {
                Log.DebugFormat("Got a possibly expected exception when applying operator: {0} to user Value: {1} and feature flag value: {2}. Exception message: {3}",
                                e,
                                op,
                                uValue,
                                cValue,
                                Util.ExceptionMessage(e));
            }
            return(false);
        }