Skip to content

Commit 4c2e720

Browse files
committed
Added Optimizely contexts (closes snowplow#448)
Removed extra references to `hasOwnProperty`
1 parent b7220c3 commit 4c2e720

1 file changed

Lines changed: 104 additions & 84 deletions

File tree

src/js/tracker.js

Lines changed: 104 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -758,15 +758,24 @@
758758
if (window['optimizely']) {
759759

760760
if (autoContexts.optimizelyExperiments) {
761-
combinedContexts = combinedContexts.concat(getOptimizelyExperimentContexts());
761+
var experimentContexts = getOptimizelyExperimentContexts();
762+
for (var i = 0; i < experimentContexts.length; i++) {
763+
combinedContexts.push(experimentContexts[i]);
764+
}
762765
}
763766

764767
if (autoContexts.optimizelyStates) {
765-
combinedContexts = combinedContexts.concat(getOptimizelyStateContexts());
768+
var stateContexts = getOptimizelyStateContexts();
769+
for (var i = 0; i < stateContexts.length; i++) {
770+
combinedContexts.push(stateContexts[i]);
771+
}
766772
}
767773

768774
if (autoContexts.optimizelyVariations) {
769-
combinedContexts = combinedContexts.concat(getOptimizelyVariationContexts());
775+
var variationContexts = getOptimizelyVariationContexts();
776+
for (var i = 0; i < variationContexts.length; i++) {
777+
combinedContexts.push(variationContexts[i]);
778+
}
770779
}
771780

772781
if (autoContexts.optimizelyVisitor) {
@@ -777,11 +786,17 @@
777786
}
778787

779788
if (autoContexts.optimizelyAudiences) {
780-
combinedContexts = combinedContexts.concat(getOptimizelyAudienceContexts());
789+
var audienceContexts = getOptimizelyAudienceContexts();
790+
for (var i = 0; i < audienceContexts.length; i++) {
791+
combinedContexts.push(audienceContexts[i]);
792+
}
781793
}
782794

783795
if (autoContexts.optimizelyDimensions) {
784-
combinedContexts = combinedContexts.concat(getOptimizelyDimensionContexts());
796+
var dimensionContexts = getOptimizelyDimensionContexts();
797+
for (var i = 0; i < dimensionContexts.length; i++) {
798+
combinedContexts.push(dimensionContexts[i]);
799+
}
785800
}
786801
}
787802

@@ -860,19 +875,21 @@
860875
var contexts = [];
861876

862877
for (var key in experiments) {
863-
var context = {};
864-
context['id'] = key;
865-
var e = experiments[key];
866-
if (e.hasOwnProperty('code')) context['code'] = e.code;
867-
if (e.hasOwnProperty('manual')) context['manual'] = e.manual;
868-
if (e.hasOwnProperty('conditional')) context['conditional'] = e.conditional;
869-
if (e.hasOwnProperty('name')) context['name'] = e.name;
870-
if (e.hasOwnProperty('variation_ids')) context['variationIds'] = e.variation_ids;
871-
872-
contexts.push({
873-
schema: 'iglu:com.optimizely/experiment/jsonschema/1-0-0',
874-
data: context
875-
});
878+
if (experiments.hasOwnProperty(key)) {
879+
var context = {};
880+
context['id'] = key;
881+
var experiment = experiments[key];
882+
context['code'] = experiment.code;
883+
context['manual'] = experiment.manual;
884+
context['conditional'] = experiment.conditional;
885+
context['name'] = experiment.name;
886+
context['variationIds'] = experiment.variation_ids;
887+
888+
contexts.push({
889+
schema: 'iglu:com.optimizely/experiment/jsonschema/1-0-0',
890+
data: context
891+
});
892+
}
876893
}
877894
return contexts;
878895
}
@@ -889,26 +906,30 @@
889906
var experiments = window['optimizely'].data.experiments;
890907
if (experiments) {
891908
for (var key in experiments) {
892-
experimentIds.push(key);
909+
if (experiments.hasOwnProperty(key)) {
910+
experimentIds.push(key);
911+
}
893912
}
894913
}
895914

