Skip to content

Commit

Permalink
Align config json error handling of EvaluateIsOneOf with error report…
Browse files Browse the repository at this point in the history
…ing of RolloutEvaluator
  • Loading branch information
adams85 committed Feb 14, 2024
1 parent 2abf583 commit 4ab88d3
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 15 deletions.
31 changes: 20 additions & 11 deletions src/ConfigCatClient/Evaluation/EvaluateLogHelper.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.Globalization;
using ConfigCat.Client.Utils;

Expand Down Expand Up @@ -64,6 +65,8 @@ private static IndentedTextBuilder AppendUserCondition(this IndentedTextBuilder

public static IndentedTextBuilder AppendUserCondition(this IndentedTextBuilder builder, UserCondition condition)
{
var comparisonAttribute = condition.ComparisonAttribute ?? InvalidNamePlaceholder;

return condition.Comparator switch
{
UserComparator.IsOneOf or
Expand All @@ -78,23 +81,23 @@ UserComparator.TextEndsWithAnyOf or
UserComparator.TextNotEndsWithAnyOf or
UserComparator.ArrayContainsAnyOf or
UserComparator.ArrayNotContainsAnyOf =>
builder.AppendUserCondition(condition.ComparisonAttribute, condition.Comparator, condition.StringListValue, isSensitive: false),
builder.AppendUserCondition(comparisonAttribute, condition.Comparator, condition.StringListValue, isSensitive: false),

UserComparator.SemVerLess or
UserComparator.SemVerLessOrEquals or
UserComparator.SemVerGreater or
UserComparator.SemVerGreaterOrEquals or
UserComparator.TextEquals or
UserComparator.TextNotEquals =>
builder.AppendUserCondition(condition.ComparisonAttribute, condition.Comparator, condition.StringValue, isSensitive: false),
builder.AppendUserCondition(comparisonAttribute, condition.Comparator, condition.StringValue, isSensitive: false),

UserComparator.NumberEquals or
UserComparator.NumberNotEquals or
UserComparator.NumberLess or
UserComparator.NumberLessOrEquals or
UserComparator.NumberGreater or
UserComparator.NumberGreaterOrEquals =>
builder.AppendUserCondition(condition.ComparisonAttribute, condition.Comparator, condition.DoubleValue),
builder.AppendUserCondition(comparisonAttribute, condition.Comparator, condition.DoubleValue),

UserComparator.SensitiveIsOneOf or
UserComparator.SensitiveIsNotOneOf or
Expand All @@ -104,24 +107,28 @@ UserComparator.SensitiveTextEndsWithAnyOf or
UserComparator.SensitiveTextNotEndsWithAnyOf or
UserComparator.SensitiveArrayContainsAnyOf or
UserComparator.SensitiveArrayNotContainsAnyOf =>
builder.AppendUserCondition(condition.ComparisonAttribute, condition.Comparator, condition.StringListValue, isSensitive: true),
builder.AppendUserCondition(comparisonAttribute, condition.Comparator, condition.StringListValue, isSensitive: true),

UserComparator.DateTimeBefore or
UserComparator.DateTimeAfter =>
builder.AppendUserCondition(condition.ComparisonAttribute, condition.Comparator, condition.DoubleValue, isDateTime: true),
builder.AppendUserCondition(comparisonAttribute, condition.Comparator, condition.DoubleValue, isDateTime: true),

UserComparator.SensitiveTextEquals or
UserComparator.SensitiveTextNotEquals =>
builder.AppendUserCondition(condition.ComparisonAttribute, condition.Comparator, condition.StringValue, isSensitive: true),
builder.AppendUserCondition(comparisonAttribute, condition.Comparator, condition.StringValue, isSensitive: true),

_ =>
builder.AppendUserCondition(condition.ComparisonAttribute, condition.Comparator, condition.GetComparisonValue(throwIfInvalid: false)),
builder.AppendUserCondition(comparisonAttribute, condition.Comparator, condition.GetComparisonValue(throwIfInvalid: false)),
};
}

public static IndentedTextBuilder AppendPrerequisiteFlagCondition(this IndentedTextBuilder builder, PrerequisiteFlagCondition condition)
public static IndentedTextBuilder AppendPrerequisiteFlagCondition(this IndentedTextBuilder builder, PrerequisiteFlagCondition condition, IReadOnlyDictionary<string, Setting>? settings = null)
{
var prerequisiteFlagKey = condition.PrerequisiteFlagKey ?? InvalidReferencePlaceholder;
var prerequisiteFlagKey =
condition.PrerequisiteFlagKey is null ? InvalidNamePlaceholder :
settings is not null && !settings.ContainsKey(condition.PrerequisiteFlagKey) ? InvalidReferencePlaceholder :
condition.PrerequisiteFlagKey;

var comparator = condition.Comparator;
var comparisonValue = condition.ComparisonValue.GetValue(throwIfInvalid: false);

Expand All @@ -133,8 +140,10 @@ public static IndentedTextBuilder AppendSegmentCondition(this IndentedTextBuilde
var segment = condition.Segment;
var comparator = condition.Comparator;

var segmentName = segment?.Name ??
(segment is null ? InvalidReferencePlaceholder : InvalidNamePlaceholder);
var segmentName =
segment is null ? InvalidReferencePlaceholder :
segment.Name is not { Length: > 0 } ? InvalidNamePlaceholder :
segment.Name;

return builder.Append($"User {comparator.ToDisplayText()} '{segmentName}'");
}
Expand Down
13 changes: 9 additions & 4 deletions src/ConfigCatClient/Evaluation/RolloutEvaluator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -711,12 +711,17 @@ private static bool EvaluateSensitiveArrayContainsAnyOf(string[] array, string[]
private bool EvaluatePrerequisiteFlagCondition(PrerequisiteFlagCondition condition, ref EvaluateContext context)
{
var logBuilder = context.LogBuilder;
logBuilder?.AppendPrerequisiteFlagCondition(condition);
logBuilder?.AppendPrerequisiteFlagCondition(condition, context.Settings);

Setting? prerequisiteFlag;
var prerequisiteFlagKey = condition.PrerequisiteFlagKey;
if (prerequisiteFlagKey is null || !context.Settings.TryGetValue(prerequisiteFlagKey, out var prerequisiteFlag))
if (prerequisiteFlagKey is null)
{
throw new InvalidOperationException("Prerequisite flag key is missing or invalid.");
throw new InvalidOperationException("Prerequisite flag key is missing.");
}
else if (!context.Settings.TryGetValue(prerequisiteFlagKey, out prerequisiteFlag))
{
throw new InvalidOperationException("Prerequisite flag is missing.");
}

var comparisonValue = EnsureComparisonValue(condition.ComparisonValue.GetValue(throwIfInvalid: false));
Expand Down Expand Up @@ -759,7 +764,7 @@ private bool EvaluatePrerequisiteFlagCondition(PrerequisiteFlagCondition conditi
logBuilder?
.NewLine().Append($"Prerequisite flag evaluation result: '{prerequisiteFlagValue}'.")
.NewLine("Condition (")
.AppendPrerequisiteFlagCondition(condition)
.AppendPrerequisiteFlagCondition(condition, context.Settings)
.Append(") evaluates to ").AppendEvaluationResult(result).Append(".")
.DecreaseIndent()
.NewLine(")");
Expand Down

0 comments on commit 4ab88d3

Please sign in to comment.