Skip to content

Commit 2969de9

Browse files
authored
Fs3 370 slug (#4)
### [3.0.3 (Latest version)](doc:android-v3) * Added campaign slug information in FlagMetadata
1 parent 3b1c16f commit 2969de9

11 files changed

Lines changed: 42 additions & 20 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ buildscript {
1414
if (flagship_version_name != null)
1515
rootProject.ext.flagship_version_name = flagship_version_name
1616
else
17-
rootProject.ext.flagship_version_name = "3.0.2"
17+
rootProject.ext.flagship_version_name = "3.0.3"
1818

1919
if (flagship_version_code != null)
2020
rootProject.ext.flagship_version_code = flagship_version_code

flagship/src/main/java/com/abtasty/flagship/cache/VisitorCacheHelper.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,15 @@ public void applyFromJSON(VisitorDelegateDTO visitorDelegateDTO, JSONObject data
4444
String campaignId = campaignObject.getString("campaignId");
4545
String variationGroupId = campaignObject.getString("variationGroupId");
4646
String variationId = campaignObject.getString("variationId");
47+
String slug = campaignObject.optString("slug", "");
4748
boolean isReference = campaignObject.getBoolean("isReference");
4849
String type = campaignObject.getString("type");
4950
if (campaignObject.optBoolean("activated", false) && !visitorDelegate.getActivatedVariations().contains(variationId))
5051
visitorDelegate.getActivatedVariations().add(variationId);
5152
JSONObject flagsJson = campaignObject.optJSONObject("flags");
5253
if (flagsJson != null) {
5354
flagsJson.keySet().forEach(key -> {
54-
Modification modification = new Modification(key, campaignId, variationGroupId, variationId, isReference, flagsJson.get(key), type);
55+
Modification modification = new Modification(key, campaignId, variationGroupId, variationId, isReference, flagsJson.get(key), type, slug);
5556
visitorDelegate.getModifications().put(key, modification);
5657
});
5758
}
@@ -103,6 +104,7 @@ private static JSONArray modificationsToCacheJSON(VisitorDelegateDTO visitorDele
103104
.put("variationId", m.getValue().getVariationId())
104105
.put("isReference", m.getValue().isReference())
105106
.put("type", m.getValue().getType())
107+
.put("slug", m.getValue().getSlug())
106108
.put("activated", visitorDelegateDTO.getActivatedVariations().contains(m.getValue().getVariationId()))
107109
.put("flags", new JSONObject().put(m.getValue().getKey(),
108110
(m.getValue().getValue() != null) ? m.getValue().getValue() : JSONObject.NULL)));

flagship/src/main/java/com/abtasty/flagship/model/Campaign.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,19 @@ public static Campaign parse(JSONObject campaignObject) {
4646
try {
4747
String id = campaignObject.getString("id");
4848
String campaignType = campaignObject.optString("type", "");
49+
String slug = campaignObject.isNull("slug") ? "" : campaignObject.optString("slug", "");
4950
LinkedList<VariationGroup> variationGroups = new LinkedList<>();
5051
JSONArray variationGroupArray = campaignObject.optJSONArray("variationGroups");
5152
if (variationGroupArray != null) {
5253
//bucketing
5354
variationGroupArray.forEach(variationGroupsObj -> {
54-
VariationGroup variationGroup = VariationGroup.parse(id, campaignType, (JSONObject) variationGroupsObj, true);
55+
VariationGroup variationGroup = VariationGroup.parse(id, campaignType, slug, (JSONObject) variationGroupsObj, true);
5556
if (variationGroup != null)
5657
variationGroups.add(variationGroup);
5758
});
5859
} else {
5960
//api
60-
VariationGroup variationGroup = VariationGroup.parse(id, campaignType, campaignObject, false);
61+
VariationGroup variationGroup = VariationGroup.parse(id, campaignType, slug, campaignObject, false);
6162
if (variationGroup != null)
6263
variationGroups.add(variationGroup);
6364
}

flagship/src/main/java/com/abtasty/flagship/model/FlagMetadata.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,32 @@ public class FlagMetadata {
1010
public final boolean isReference;
1111
public final String campaignType;
1212

13+
public final String slug;
14+
1315
public FlagMetadata() {
1416
this.campaignId = "";
1517
this.variationGroupId = "";
1618
this.variationId = "";
1719
this.isReference = false;
1820
this.campaignType = "";
21+
this.slug = "";
1922
}
2023

21-
public FlagMetadata(String campaignId, String variationGroupId, String variationId, Boolean isReference, String campaignType) {
24+
public FlagMetadata(String campaignId, String variationGroupId, String variationId, Boolean isReference, String campaignType, String slug) {
2225
this.campaignId = campaignId;
2326
this.variationGroupId = variationGroupId;
2427
this.variationId = variationId;
2528
this.isReference = isReference;
2629
this.campaignType = campaignType;
30+
this.slug = slug;
2731
}
2832

2933
public static FlagMetadata fromModification(Modification modification) {
3034
if (modification == null)
3135
return new FlagMetadata();
3236
else {
3337
return new FlagMetadata(modification.getCampaignId(), modification.getVariationGroupId(),
34-
modification.getVariationId(), modification.isReference(), modification.getType());
38+
modification.getVariationId(), modification.isReference(), modification.getType(), modification.getSlug());
3539
}
3640
}
3741

@@ -48,7 +52,8 @@ public JSONObject toJSON() {
4852
.put("variationGroupId", variationGroupId)
4953
.put("variationId", variationId)
5054
.put("isReference", isReference)
51-
.put("campaignType", campaignType);
55+
.put("campaignType", campaignType)
56+
.put("slug", slug);
5257
}
5358
}
5459
}

flagship/src/main/java/com/abtasty/flagship/model/Modification.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,18 @@ public class Modification implements Serializable {
1212
private final Object value;
1313
private final String type;
1414

15+
private final String slug;
16+
1517
public Modification(String key, String campaignId, String variationGroupId, String variationId, boolean isReference,
16-
Object value, String type) {
18+
Object value, String type, String slug) {
1719
this.key = key;
1820
this.campaignId = campaignId;
1921
this.variationGroupId = variationGroupId;
2022
this.variationId = variationId;
2123
this.isReference = isReference;
2224
this.value = value;
2325
this.type = type;
26+
this.slug = slug;
2427
}
2528

2629
public String getKey() {
@@ -50,4 +53,8 @@ public Object getValue() {
5053
public String getType() {
5154
return type;
5255
}
56+
57+
public String getSlug() {
58+
return slug;
59+
}
5360
}

flagship/src/main/java/com/abtasty/flagship/model/Modifications.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,15 @@ public HashMap<String, Modification> getValues() {
5050
return values;
5151
}
5252

53-
public static Modifications parse(String campaignId, String campaignType, String variationGroupId, String variationId, boolean isReference, JSONObject modificationsObj) {
53+
public static Modifications parse(String campaignId, String campaignType, String slug, String variationGroupId, String variationId, boolean isReference, JSONObject modificationsObj) {
5454
try {
5555
// String type = modificationsObj.getString("type");
5656
HashMap<String, Modification> values = new HashMap<>();
5757
JSONObject valueObj = modificationsObj.getJSONObject("value");
5858
valueObj.keySet().forEach(key -> {
5959
Object value = valueObj.isNull(key) ? null : valueObj.get(key);
6060
if (value instanceof Boolean || value instanceof Number || value instanceof String || value instanceof JSONObject || value instanceof JSONArray || value == null)
61-
values.put(key, new Modification(key, campaignId, variationGroupId, variationId, isReference, value, campaignType));
61+
values.put(key, new Modification(key, campaignId, variationGroupId, variationId, isReference, value, campaignType, slug));
6262
else
6363
FlagshipLogManager.log(FlagshipLogManager.Tag.PARSING, LogManager.Level.ERROR, FlagshipConstants.Errors.PARSING_MODIFICATION_ERROR);
6464
});

flagship/src/main/java/com/abtasty/flagship/model/Variation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@ public int getAllocation() {
5353
return allocation;
5454
}
5555

56-
public static Variation parse(Boolean bucketingMode, String campaignId, String campaignType, String variationGroupId, JSONObject variationObj) {
56+
public static Variation parse(Boolean bucketingMode, String campaignId, String campaignType, String slug, String variationGroupId, JSONObject variationObj) {
5757
try {
5858
String variationId = variationObj.getString("id");
5959
boolean isReference = variationObj.optBoolean("reference", false);
60-
Modifications modifications = Modifications.parse(campaignId, campaignType, variationGroupId, variationId, isReference, variationObj.getJSONObject("modifications"));
60+
Modifications modifications = Modifications.parse(campaignId, campaignType, slug, variationGroupId, variationId, isReference, variationObj.getJSONObject("modifications"));
6161
int allocation = variationObj.optInt("allocation", bucketingMode ? 0 : 100);
6262
//In Api mode always 100%, in bucketing mode the variations at 0% are loaded just to check if it matches one in cache at selection time.
6363
return new Variation(campaignId, variationGroupId, variationId, isReference, modifications, allocation);

flagship/src/main/java/com/abtasty/flagship/model/VariationGroup.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,15 @@ public boolean isTargetingValid(HashMap<String, Object> context) {
8181
return true;
8282
}
8383

84-
public static VariationGroup parse(String campaignId, String campaignType, JSONObject variationGroupsObj, boolean bucketing) {
84+
public static VariationGroup parse(String campaignId, String campaignType, String slug, JSONObject variationGroupsObj, boolean bucketing) {
8585
try {
8686
String variationGroupId = variationGroupsObj.getString(bucketing ? "id" : "variationGroupId");
8787
TargetingGroups targetingGroups = null;
8888
LinkedHashMap<String, Variation> variations = new LinkedHashMap<>();
8989
if (!bucketing) {
9090
// api
9191
JSONObject variationObj = variationGroupsObj.getJSONObject("variation");
92-
Variation variation = Variation.parse(bucketing, campaignId, campaignType, variationGroupId, variationObj);
92+
Variation variation = Variation.parse(bucketing, campaignId, campaignType, slug, variationGroupId, variationObj);
9393
if (variation != null)
9494
variations.put(variation.getVariationId(), variation);
9595
} else {
@@ -98,7 +98,7 @@ public static VariationGroup parse(String campaignId, String campaignType, JSONO
9898
if (variationArr != null) {
9999
for (int i = 0; i < variationArr.length(); i++) {
100100
JSONObject variationObj = variationArr.getJSONObject(i);
101-
Variation variation = Variation.parse(bucketing, campaignId, campaignType, variationGroupId, variationObj);
101+
Variation variation = Variation.parse(bucketing, campaignId, campaignType, slug, variationGroupId, variationObj);
102102
if (variation != null)
103103
variations.put(variation.getVariationId(), variation);
104104
}

flagship/src/test/java/FlagshipIntegrationTests.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1464,7 +1464,8 @@ public void cacheHit(String visitorId, JSONObject data) {
14641464
cacheHitLatch.countDown();
14651465
break;
14661466
}
1467-
default: {
1467+
case "ACTIVATION": {
1468+
cacheHitLatch.countDown();
14681469
break;
14691470
}
14701471
}
@@ -1477,7 +1478,7 @@ public void cacheHit(String visitorId, JSONObject data) {
14771478

14781479
@Override
14791480
public JSONArray lookupHits(String visitorId) {
1480-
JSONArray array;
1481+
JSONArray array = new JSONArray();
14811482
if (visitorId.equals("visitor_id_2"))
14821483
array = new JSONArray("{]"); //shouldn't crash
14831484
else {
@@ -1541,7 +1542,7 @@ public void flushHits(String visitorId) {
15411542
assertEquals(8, cacheVisitorLatch.getCount());
15421543
assertEquals(8, lookUpVisitorLatch.getCount());
15431544
assertEquals(9, flushVisitorLatch.getCount());
1544-
assertEquals(2, cacheHitLatch.getCount());
1545+
assertEquals(1, cacheHitLatch.getCount());
15451546
assertEquals(8, lookupHitsLatch.getCount());
15461547
assertEquals(9, flushHitsLatch.getCount());
15471548
assertTrue(cacheVisitorOk.get());
@@ -1600,7 +1601,7 @@ public void onLog(Level level, String tag, String message) {
16001601
assertFalse(rank_plus.metadata().isReference);
16011602
assertEquals("ab", rank_plus.metadata().campaignType);
16021603
assertTrue(rank_plus.metadata().exists());
1603-
assertEquals(5, rank_plus.metadata().toJSON().length());
1604+
assertEquals(6, rank_plus.metadata().toJSON().length());
16041605

16051606
Flag<String> do_not_exists = visitor.getFlag("do_not_exists", "a");
16061607

@@ -1627,6 +1628,12 @@ public void onLog(Level level, String tag, String message) {
16271628
Thread.sleep(1500);
16281629
assertEquals(6, activateLatch.getCount());
16291630

1631+
//testing slug
1632+
1633+
assertEquals("", visitor.getFlag("visitorIdColor", "#00000000").metadata().slug);
1634+
assertEquals("campaignSlug", visitor.getFlag("rank_plus", "#00000000").metadata().slug);
1635+
assertEquals("", visitor.getFlag("eflzjefl", "#00000000").metadata().slug);
1636+
16301637
}
16311638

16321639
@Test
@@ -1699,5 +1706,4 @@ public void cache_bucketing() throws InterruptedException, ExecutionException, I
16991706
assertEquals(2, json.getJSONObject("decision_file").getJSONArray("campaigns").length());
17001707

17011708
}
1702-
17031709
}

flagship/src/test/resources/bucketing_response_1.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@
234234
{
235235
"id": "brjjpk7734cg0sl5llll",
236236
"type": "ab",
237+
"slug": "campaignSlug",
237238
"variationGroups": [
238239
{
239240
"id": "brjjpk7734cg0sl5mmmm",

0 commit comments

Comments
 (0)