896915
var state = window['optimizely'].data.state;
897916
if (state) {
898917
var contexts = [];
899-
var activeExperiments = state.hasOwnProperty('activeExperiments') ? state.activeExperiments : [];
918+
var activeExperiments = state.activeExperiments || [];
900919

901920
for (var i = 0; i < experimentIds.length; i++) {
902921
var experimentId = experimentIds[i];
903922
var context = {};
904923
context['experimentId'] = experimentId;
905924
context['isActive'] = helpers.isValueInArray(experimentIds[i], activeExperiments);
906-
var variationMap = state.hasOwnProperty('variationMap') ? state.variationMap : {};
907-
if (variationMap.hasOwnProperty(experimentId)) context['variationIndex'] = variationMap[experimentId];
908-
var variationIdsMap = state.hasOwnProperty('variationIdsMap') ? state.variationIdsMap : {};
909-
if (variationIdsMap.hasOwnProperty(experimentId) && variationIdsMap[experimentId].length === 1) context['variationId'] = variationIdsMap[experimentId][0];
910-
var variationNamesMap = state.hasOwnProperty('variationNamesMap') ? state.variationNamesMap : {};
911-
if (variationNamesMap.hasOwnProperty(experimentId)) context['variationName'] = variationNamesMap[experimentId];
925+
var variationMap = state.variationMap || {};
926+
context['variationIndex'] = variationMap[experimentId];
927+
var variationNamesMap = state.variationNamesMap || {};
928+
context['variationName'] = variationNamesMap[experimentId];
929+
var variationIdsMap = state.variationIdsMap || {};
930+
if (variationIdsMap[experimentId] && variationIdsMap[experimentId].length === 1) {
931+
context['variationId'] = variationIdsMap[experimentId][0];
932+
}
912933

913934
contexts.push({
914935
schema: 'iglu:com.optimizely/state/jsonschema/1-0-0',
@@ -931,16 +952,18 @@
931952
var contexts = [];
932953

933954
for (var key in variations) {
934-
var context = {};
935-
context['id'] = key;
936-
var variation = variations[key];
937-
if (variation.hasOwnProperty('name')) context['name'] = variation.name;
938-
if (variation.hasOwnProperty('code')) context['code'] = variation.code;
939-
940-
contexts.push({
941-
schema: 'iglu:com.optimizely/variation/jsonschema/1-0-0',
942-
data: context
943-
});
955+
if (variations.hasOwnProperty(key)) {
956+
var context = {};
957+
context['id'] = key;
958+
var variation = variations[key];
959+
context['name'] = variation.name;
960+
context['code'] = variation.code;
961+
962+
contexts.push({
963+
schema: 'iglu:com.optimizely/variation/jsonschema/1-0-0',
964+
data: context
965+
});
966+
}
944967
}
945968
return contexts;
946969
}
@@ -956,22 +979,22 @@
956979
var visitor = window['optimizely'].data.visitor;
957980
if (visitor) {
958981
var context = {};
959-
if (visitor.hasOwnProperty('browser')) context['browser'] = visitor.browser;
960-
if (visitor.hasOwnProperty('browserVersion')) context['browserVersion'] = visitor.browserVersion;
961-
if (visitor.hasOwnProperty('device')) context['device'] = visitor.device;
962-
if (visitor.hasOwnProperty('deviceType')) context['deviceType'] = visitor.deviceType;
963-
if (visitor.hasOwnProperty('ip')) context['ip'] = visitor.ip;
964-
var platform = visitor.hasOwnProperty('platform') && visitor.platform ? visitor.platform : {};
965-
if (platform.hasOwnProperty('id')) context['platformId'] = platform.id;
966-
if (platform.hasOwnProperty('version')) context['platformVersion'] = platform.version;
967-
var location = visitor.hasOwnProperty('location') && visitor.location ? visitor.location : {};
968-
if (location.hasOwnProperty('city')) context['locationCity'] = location.city;
969-
if (location.hasOwnProperty('region')) context['locationRegion'] = location.region;
970-
if (location.hasOwnProperty('country')) context['locationCountry'] = location.country;
971-
if (visitor.hasOwnProperty('mobile')) context['mobile'] = visitor.mobile;
972-
if (visitor.hasOwnProperty('mobileId')) context['mobileId'] = visitor.mobileId;
973-
if (visitor.hasOwnProperty('referrer')) context['referrer'] = visitor.referrer;
974-
if (visitor.hasOwnProperty('os')) context['os'] = visitor.os;
982+
context['browser'] = visitor.browser;
983+
context['browserVersion'] = visitor.browserVersion;
984+
context['device'] = visitor.device;
985+
context['deviceType'] = visitor.deviceType;
986+
context['ip'] = visitor.ip;
987+
var platform = visitor.platform || {};
988+
context['platformId'] = platform.id;
989+
context['platformVersion'] = platform.version;
990+
var location = visitor.location || {};
991+
context['locationCity'] = location.city;
992+
context['locationRegion'] = location.region;
993+
context['locationCountry'] = location.country;
994+
context['mobile'] = visitor.mobile;
995+
context['mobileId'] = visitor.mobileId;
996+
context['referrer'] = visitor.referrer;
997+
context['os'] = visitor.os;
975998

976999
return {
9771000
schema: 'iglu:com.optimizely/visitor/jsonschema/1-0-0',
@@ -991,14 +1014,16 @@
9911014
var contexts = [];
9921015

9931016
for (var key in audienceIds) {
994-
var context = {};
995-
context['id'] = key;
996-
context['isMember'] = audienceIds[key];
997-
998-
contexts.push({
999-
schema: 'iglu:com.optimizely/visitor_audience/jsonschema/1-0-0',
1000-
data: context
1001-
});
1017+
if (audienceIds.hasOwnProperty(key)) {
1018+
var context = {};
1019+
context['id'] = key;
1020+
context['isMember'] = audienceIds[key];
1021+
1022+
contexts.push({
1023+
schema: 'iglu:com.optimizely/visitor_audience/jsonschema/1-0-0',
1024+
data: context
1025+
});
1026+
}
10021027
}
10031028
return contexts;
10041029
}
@@ -1016,14 +1041,16 @@
10161041
var contexts = [];
10171042

10181043
for (var key in dimensionIds) {
1019-
var context = {};
1020-
context['id'] = key;
1021-
context['value'] = dimensionIds[key];
1022-
1023-
contexts.push({
1024-
schema: 'iglu:com.optimizely/visitor_dimension/jsonschema/1-0-0',
1025-
data: context
1026-
});
1044+
if (dimensionIds.hasOwnProperty(key)) {
1045+
var context = {};
1046+
context['id'] = key;
1047+
context['value'] = dimensionIds[key];
1048+
1049+
contexts.push({
1050+
schema: 'iglu:com.optimizely/visitor_dimension/jsonschema/1-0-0',
1051+
data: context
1052+
});
1053+
}
10271054
}
10281055
return contexts;
10291056
}
@@ -1039,22 +1066,15 @@
10391066
var augur = window['augur'];
10401067
if (augur) {
10411068
var context = { consumer: {}, device: {} };
1042-
var consumer = augur.hasOwnProperty('consumer') ? augur.consumer : {};
1043-
if (consumer.hasOwnProperty('UID')) context['consumer']['UUID'] = consumer.UID;
1044-
var device = augur.hasOwnProperty('device') ? augur.device : {};
1045-
if (device.hasOwnProperty('ID')) context['device']['ID'] = device.ID;
1046-
if (device.hasOwnProperty('isBot')) context['device']['isBot'] = device.isBot;
1047-
if (device.hasOwnProperty('isProxied')) context['device']['isProxied'] = device.isProxied;
1048-
if (device.hasOwnProperty('isTor')) context['device']['isTor'] = device.isTor;
1049-
1050-
// isIncognito can be found in two places
1051-
if (device.hasOwnProperty('isIncognito')) context['device']['isIncognito'] = device.isIncognito;
1052-
if (!context.device.hasOwnProperty('isIncognito')) {
1053-
var fingerprint = device.hasOwnProperty('fingerprint') ? device.fingerprint : {};
1054-
if (fingerprint.hasOwnProperty('browserHasIncognitoEnabled')) {
1055-
context['device']['isIncognito'] = fingerprint.browserHasIncognitoEnabled;
1056-
}
1057-
}
1069+
var consumer = augur.consumer || {};
1070+
context['consumer']['UUID'] = consumer.UID;
1071+
var device = augur.device || {};
1072+
context['device']['ID'] = device.ID;
1073+
context['device']['isBot'] = device.isBot;
1074+
context['device']['isProxied'] = device.isProxied;
1075+
context['device']['isTor'] = device.isTor;
1076+
var fingerprint = device.fingerprint || {};
1077+
context['device']['isIncognito'] = fingerprint.browserHasIncognitoEnabled;
10581078

10591079
return {
10601080
schema: 'iglu:io.augur.snowplow/identity_lite/jsonschema/1-0-0',

0 commit comments

Comments
 (0)