Skip to content

Commit 784092a

Browse files
[FSSDK-11544] review update
1 parent 12d8d1b commit 784092a

File tree

5 files changed

+22
-92
lines changed

5 files changed

+22
-92
lines changed

OptimizelySDK/Config/DatafileProjectConfig.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#define USE_ODP
1919
#endif
2020

21+
using System;
2122
using System.Collections.Generic;
2223
using System.Linq;
2324
using Newtonsoft.Json;
@@ -219,9 +220,7 @@ private Dictionary<string, Dictionary<string, Variation>> _VariationIdMap
219220
/// <summary>
220221
/// Associative array of Holdout ID to Holdout(s) in the datafile
221222
/// </summary>
222-
private Dictionary<string, Holdout> _HoldoutIdMap;
223-
224-
public Dictionary<string, Holdout> HoldoutIdMap => _HoldoutIdMap;
223+
public Dictionary<string, Holdout> HoldoutIdMap { get; private set; }
225224

226225
/// <summary>
227226
/// Associative array of experiment IDs that exist in any feature
@@ -345,7 +344,7 @@ private void Initialize()
345344
f => f.Key, true);
346345
_RolloutIdMap = ConfigParser<Rollout>.GenerateMap(Rollouts,
347346
r => r.Id.ToString(), true);
348-
_HoldoutIdMap = ConfigParser<Holdout>.GenerateMap(Holdouts,
347+
HoldoutIdMap = ConfigParser<Holdout>.GenerateMap(Holdouts,
349348
h => h.Id, true);
350349

351350
// Overwrite similar items in audience id map with typed audience id map.
@@ -807,15 +806,15 @@ public Holdout GetHoldout(string holdoutId)
807806
return null;
808807
}
809808

810-
if (_HoldoutIdMap.ContainsKey(holdoutId))
809+
if (HoldoutIdMap.ContainsKey(holdoutId))
811810
{
812-
return _HoldoutIdMap[holdoutId];
811+
return HoldoutIdMap[holdoutId];
813812
}
814813

815814
var message = $@"Holdout ID ""{holdoutId}"" is not in datafile.";
816815
Logger.Log(LogLevel.ERROR, message);
817816
ErrorHandler.HandleError(
818-
new InvalidExperimentException("Provided holdout is not in datafile."));
817+
new InvalidHoldoutException("Provided holdout is not in datafile."));
819818
return null;
820819
}
821820

OptimizelySDK/Entity/ExperimentCoreExtensions.cs

Lines changed: 0 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -54,74 +54,5 @@ public static Variation GetVariationByKey(this IExperimentCore experimentCore, s
5454

5555
return experimentCore.Variations.FirstOrDefault(v => v.Key == key);
5656
}
57-
58-
/// <summary>
59-
/// Replace audience IDs with audience names in a condition string
60-
/// </summary>
61-
/// <param name="experimentCore">The experiment or holdout instance</param>
62-
/// <param name="conditionString">String containing audience conditions</param>
63-
/// <param name="audiencesMap">Map of audience ID to audience name</param>
64-
/// <returns>String with audience IDs replaced by names</returns>
65-
public static string ReplaceAudienceIdsWithNames(this IExperimentCore experimentCore,
66-
string conditionString, System.Collections.Generic.Dictionary<string, string> audiencesMap)
67-
{
68-
if (string.IsNullOrEmpty(conditionString) || audiencesMap == null)
69-
{
70-
return conditionString ?? string.Empty;
71-
}
72-
73-
const string beginWord = "AUDIENCE(";
74-
const string endWord = ")";
75-
var keyIdx = 0;
76-
var audienceId = string.Empty;
77-
var collect = false;
78-
var replaced = string.Empty;
79-
80-
foreach (var ch in conditionString)
81-
{
82-
// Extract audience id in parenthesis (example: AUDIENCE("35") => "35")
83-
if (collect)
84-
{
85-
if (ch.ToString() == endWord)
86-
{
87-
// Output the extracted audienceId
88-
var audienceName = audiencesMap.ContainsKey(audienceId) ? audiencesMap[audienceId] : audienceId;
89-
replaced += $"\"{audienceName}\"";
90-
collect = false;
91-
audienceId = string.Empty;
92-
}
93-
else
94-
{
95-
audienceId += ch;
96-
}
97-
continue;
98-
}
99-
100-
// Walk-through until finding a matching keyword "AUDIENCE("
101-
if (ch == beginWord[keyIdx])
102-
{
103-
keyIdx++;
104-
if (keyIdx == beginWord.Length)
105-
{
106-
keyIdx = 0;
107-
collect = true;
108-
}
109-
continue;
110-
}
111-
else
112-
{
113-
if (keyIdx > 0)
114-
{
115-
replaced += beginWord.Substring(0, keyIdx);
116-
}
117-
keyIdx = 0;
118-
}
119-
120-
// Pass through other characters
121-
replaced += ch;
122-
}
123-
124-
return replaced;
125-
}
12657
}
12758
}

OptimizelySDK/Entity/Holdout.cs

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17+
using System;
1718
using System.Collections.Generic;
1819
using System.Linq;
1920
using Newtonsoft.Json;
@@ -179,6 +180,7 @@ public string AudienceConditionsString
179180
{
180181
if (AudienceConditions == null)
181182
{
183+
_audienceConditionsString = null;
182184
return null;
183185
}
184186

@@ -265,20 +267,5 @@ public void GenerateVariationKeyMap()
265267
public bool IsActivated =>
266268
!string.IsNullOrEmpty(Status) && Status == STATUS_RUNNING;
267269

268-
/// <summary>
269-
/// Serializes audiences with provided audience map for display purposes
270-
/// </summary>
271-
/// <param name="audiencesMap">Map of audience ID to audience name</param>
272-
/// <returns>Serialized audience string with names</returns>
273-
public string SerializeAudiences(Dictionary<string, string> audiencesMap)
274-
{
275-
if (AudienceConditions == null)
276-
{
277-
return string.Empty;
278-
}
279-
280-
var serialized = AudienceConditionsString;
281-
return this.ReplaceAudienceIdsWithNames(serialized, audiencesMap);
282-
}
283270
}
284271
}

OptimizelySDK/Exceptions/OptimizelyException.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,10 @@ public class ParseException : OptimizelyException
102102
public ParseException(string message)
103103
: base(message) { }
104104
}
105+
public class InvalidHoldoutException : OptimizelyException
106+
{
107+
public InvalidHoldoutException(string message)
108+
: base(message) { }
109+
}
105110
}
111+

OptimizelySDK/Utils/HoldoutConfig.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,14 @@ public List<Holdout> GetHoldoutsForFlag(string flagId)
159159
/// <returns>The Holdout object if found, null otherwise</returns>
160160
public Holdout GetHoldout(string holdoutId)
161161
{
162-
return _holdoutIdMap.ContainsKey(holdoutId) ? _holdoutIdMap[holdoutId] : null;
162+
if (string.IsNullOrEmpty(holdoutId))
163+
{
164+
return null;
165+
}
166+
167+
_holdoutIdMap.TryGetValue(holdoutId, out var holdout);
168+
169+
return holdout;
163170
}
164171

165172
/// <summary>

0 commit comments

Comments
 (0)