public bool EvaluateBooleanToggleValue(IFeatureToggle toggle)
        {                        
            var toggleName = toggle.GetType().Name;

            var connectionNameInConfig = ToggleConfigurationSettings.Prefix + toggleName;

            // TODO: need to consider not creating a new document store each time for performance reasons
            var documentStore = new DocumentStore
            {
                ConnectionStringName = connectionNameInConfig
            };

            documentStore.Initialize();

            using (var session = documentStore.OpenSession())
            {
                var t = session.Load<BooleanToggleSetting>(toggleName);

                if (t == null)
                {
                    throw new ToggleConfigurationError("No document was found for toggle " + toggleName);
                }

                return t.Enabled;
            }
        }
        private string GetConnectionStringFromConfig(IFeatureToggle toggle)
        {
            var prefixedToggleConfigName = ToggleConfigurationSettings.Prefix + toggle.GetType().Name;
            var appSettingsConnectionStringKey = prefixedToggleConfigName + ".ConnectionString";
            var appSettingsConnectionStringNameKey = prefixedToggleConfigName + ".ConnectionStringName";

            var isConfiguredViaAppSettingsConnectionString = ConfigurationManager.AppSettings.AllKeys.Contains(appSettingsConnectionStringKey);
            var isConfiguredViaAppSettingsConnectionStringName = ConfigurationManager.AppSettings.AllKeys.Contains(appSettingsConnectionStringNameKey);
            var isConfiguredViaConnectionStrings = ConfigurationManager.ConnectionStrings[prefixedToggleConfigName] != null;

            ValidateConnectionStringSpecifiedOnlyOnce(isConfiguredViaAppSettingsConnectionString, isConfiguredViaAppSettingsConnectionStringName, isConfiguredViaConnectionStrings, prefixedToggleConfigName);
            ValidateConnectionStringNotMissing(isConfiguredViaAppSettingsConnectionString, isConfiguredViaAppSettingsConnectionStringName, isConfiguredViaConnectionStrings, appSettingsConnectionStringKey, appSettingsConnectionStringNameKey, prefixedToggleConfigName);


            if (isConfiguredViaAppSettingsConnectionString)
            {
                return GetAppSettingsConnectionString(appSettingsConnectionStringKey);
            }
            
            if (isConfiguredViaAppSettingsConnectionStringName)
            {
                return GetConnectionStringFromAppSettingsValueThatPointsToNamedConnectionString(appSettingsConnectionStringNameKey);
            }

            return GetConnectionStringDirectlyFromNamedConnectionStrings(prefixedToggleConfigName);
        }
        public Tuple<DateTime, DateTime> EvaluateTimePeriod(IFeatureToggle toggle)
        {
            var toggleNameInConfig = AppSettingsKeys.Prefix + "." + toggle.GetType().Name;

            if (!ConfigurationManager.AppSettings.AllKeys.Contains(toggleNameInConfig))
                throw new ConfigurationErrorsException(string.Format("The key '{0}' was not found in AppSettings",
                                                                     toggleNameInConfig));

            DateTime startDate;
            DateTime endDate;

            try
            {
                var configValues = ConfigurationManager.AppSettings[toggleNameInConfig].Split(new[] { '|' });

                startDate = DateTime.ParseExact(configValues[0].Trim(), ExpectedDateFormat, CultureInfo.InvariantCulture);
                endDate = DateTime.ParseExact(configValues[1].Trim(), ExpectedDateFormat, CultureInfo.InvariantCulture);
            }
            catch (Exception ex)
            {
                throw new ConfigurationErrorsException(string.Format("Configuration for {0} is invalid - date range should be specified like: '02/01/2050 04:05:08 | 07/08/2099 06:05:04'", toggleNameInConfig), ex);
            }

            if (startDate >= endDate)
                throw new ConfigurationErrorsException(string.Format("Configuration for {0} is invalid - the start date must be less then the end date",toggleNameInConfig));

            return new Tuple<DateTime, DateTime>(startDate, endDate);
        }
        public Tuple<DateTime, DateTime> EvaluateTimePeriod(IFeatureToggle toggle)
        {
            var toggleNameInConfig = toggle.GetType().Name;

            if (!Application.Current.Resources.Contains(toggleNameInConfig))
                throw new Exception(string.Format("The key '{0}' was not found in Application.Current.Resources", toggleNameInConfig));

            DateTime startDate;
            DateTime endDate;

            try
            {
                var configValues = ((string) Application.Current.Resources[toggleNameInConfig]).Split(new[] { '|' });

                const string expectedDateFormat = @"dd/MM/yyyy HH:mm:ss";

                startDate = DateTime.ParseExact(configValues[0].Trim(), expectedDateFormat, CultureInfo.InvariantCulture);
                endDate = DateTime.ParseExact(configValues[1].Trim(), expectedDateFormat, CultureInfo.InvariantCulture);

            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Configuration for {0} is invalid - date range should be specified like: '02/01/2050 04:05:08 | 07/08/2099 06:05:04'", toggleNameInConfig), ex);
            }

            if (startDate >= endDate)
                throw new Exception(string.Format("Configuration for {0} is invalid - the start date must be less then the end date", toggleNameInConfig));

            return new Tuple<DateTime, DateTime>(startDate, endDate);
        }
        private string GetConnectionStringFromConfig(IFeatureToggle toggle)
        {
            var toggleNameInConfig = AppSettingsKeys.Prefix + "." + toggle.GetType().Name + ".ConnectionString";

            if (!ConfigurationManager.AppSettings.AllKeys.Contains(toggleNameInConfig))
                throw new ConfigurationErrorsException(string.Format("The key '{0}' was not found in AppSettings",
                                                                     toggleNameInConfig));

            return ConfigurationManager.AppSettings[toggleNameInConfig];
        }
        private string GetCommandTextFromAppConfig(IFeatureToggle toggle)
        {
            var toggleNameInConfig = ToggleConfigurationSettings.Prefix + toggle.GetType().Name + ".SqlStatement";

            if (!ConfigurationManager.AppSettings.AllKeys.Contains(toggleNameInConfig))
                throw new ToggleConfigurationError(string.Format("The key '{0}' was not found in AppSettings",
                                                                     toggleNameInConfig));

            return ConfigurationManager.AppSettings[toggleNameInConfig];
        }
        public DateTime EvaluateDateTimeToggleValue(IFeatureToggle toggle)
        {
            var toggleNameInConfig = toggle.GetType().Name;

            if (!Application.Current.Resources.Contains(toggleNameInConfig))
                throw new Exception(string.Format("The key '{0}' was not found in Application.Current.Resources", toggleNameInConfig));

            DateTime toggleValue = (DateTime)Application.Current.Resources[toggleNameInConfig];

            return toggleValue;
        }
        public DateTime EvaluateDateTimeToggleValue(IFeatureToggle toggle)
        {
            var toggleNameInConfig = AppSettingsKeys.Prefix + "." + toggle.GetType().Name;

            if (!ConfigurationManager.AppSettings.AllKeys.Contains(toggleNameInConfig))
                throw new ConfigurationErrorsException(string.Format("The key '{0}' was not found in AppSettings",
                                                                     toggleNameInConfig));

            var configValue = ConfigurationManager.AppSettings[toggleNameInConfig];

            return ParseDateTimeConfigString(configValue, toggleNameInConfig);
        }
        private string GetCommandTextFromAppConfig(IFeatureToggle toggle)
        {
            var sqlCommandKey = ToggleConfigurationSettings.Prefix + toggle.GetType().Name + ".SqlStatement";

            var sqlCommandIsMissing = !ConfigurationManager.AppSettings.AllKeys.Contains(sqlCommandKey);

            if (sqlCommandIsMissing)
            {
                throw new ToggleConfigurationError(string.Format("The appSettings key '{0}' was not found.",
                    sqlCommandKey));
            }

            var configuredSqlCommand = ConfigurationManager.AppSettings[sqlCommandKey];

            if (string.IsNullOrWhiteSpace(configuredSqlCommand))
            {
                throw new ToggleConfigurationError(string.Format("The <appSettings> value for key '{0}' is empty.", sqlCommandKey));
            }

            return configuredSqlCommand;
        }
        public bool EvaluateBooleanToggleValue(IFeatureToggle toggle)
        {
            var toggleNameInConfig = toggle.GetType().Name;

            var localSettings = ApplicationData.Current.LocalSettings;

            if (! localSettings.Values.ContainsKey(toggleNameInConfig))
            {
                throw new ArgumentOutOfRangeException("toggle",
                    string.Format("No toggle value with the key '{0}' was found in local application settings. Ensure you set a boolean value into ApplicationData.Current.LocalSettings with a key that is the same as the name of your feature toggle class.", toggleNameInConfig));
            }

            try
            {
                return (bool) localSettings.Values[toggleNameInConfig];
            }
            catch (Exception ex)
            {
                throw new Exception(
                    string.Format("The value in local application settings for the feature toggle with the key '{0}' is incorrect, it should be a non-nullable boolean value.", toggleNameInConfig),
                    ex);
            }
        }
