Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----setup--------------------------------------------------------------------
library(stbl)
## -----------------------------------------------------------------------------
register_user <- function(username,
email_address,
age,
is_premium_member,
interests) {
# Imagine this is a slow API call
list(
username = username,
email_address = email_address,
age = age,
is_premium_member = is_premium_member,
interests = interests
)
}
## -----------------------------------------------------------------------------
register_user <- function(username,
email_address,
age,
is_premium_member,
interests) {
interests <- to_chr(interests)
list(
username = username,
email_address = email_address,
age = age,
is_premium_member = is_premium_member,
interests = interests
)
}
# It works with a character vector or a list of characters. We use `str()` to
# make the output easier to see.
register_user(
username = "test_user",
email_address = "test@example.com",
age = 42,
is_premium_member = TRUE,
interests = c("R", "hiking")
) |> str()
register_user(
username = "test_user",
email_address = "test@example.com",
age = 42,
is_premium_member = TRUE,
interests = list("R", "hiking")
) |> str()
## ----error = TRUE-------------------------------------------------------------
try({
# Fails because the list contains a function, which is not character-like.
register_user(
username = "test_user",
email_address = "test@example.com",
age = 42,
is_premium_member = TRUE,
interests = list("R", mean)
)
})
## -----------------------------------------------------------------------------
register_user <- function(username,
email_address,
age,
is_premium_member,
interests) {
interests <- to_chr(interests)
age <- to_int_scalar(age)
is_premium_member <- to_lgl_scalar(is_premium_member)
list(
username = username,
email_address = email_address,
age = age,
is_premium_member = is_premium_member,
interests = interests
)
}
# This works.
register_user(
username = "test_user",
email_address = "test@example.com",
age = "42",
is_premium_member = TRUE,
interests = c("R", "hiking")
) |> str()
## ----error = TRUE-------------------------------------------------------------
try({
# Fails because age is not a single value.
register_user(
username = "test_user",
email_address = "test@example.com",
age = c(30, 31),
is_premium_member = TRUE,
interests = c("R", "hiking")
)
# Fails because "forty-two" cannot be converted to an integer.
register_user(
username = "test_user",
email_address = "test@example.com",
age = "forty-two",
is_premium_member = TRUE,
interests = c("R", "hiking")
)
})
## -----------------------------------------------------------------------------
register_user <- function(username,
email_address,
age,
is_premium_member,
interests) {
interests <- to_chr(interests)
age <- to_int_scalar(age)
is_premium_member <- to_lgl_scalar(is_premium_member)
space_regex <- c("must not contain spaces" = "\\s")
attr(space_regex, "negate") <- TRUE
username <- stabilize_chr_scalar(
username,
regex = space_regex
)
email_regex <- "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
email_address <- stabilize_chr_scalar(
email_address,
regex = c("must be a valid email address" = email_regex)
)
list(
username = username,
email_address = email_address,
age = age,
is_premium_member = is_premium_member,
interests = interests
)
}
# A successful call.
register_user(
username = "test_user",
email_address = "test@example.com",
age = 42,
is_premium_member = TRUE,
interests = c("R", "hiking")
) |> str()
## ----error = TRUE-------------------------------------------------------------
try({
# Fails because the username has a space.
register_user(
username = "test user",
email_address = "test@example.com",
age = 42,
is_premium_member = TRUE,
interests = c("R", "hiking")
)
# Fails because the email address is invalid.
register_user(
username = "test_user",
email_address = "not-a-valid-email",
age = 42,
is_premium_member = TRUE,
interests = c("R", "hiking")
)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.