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); } }
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); }
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)); }
private static string CalculateToggleNameAsItShouldAppearInConfig(IFeatureToggle toggle) { return(ToggleConfigurationSettings.Prefix + toggle.GetType().Name); }