예제 #11
0
 private static string ExpectedAppSettingsKeyFor(IFeatureToggle toggle)
 {
     return ToggleConfigurationSettings.Prefix + toggle.GetType().Name;
 }
 private static string CalculateToggleNameAsItShouldAppearInConfig(IFeatureToggle toggle)
 {
     return ToggleConfigurationSettings.Prefix + toggle.GetType().Name;
 }
        private string GetConnectionStringFromConfig(IFeatureToggle toggle)
        {
            const string emptyConnectionStringsValueError = "The <connectionStrings> value for connection named '{0}' is empty.";
            const string emptyValueForAppSettingsKeyError = "The <appSettings> value for key '{0}' is empty.";

            var prefixedToggleConfigName = ToggleConfigurationSettings.Prefix + toggle.GetType().Name;
            var appSettingsConnectionStringKey = prefixedToggleConfigName + ".ConnectionString";
            var appSettingsConnectionStringNameKey = prefixedToggleConfigName + ".ConnectionStringName";

            var isConfiguredViaAppSettingsConnectionString = ConfigurationManager.AppSettings.AllKeys.Contains(appSettingsConnectionStringKey);
            var isConfiguredViaAppSettingsConnectionStringName = ConfigurationManager.AppSettings.AllKeys.Contains(appSettingsConnectionStringNameKey);
            var isConfiguredViaConnectionStrings = ConfigurationManager.ConnectionStrings[prefixedToggleConfigName] != null;

            if (CountConnectionStringConfigurations(isConfiguredViaAppSettingsConnectionString,
                isConfiguredViaAppSettingsConnectionStringName, isConfiguredViaConnectionStrings) > 1)
            {
                throw new ToggleConfigurationError(
                    string.Format(
                        "The connection string for '{0}' is configured multiple times.",
                        prefixedToggleConfigName));
            }

            if (CountConnectionStringConfigurations(isConfiguredViaAppSettingsConnectionString, isConfiguredViaAppSettingsConnectionStringName, isConfiguredViaConnectionStrings) == 0)
            {
                throw new ToggleConfigurationError(
                    string.Format(
                        "The connection string was not configured in <appSettings> with a key of '{0}' or '{1}' nor in <connectionStrings> with a name of '{2}'.",
                        appSettingsConnectionStringKey, appSettingsConnectionStringNameKey, prefixedToggleConfigName));
            }

            string configuredConnectionString = String.Empty;

            if (isConfiguredViaAppSettingsConnectionString)
            {
                configuredConnectionString = ConfigurationManager.AppSettings[appSettingsConnectionStringKey];

                if (string.IsNullOrWhiteSpace(configuredConnectionString))
                {
                    throw new ToggleConfigurationError(string.Format(emptyValueForAppSettingsKeyError, appSettingsConnectionStringKey));
                }
            }
            else if (isConfiguredViaAppSettingsConnectionStringName)
            {
                var connectionStringName = ConfigurationManager.AppSettings[appSettingsConnectionStringNameKey];

                if (string.IsNullOrWhiteSpace(connectionStringName))
                {
                    throw new ToggleConfigurationError(string.Format(emptyValueForAppSettingsKeyError, appSettingsConnectionStringNameKey));
                }

                var connectionStringSettings = ConfigurationManager.ConnectionStrings[connectionStringName];

                if (connectionStringSettings == null)
                {
                    throw new ToggleConfigurationError(string.Format("No entry named '{0}' exists in <connectionStrings>.", connectionStringName));
                }

                configuredConnectionString = connectionStringSettings.ConnectionString;

                if (string.IsNullOrWhiteSpace(configuredConnectionString))
                {
                    throw new ToggleConfigurationError(string.Format(emptyConnectionStringsValueError, connectionStringName));
                }
            }
            else
            {
                configuredConnectionString = ConfigurationManager.ConnectionStrings[prefixedToggleConfigName].ConnectionString;

                if (string.IsNullOrWhiteSpace(configuredConnectionString))
                {
                    throw new ToggleConfigurationError(string.Format(emptyConnectionStringsValueError, prefixedToggleConfigName));
                }
            }

            return configuredConnectionString;
        }
 public FeatureToggleDto Get(IFeatureToggle featureToggle)
 {
     return Get(featureToggle.GetType().Name);
 }
