Title: | Turn Features On and Off using Feature Flags |
---|---|
Description: | Feature flags allow developers to turn features of their software on and off in form of configuration. This package provides functions for creating feature flags in code. It exposes an interface for defining own feature flags which are enabled based on custom criteria. |
Authors: | Ryszard Szymański [aut, cre] |
Maintainer: | Ryszard Szymański <[email protected]> |
License: | MIT + file LICENSE |
Version: | 0.2.0 |
Built: | 2025-03-22 22:17:23 UTC |
Source: | https://github.com/szymanskir/featureflag |
Creates an instance of a bool feature flag with the specified bool value.
create_bool_feature_flag(value)
create_bool_feature_flag(value)
value |
single logical determining whether the flag should be enabled |
feature flag object of the bool value
{ enabled_flag <- create_bool_feature_flag(TRUE) disabled_flag <- create_bool_feature_flag(FALSE) }
{ enabled_flag <- create_bool_feature_flag(TRUE) disabled_flag <- create_bool_feature_flag(FALSE) }
Creates an instance of a connect feature flag that is enabled for specific groups
create_connect_group_feature_flag(groups)
create_connect_group_feature_flag(groups)
groups |
groups for which the feature flag should be enabled |
feature flag that is enabled for specific groups
{ connect_group_flag <- create_connect_group_feature_flag(groups = c("group1", "group2")) }
{ connect_group_flag <- create_connect_group_feature_flag(groups = c("group1", "group2")) }
Creates an instance of a connect feature flag that is enabled for specific users
create_connect_user_feature_flag(users)
create_connect_user_feature_flag(users)
users |
users for which the feature flag should be enabled |
feature flag that is enabled for specific users
{ connect_user_flag <- create_connect_user_feature_flag(users = c("user1", "user2")) }
{ connect_user_flag <- create_connect_user_feature_flag(users = c("user1", "user2")) }
Creates an instance of a feature flag that is enabled based on an environment variable
create_env_var_feature_flag(env_var)
create_env_var_feature_flag(env_var)
env_var |
Name of the environment variable |
Feature flag that is enabled based on the specified environment variable
{ env_flag <- create_env_var_feature_flag(env_var = "FEATURE_X") }
{ env_flag <- create_env_var_feature_flag(env_var = "FEATURE_X") }
It should not be used directly, but only as a prerequisite when creating concrete feature flag.
create_feature_flag()
create_feature_flag()
instance of a base feature flag.
Creates an instance of a percentage feature flag with a specified chance of being enabled
create_percentage_feature_flag(percentage)
create_percentage_feature_flag(percentage)
percentage |
chance of being enabled e.g. 1 for always being enabled |
feature flag object of the percentage type
{ always_enabled_flag <- create_percentage_feature_flag(percentage = 1) randomly_enabled_flag <- create_percentage_feature_flag(percentage = 0.5) }
{ always_enabled_flag <- create_percentage_feature_flag(percentage = 1) randomly_enabled_flag <- create_percentage_feature_flag(percentage = 0.5) }
Creates an instance of a time period feature flag.
create_time_period_feature_flag(from = NULL, to = NULL)
create_time_period_feature_flag(from = NULL, to = NULL)
from |
date-time from which the feature flag should be enabled set as null if you want a one sided boundary. |
to |
date-time to which the feature flag should be enabled set as null if you want a one sided boundary |
Boundaries are set as inclusive
{ two_sided_flag <- create_time_period_feature_flag( from = ISOdatetime(2020, 10, 10, 0, 0, 0, tz = "UTC"), to = ISOdatetime(2020, 11, 10, 0, 0, 0, tz = "UTC") ) left_sided_flag <- create_time_period_feature_flag( from = ISOdatetime(2020, 10, 10, 0, 0, 0, tz = "UTC") ) right_sided_flag <- create_time_period_feature_flag( to = ISOdatetime(2020, 10, 10, 0, 0, 0, tz = "UTC") ) }
{ two_sided_flag <- create_time_period_feature_flag( from = ISOdatetime(2020, 10, 10, 0, 0, 0, tz = "UTC"), to = ISOdatetime(2020, 11, 10, 0, 0, 0, tz = "UTC") ) left_sided_flag <- create_time_period_feature_flag( from = ISOdatetime(2020, 10, 10, 0, 0, 0, tz = "UTC") ) right_sided_flag <- create_time_period_feature_flag( to = ISOdatetime(2020, 10, 10, 0, 0, 0, tz = "UTC") ) }
Evaluates the provided expression if the feature flag is enabled.
feature_if(feature_flag, expr)
feature_if(feature_flag, expr)
feature_flag |
flag which defines whether the provided expression should be evaluated |
expr |
expression to evaluate when the feature_flag is enabled |
The passed expression is evaluated in the frame where feature_if
is called.
If the passed feature_flag
is enabled, than the result of the evaluation
of the passed expression is returned. Otherwise there is no return value.
{ flag <- create_bool_feature_flag(TRUE) feature_if(flag, { 2 + 7 }) }
{ flag <- create_bool_feature_flag(TRUE) feature_if(flag, { 2 + 7 }) }
Evaluates one or the other expression based on whether the feature flag is enabled.
feature_ifelse(feature_flag, true_expr, false_expr)
feature_ifelse(feature_flag, true_expr, false_expr)
feature_flag |
flag which defines which expression should be evaluated |
true_expr |
expression to evaluate when the feature_flag is enabled |
false_expr |
expression to evaluate when the feature_flag is disabled |
The passed expression is evaluated in the frame where feature_ifelse
is called.
The result of evaluating true_expr
is returned if the passed feature_flag
is enabled. Otherwise the result of evaluating false_expr
is returned.
{ flag <- create_bool_feature_flag(TRUE) feature_ifelse( flag, 2 * 7, 3 * 7 ) }
{ flag <- create_bool_feature_flag(TRUE) feature_ifelse( flag, 2 * 7, 3 * 7 ) }
Checks if the given feature flag is enabled.
is_enabled(feature_flag)
is_enabled(feature_flag)
feature_flag |
feature flag to be tested whether it is enabled |
TRUE if the feature flag is enabled.
Checks if the given bool feature flag is enabled
## S3 method for class 'bool_feature_flag' is_enabled(feature_flag)
## S3 method for class 'bool_feature_flag' is_enabled(feature_flag)
feature_flag |
flag to be checked whether it is enabled |
TRUE if the feature flag is enabled.
{ enabled_flag <- create_bool_feature_flag(TRUE) if (is_enabled(enabled_flag)) { print("The flag is enabled!") } }
{ enabled_flag <- create_bool_feature_flag(TRUE) if (is_enabled(enabled_flag)) { print("The flag is enabled!") } }
Checks if the given connect group feature flag is enabled
## S3 method for class 'connect_group_feature_flag' is_enabled(feature_flag)
## S3 method for class 'connect_group_feature_flag' is_enabled(feature_flag)
feature_flag |
flag to be checked whether it is enabled |
The session$groups field is used for retrieving the information on the logged-in user groups
TRUE if the logged in user belongs to a group defined in the feature flag
{ flag <- create_connect_group_feature_flag(c("group1")) # Returns TRUE when the logged-in user belongs to at least one of the specified groups mock_session <- shiny::MockShinySession$new() mock_session$groups <- "group1" shiny::withReactiveDomain( domain = mock_session, expr = is_enabled(flag) ) # Returns FALSE if session$groups does not have any of the specified groups mock_session <- shiny::MockShinySession$new() mock_session$user <- "group2" shiny::withReactiveDomain( domain = mock_session, expr = is_enabled(flag) ) }
{ flag <- create_connect_group_feature_flag(c("group1")) # Returns TRUE when the logged-in user belongs to at least one of the specified groups mock_session <- shiny::MockShinySession$new() mock_session$groups <- "group1" shiny::withReactiveDomain( domain = mock_session, expr = is_enabled(flag) ) # Returns FALSE if session$groups does not have any of the specified groups mock_session <- shiny::MockShinySession$new() mock_session$user <- "group2" shiny::withReactiveDomain( domain = mock_session, expr = is_enabled(flag) ) }
Checks if the given connect user feature flag is enabled
## S3 method for class 'connect_user_feature_flag' is_enabled(feature_flag)
## S3 method for class 'connect_user_feature_flag' is_enabled(feature_flag)
feature_flag |
flag to be checked whether it is enabled |
The session$user field is used for retrieving the information on the logged-in user
TRUE if the feature flag is enabled.
{ flag <- create_connect_user_feature_flag(c("user1")) # Returns TRUE if the session$user matches the specified users mock_session <- shiny::MockShinySession$new() mock_session$user <- "user1" shiny::withReactiveDomain( domain = mock_session, expr = is_enabled(flag) ) # Returns FALSE if the session$user does not match the specified users mock_session <- shiny::MockShinySession$new() mock_session$user <- "user2" shiny::withReactiveDomain( domain = mock_session, expr = is_enabled(flag) ) }
{ flag <- create_connect_user_feature_flag(c("user1")) # Returns TRUE if the session$user matches the specified users mock_session <- shiny::MockShinySession$new() mock_session$user <- "user1" shiny::withReactiveDomain( domain = mock_session, expr = is_enabled(flag) ) # Returns FALSE if the session$user does not match the specified users mock_session <- shiny::MockShinySession$new() mock_session$user <- "user2" shiny::withReactiveDomain( domain = mock_session, expr = is_enabled(flag) ) }
Checks if the given environment variable feature flag is enabled
## S3 method for class 'env_var_feature_flag' is_enabled(feature_flag)
## S3 method for class 'env_var_feature_flag' is_enabled(feature_flag)
feature_flag |
Flag to be checked whether it is enabled |
TRUE if the environment variable is set to 'true'
{ flag <- create_env_var_feature_flag("FEATURE_X") withr::with_envvar(new = list(FEATURE_X = "true"), { is_enabled(flag) # Returns TRUE }) is_enabled(flag) # Returns FALSE by default }
{ flag <- create_env_var_feature_flag("FEATURE_X") withr::with_envvar(new = list(FEATURE_X = "true"), { is_enabled(flag) # Returns TRUE }) is_enabled(flag) # Returns FALSE by default }
Checks if the given percentage flag is enabled
## S3 method for class 'percentage_feature_flag' is_enabled(feature_flag)
## S3 method for class 'percentage_feature_flag' is_enabled(feature_flag)
feature_flag |
flag to be checked whether it is enabled |
TRUE if the feature flag is enabled.
{ enabled_flag <- create_percentage_feature_flag(1) if (is_enabled(enabled_flag)) { print("The flag is enabled!") } }
{ enabled_flag <- create_percentage_feature_flag(1) if (is_enabled(enabled_flag)) { print("The flag is enabled!") } }
Checks if the given bool feature flag is enabled
## S3 method for class 'time_period_feature_flag' is_enabled(feature_flag)
## S3 method for class 'time_period_feature_flag' is_enabled(feature_flag)
feature_flag |
flag to be checked whether it is enabled |
TRUE if the feature flag is enabled.
{ feature_flag <- create_time_period_feature_flag( from = ISOdatetime(2020, 10, 10, 0, 0, 0, tz = "UTC") ) if (is_enabled(feature_flag)) { print("The flag is enabled!") } }
{ feature_flag <- create_time_period_feature_flag( from = ISOdatetime(2020, 10, 10, 0, 0, 0, tz = "UTC") ) if (is_enabled(feature_flag)) { print("The flag is enabled!") } }