Skip to content

Commit d2c7d79

Browse files
[FSSDK-11544] core restructure
1 parent 7d15af0 commit d2c7d79

File tree

13 files changed

+292
-627
lines changed

13 files changed

+292
-627
lines changed

OptimizelySDK.Net35/OptimizelySDK.Net35.csproj

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,11 @@
8888
<Compile Include="..\OptimizelySDK\Entity\Experiment.cs">
8989
<Link>Entity\Experiment.cs</Link>
9090
</Compile>
91-
<Compile Include="..\OptimizelySDK\Entity\ExperimentCoreExtensions.cs">
92-
<Link>Entity\ExperimentCoreExtensions.cs</Link>
93-
</Compile>
9491
<Compile Include="..\OptimizelySDK\Entity\Holdout.cs">
9592
<Link>Entity\Holdout.cs</Link>
9693
</Compile>
97-
<Compile Include="..\OptimizelySDK\Entity\IExperimentCore.cs">
98-
<Link>Entity\IExperimentCore.cs</Link>
94+
<Compile Include="..\OptimizelySDK\Entity\ExperimentCore.cs">
95+
<Link>Entity\ExperimentCore.cs</Link>
9996
</Compile>
10097
<Compile Include="..\OptimizelySDK\Entity\FeatureDecision.cs">
10198
<Link>Entity\FeatureDecision.cs</Link>

OptimizelySDK.Net40/OptimizelySDK.Net40.csproj

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,11 @@
9090
<Compile Include="..\OptimizelySDK\Entity\Experiment.cs">
9191
<Link>Entity\Experiment.cs</Link>
9292
</Compile>
93-
<Compile Include="..\OptimizelySDK\Entity\ExperimentCoreExtensions.cs">
94-
<Link>Entity\ExperimentCoreExtensions.cs</Link>
95-
</Compile>
9693
<Compile Include="..\OptimizelySDK\Entity\Holdout.cs">
9794
<Link>Entity\Holdout.cs</Link>
9895
</Compile>
99-
<Compile Include="..\OptimizelySDK\Entity\IExperimentCore.cs">
100-
<Link>Entity\IExperimentCore.cs</Link>
96+
<Compile Include="..\OptimizelySDK\Entity\ExperimentCore.cs">
97+
<Link>Entity\ExperimentCore.cs</Link>
10198
</Compile>
10299
<Compile Include="..\OptimizelySDK\Entity\FeatureDecision.cs">
103100
<Link>Entity\FeatureDecision.cs</Link>

OptimizelySDK.NetStandard16/OptimizelySDK.NetStandard16.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,8 @@
2626
<Compile Include="..\OptimizelySDK\Entity\Event.cs" />
2727
<Compile Include="..\OptimizelySDK\Entity\EventTags.cs" />
2828
<Compile Include="..\OptimizelySDK\Entity\Experiment.cs" />
29-
<Compile Include="..\OptimizelySDK\Entity\ExperimentCoreExtensions.cs" />
3029
<Compile Include="..\OptimizelySDK\Entity\Holdout.cs" />
31-
<Compile Include="..\OptimizelySDK\Entity\IExperimentCore.cs" />
30+
<Compile Include="..\OptimizelySDK\Entity\ExperimentCore.cs" />
3231
<Compile Include="..\OptimizelySDK\Entity\FeatureDecision.cs" />
3332
<Compile Include="..\OptimizelySDK\Entity\ForcedVariation.cs" />
3433
<Compile Include="..\OptimizelySDK\Entity\Group.cs" />

OptimizelySDK.NetStandard20/OptimizelySDK.NetStandard20.csproj

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -178,16 +178,12 @@
178178
<Compile Include="..\OptimizelySDK\Entity\Experiment.cs">
179179
<Link>Entity\Experiment.cs</Link>
180180
</Compile>
181-
<Compile Include="..\OptimizelySDK\Entity\ExperimentCoreExtensions.cs">
182-
<Link>Entity\ExperimentCoreExtensions.cs</Link>
183-
</Compile>
184181
<Compile Include="..\OptimizelySDK\Entity\Holdout.cs">
185182
<Link>Entity\Holdout.cs</Link>
186183
</Compile>
187-
<Compile Include="..\OptimizelySDK\Entity\IExperimentCore.cs">
188-
<Link>Entity\IExperimentCore.cs</Link>
189-
</Compile>
190-
<Compile Include="..\OptimizelySDK\Entity\FeatureDecision.cs">
184+
<Compile Include="..\OptimizelySDK\Entity\ExperimentCore.cs">
185+
<Link>Entity\ExperimentCore.cs</Link>
186+
</Compile> <Compile Include="..\OptimizelySDK\Entity\FeatureDecision.cs">
191187
<Link>Entity\FeatureDecision.cs</Link>
192188
</Compile>
193189
<Compile Include="..\OptimizelySDK\Entity\FeatureFlag.cs">

