Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }