## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  eval = FALSE,
  collapse = TRUE,
  comment = "#>"
)

## ----defining_options---------------------------------------------------------
# options::define_options(
#   "This is an example of how a package author would document their internally
#   used options. This option could make the package default to executing
#   quietly.",
#   quiet = TRUE,
# 
#   "Multiple options can be defined, providing default values if a global option
#   or environment variable isn't set.",
#   second_example = FALSE,
# 
#   "Default values are lazily evaluated, so you are free to use package functions
#   without worrying about build-time evaluation order",
#   lazy_example = fn_not_defined_until_later()
# )

## ----defining_an_option-------------------------------------------------------
# options::define_option(
#   option = "concrete_example",
#   default = TRUE,
#   desc = paste0(
#     "Or, if you prefer a more concrete constructor you can define each option ",
#     "explicitly."
#   ),
#   option_name = "mypackage_concrete", # define custom option names
#   envvar_name = "MYPACKAGE_CONCRETE", # and custom environment variable names
#   envvar_fn = envvar_is_true()        # and use helpers to handle envvar parsing
# )

## ----as_roxygen_docs----------------------------------------------------------
# #' @eval options::as_roxygen_docs()
# NULL

## ----as_params----------------------------------------------------------------
# #' @eval options::as_params()
# #' @name options_params
# #'
# NULL
# 
# #' Count to Three
# #'
# #' @inheritParams option_params
# #'
# count_to_three <- function(quiet = opt("quiet")) {
#   for (i in 1:3) if (!quiet) cat(i, "\n")
# }

## ----as_params_renamed--------------------------------------------------------
# #' Hello World!
# #'
# #' @eval options::as_params("silent" = "quiet")
# #'
# hello <- function(who, silent = opt("quiet")) {
#   cat(paste0("Hello, ", who, "!"), "\n")
# }

## ----set_name_fn--------------------------------------------------------------
# options::set_option_name_fn(function(package, name) {
#   tolower(paste0(package, ".", name))
# })
# 
# options::set_envvar_name_fn(function(package, name) {
#   gsub("[^A-Z0-9]", "_", toupper(paste0(package, "_", name)))
# })