OptimizelySDK.Tests/EntityTests/HoldoutTests.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ public void TestHoldoutDeserialization()
4949
Assert.AreEqual("holdout_global_1", globalHoldout.Id);
5050
Assert.AreEqual("global_holdout", globalHoldout.Key);
5151
Assert.AreEqual("Running", globalHoldout.Status);
52-
Assert.AreEqual("layer_1", globalHoldout.LayerId);
5352
Assert.IsNotNull(globalHoldout.Variations);
5453
Assert.AreEqual(1, globalHoldout.Variations.Length);
5554
Assert.IsNotNull(globalHoldout.TrafficAllocation);
@@ -174,7 +173,6 @@ public void TestHoldoutNullSafety()
174173
""id"": ""test_holdout"",
175174
""key"": ""test_key"",
176175
""status"": ""Running"",
177-
""layerId"": ""test_layer"",
178176
""variations"": [],
179177
""trafficAllocation"": [],
180178
""audienceIds"": [],

OptimizelySDK.Tests/UtilsTests/HoldoutConfigTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,6 @@ private Holdout CreateTestHoldout(string id, string key, string[] includedFlags,
332332
Id = id,
333333
Key = key,
334334
Status = "Running",
335-
LayerId = "test_layer",
336335
Variations = new Variation[0],
337336
TrafficAllocation = new TrafficAllocation[0],
338337
AudienceIds = new string[0],

OptimizelySDK/Config/DatafileProjectConfig.cs

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

21-
using System;
2221
using System.Collections.Generic;
2322
using System.Linq;
2423
using Newtonsoft.Json;

OptimizelySDK/Entity/Experiment.cs

Lines changed: 5 additions & 218 deletions
Original file line numberDiff line numberDiff line change
@@ -15,38 +15,22 @@
1515
*/
1616

1717
using System.Collections.Generic;
18-
using Newtonsoft.Json;
19-
using Newtonsoft.Json.Linq;
20-
using OptimizelySDK.AudienceConditions;
21-
using OptimizelySDK.Utils;
2218

2319
namespace OptimizelySDK.Entity
2420
{
25-
public class Experiment : IdKeyEntity, IExperimentCore
21+
public class Experiment : ExperimentCore
2622
{
27-
private const string STATUS_RUNNING = "Running";
28-
2923
private const string MUTEX_GROUP_POLICY = "random";
3024

31-
/// <summary>
32-
/// Experiment Status
33-
/// </summary>
34-
public string Status { get; set; }
35-
36-
/// <summary>
37-
/// Layer ID for the experiment
38-
/// </summary>
39-
public string LayerId { get; set; }
40-
4125
/// <summary>
4226
/// Group ID for the experiment
4327
/// </summary>
4428
public string GroupId { get; set; }
4529

4630
/// <summary>
47-
/// Variations for the experiment
31+
/// Layer ID for the experiment
4832
/// </summary>
49-
public Variation[] Variations { get; set; }
33+
public string LayerId { get; set; }
5034

5135
/// <summary>
5236
/// ForcedVariations for the experiment
@@ -63,203 +47,6 @@ public class Experiment : IdKeyEntity, IExperimentCore
6347
/// </summary>
6448
public string GroupPolicy { get; set; }
6549

66-
/// <summary>
67-
/// ID(s) of audience(s) the experiment is targeted to
68-
/// </summary>
69-
public string[] AudienceIds { get; set; }
70-
71-
private ICondition _audienceIdsList = null;
72-
73-
/// <summary>
74-
/// De-serialized audience conditions
75-
/// </summary>
76-
public ICondition AudienceIdsList
77-
{
78-
get
79-
{
80-
if (AudienceIds == null || AudienceIds.Length == 0)
81-
{
82-
return null;
83-
}
84-
85-
if (_audienceIdsList == null)
86-
{
87-
var conditions = new List<ICondition>();
88-
foreach (var audienceId in AudienceIds)
89-
{
90-
conditions.Add(
91-
new AudienceIdCondition() { AudienceId = (string)audienceId });
92-
}
93-
94-
_audienceIdsList = new OrCondition() { Conditions = conditions.ToArray() };
95-
}
96-
97-
return _audienceIdsList;
98-
}
99-
}
100-
101-
private string _audienceIdsString = null;
102-
103-
/// <summary>
104-
/// Stringified audience conditions
105-
/// </summary>
106-
public string AudienceIdsString
107-
{
108-
get
109-
{
110-
if (AudienceIds == null)
111-
{
112-
return null;
113-
}
114-
115-
if (_audienceIdsString == null)
116-
{
117-
_audienceIdsString = JsonConvert.SerializeObject(AudienceIds, Formatting.None);
118-
}
119-
120-
return _audienceIdsString;
121-
}
122-
}
123-
124-
/// <summary>
125-
/// Traffic allocation of variations in the experiment
126-
/// </summary>
127-
public TrafficAllocation[] TrafficAllocation { get; set; }
128-
129-
/// <summary>
130-
/// Audience Conditions
131-
/// </summary>
132-
public object AudienceConditions { get; set; }
133-
134-
private ICondition _audienceConditionsList = null;
135-
136-
/// <summary>
137-
/// De-serialized audience conditions
138-
/// </summary>
139-
public ICondition AudienceConditionsList
140-
{
141-
get
142-
{
143-
if (AudienceConditions == null)
144-
{
145-
return null;
146-
}
147-
148-
if (_audienceConditionsList == null)
149-
{
150-
if (AudienceConditions is string)
151-
{
152-
_audienceConditionsList =
153-
ConditionParser.ParseAudienceConditions(
154-
JToken.Parse((string)AudienceConditions));
155-
}
156-
else
157-
{
158-
_audienceConditionsList =
159-
ConditionParser.ParseAudienceConditions((JToken)AudienceConditions);
160-
}
161-
}
162-
163-
return _audienceConditionsList;
164-
}
165-
}
166-
167-
private string _audienceConditionsString = null;
168-
169-
/// <summary>
170-
/// Stringified audience conditions
171-
/// </summary>
172-
public string AudienceConditionsString
173-
{
174-
get
175-
{
176-
if (AudienceConditions == null)
177-
{
178-
return null;
179-
}
180-
181-
if (_audienceConditionsString == null)
182-
{
183-
if (AudienceConditions is JToken token)
184-
{
185-
_audienceConditionsString = token.ToString(Formatting.None);
186-
}
187-
else
188-
{
189-
_audienceConditionsString = AudienceConditions.ToString();
190-
}
191-
}
192-
193-
return _audienceConditionsString;
194-
}
195-
}
196-
197-
private bool isGenerateKeyMapCalled = false;
198-
199-
private Dictionary<string, Variation> _VariationKeyToVariationMap;
200-
201-
public Dictionary<string, Variation> VariationKeyToVariationMap
202-
{
203-
get
204-
{
205-
if (!isGenerateKeyMapCalled)
206-
{
207-
GenerateVariationKeyMap();
208-
}
209-
210-
return _VariationKeyToVariationMap;
211-
}
212-
}
213-
214-
private Dictionary<string, Variation> _VariationIdToVariationMap;
215-
216-
public Dictionary<string, Variation> VariationIdToVariationMap
217-
{
218-
get
219-
{
220-
if (!isGenerateKeyMapCalled)
221-
{
222-
GenerateVariationKeyMap();
223-
}
224-
225-
return _VariationIdToVariationMap;
226-
}
227-
}
228-
229-
public void GenerateVariationKeyMap()
230-
{
231-
if (Variations == null)
232-
{
233-
return;
234-
}
235-
236-
_VariationIdToVariationMap =
237-
ConfigParser<Variation>.GenerateMap(Variations, a => a.Id, true);
238-
_VariationKeyToVariationMap =
239-
ConfigParser<Variation>.GenerateMap(Variations, a => a.Key, true);
240-
isGenerateKeyMapCalled = true;
241-
}
242-
243-
// Code from PHP, need to build traffic and variations from config
244-
#if false
245-
/**
246-
* @param $variations array Variations in experiment.
247-
*/
248-
public function setVariations($variations)
249-
{
250-
$this->_variations = ConfigParser::generateMap($variations, null, Variation::class);
251-
}
252-
253-
/**
254-
* @param $trafficAllocation array Traffic allocation of variations in experiment.
255-
*/
256-
public function setTrafficAllocation($trafficAllocation)
257-
{
258-
$this->_trafficAllocation =
259-
ConfigParser::generateMap($trafficAllocation, null, TrafficAllocation::class);
260-
}
261-
#endif
262-
26350
/// <summary>
26451
/// Determine if experiment is in a mutually exclusive group
26552
/// </summary>
@@ -283,8 +70,8 @@ public bool IsUserInForcedVariation(string userId)
28370
}
28471

28572
/// <summary>
286-
/// Determine if experiment is currently activated/running (IExperimentCore implementation)
73+
/// Determine if experiment is currently activated/running (implementation of abstract property)
28774
/// </summary>
288-
public bool IsActivated => IsExperimentRunning;
75+
public override bool IsActivated => IsExperimentRunning;
28976
}
29077
}

0 commit comments

Comments
 (0)