예제 #15
0
        private string GetConnectionStringFromConfig(IFeatureToggle toggle)
        {
            var prefixedToggleConfigName           = ToggleConfigurationSettings.Prefix + toggle.GetType().Name;
            var appSettingsConnectionStringKey     = prefixedToggleConfigName + ".ConnectionString";
            var appSettingsConnectionStringNameKey = prefixedToggleConfigName + ".ConnectionStringName";

            var isConfiguredViaAppSettingsConnectionString     = ConfigurationManager.AppSettings.AllKeys.Contains(appSettingsConnectionStringKey);
            var isConfiguredViaAppSettingsConnectionStringName = ConfigurationManager.AppSettings.AllKeys.Contains(appSettingsConnectionStringNameKey);
            var isConfiguredViaConnectionStrings = ConfigurationManager.ConnectionStrings[prefixedToggleConfigName] != null;

            ValidateConnectionStringSpecifiedOnlyOnce(isConfiguredViaAppSettingsConnectionString, isConfiguredViaAppSettingsConnectionStringName, isConfiguredViaConnectionStrings, prefixedToggleConfigName);
            ValidateConnectionStringNotMissing(isConfiguredViaAppSettingsConnectionString, isConfiguredViaAppSettingsConnectionStringName, isConfiguredViaConnectionStrings, appSettingsConnectionStringKey, appSettingsConnectionStringNameKey, prefixedToggleConfigName);


            if (isConfiguredViaAppSettingsConnectionString)
            {
                return(GetAppSettingsConnectionString(appSettingsConnectionStringKey));
            }

            if (isConfiguredViaAppSettingsConnectionStringName)
            {
                return(GetConnectionStringFromAppSettingsValueThatPointsToNamedConnectionString(appSettingsConnectionStringNameKey));
            }

            return(GetConnectionStringDirectlyFromNamedConnectionStrings(prefixedToggleConfigName));
        }
예제 #16
0
 private static string CalculateToggleNameAsItShouldAppearInConfig(IFeatureToggle toggle)
 {
     return(ToggleConfigurationSettings.Prefix + toggle.GetType().Name);
 }