/// <summary> /// Make map of featureVariable which are associated with given feature experiment /// </summary> /// <param name="projectConfig">The project config</param> /// <param name="variableIdMap">Map containing variable ID as key and Object of featureVariable</param> /// <param name="experimentId">experimentId of featureExperiment</param> /// <param name="variation">variation</param> /// <returns>Dictionary | Dictionary of FeatureVariable key and value as FeatureVariable object</returns> private IDictionary <string, OptimizelyVariable> MergeFeatureVariables( ProjectConfig projectConfig, IDictionary <string, FeatureVariable> variableIdMap, string experimentId, Variation variation) { var featureId = projectConfig.GetExperimentFeatureList(experimentId)?.FirstOrDefault(); var featureIdVariablesMap = GetFeatureIdVariablesMap(projectConfig); var variablesMap = new Dictionary <string, OptimizelyVariable>(); if (featureId?.Any() ?? false) { variablesMap = featureIdVariablesMap[featureId]?.Select(f => new OptimizelyVariable(f.Id, f.Key, f.Type.ToString().ToLower(), f.DefaultValue) ).ToDictionary(k => k.Key, v => v); foreach (var featureVariableUsage in variation.FeatureVariableUsageInstances) { var defaultVariable = variableIdMap[featureVariableUsage.Id]; var optimizelyVariable = new OptimizelyVariable(featureVariableUsage.Id, defaultVariable.Key, defaultVariable.Type.ToString().ToLower(), variation.IsFeatureEnabled ? featureVariableUsage.Value : defaultVariable.DefaultValue); variablesMap[defaultVariable.Key] = optimizelyVariable; } } return(variablesMap); }
/// <summary> /// Make map of featureVariable which are associated with given feature experiment /// </summary> /// <param name="variableIdMap">Map containing variable ID as key and Object of featureVariable</param> /// <param name="featureId">feature Id of featureExperiment</param> /// <param name="featureVariableUsages">IEnumerable of features variable usage</param> /// <param name="isFeatureEnabled">isFeatureEnabled of variation</param> /// <returns>Dictionary | Dictionary of FeatureVariable key and value as FeatureVariable object</returns> private IDictionary <string, OptimizelyVariable> MergeFeatureVariables( IDictionary <string, FeatureVariable> variableIdMap, string featureId, IEnumerable <FeatureVariableUsage> featureVariableUsages, bool isFeatureEnabled) { var variablesMap = new Dictionary <string, OptimizelyVariable>(); if (!string.IsNullOrEmpty(featureId)) { variablesMap = featureIdVariablesMap[featureId]?.Select(f => new OptimizelyVariable(f.Id, f.Key, f.Type.ToString().ToLower(), f.DefaultValue) ).ToDictionary(k => k.Key, v => v); foreach (var featureVariableUsage in featureVariableUsages) { var defaultVariable = variableIdMap[featureVariableUsage.Id]; var optimizelyVariable = new OptimizelyVariable(featureVariableUsage.Id, defaultVariable.Key, defaultVariable.Type.ToString().ToLower(), isFeatureEnabled ? featureVariableUsage.Value : defaultVariable.DefaultValue); variablesMap[defaultVariable.Key] = optimizelyVariable; } } return(variablesMap); }