The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
stabilize_present() is now named
assert_present(), since it doesn’t stabilize (coerce) its
input; it only asserts that the input is not NULL. Calling
stabilize_present() now throws a “deprecated”-classed error
directing you to assert_present() (#299).expect_pkg_error_snapshot(),
expect_pkg_message_snapshot(), and
expect_pkg_warning_snapshot() now produce snapshots that
mirror testthat::expect_snapshot(), showing the bare
expression under Code and the condition class alongside its
message (#301). Error messages for element-wise and incompatible-value
failures also now list the failing locations and, where relevant,
values, and the condition objects carry matching locations
and values elements (#274, #332). Existing snapshots of
these messages must be re-accepted; use
testthat::skip_if_not_installed("stbl", minimum_version = "0.5.0")
to skip such tests with older versions of {stbl}.assert_not() and
assert_contains(): assert_not() errors when
x would be accepted (coerced or validated) by a single
spec, and assert_contains() checks that the
number of elements matching a spec falls within a given
range (#289, #290).ignore_stbl_error() and
replace_stbl_error() catch a {stbl} error of a
given subclass (defaulting to any {stbl}
error). ignore_stbl_error() returns NULL,
allowing callers to suppress expected validation failures;
replace_stbl_error() replaces the error’s message with a
custom one, with an optional additional_class argument to
prepend extra classes to the error class list (#178, #334).stabilize_all_of() requires every stabilizer in
... to succeed, stabilize_any_of() returns the
first successful result, stabilize_one_of() requires
exactly one success, and stabilize_each() applies a single
spec to every element. Matching to_*() and
specify_*() variants are also available (#215, #278, #285,
#286, #287, #288).stabilize_*() and specify_*()
functions gain new constraint arguments:
min_characters/max_characters for character
vectors (#275), allowed_values to restrict input to a fixed
set of permitted values (#282),
exclusive_min_value/exclusive_max_value for
strict numeric bounds (#276), multiple_of to require values
that are a multiple of a given value (#283), and
unique/.unique to reject duplicate elements
(#280). See each function’s documentation for details.date, dttm, time, and
dur function families (to_date(),
stabilize_date(), to_dttm(),
stabilize_dttm(), to_time(),
stabilize_time(), to_dur(),
stabilize_dur(), plus matching specify_*()
factories) validate and coerce RFC 3339 / ISO 8601 temporal
values. stabilize_date() and stabilize_dttm()
also accept unambiguous locale-dependent formats via a new
accepted_datetime_formats argument and the
locale_datetime_formats() helper (#104, #105, #294, #295,
#326).stabilize_df() and stabilize_lst() (and
their specify_*() factories) are more flexible about named
elements: .required marks named specs as optional (#279),
.extra_cols/.named/.unnamed
accept TRUE to allow extra or unnamed elements unchecked
(#281), and .allow_zero_length lets a zero-length input
skip the required-element check (#344).stabilize_lst() (and stabilize_df(), which
delegates to it) now correctly detects missing required named elements
even when .x has no named elements at all, such as
list() or list(1L, 2L). Previously, the
required-element check was silently skipped whenever .x had
no named elements (#344).to_chr(), to_dbl(), to_fct(),
to_int(), and to_lgl() now throw an
informative “incompatible values” error listing the failing locations
and values when a list contains elements that can’t be converted,
instead of a generic “can’t coerce” error (#273, #335).stabilize_*(NULL, allow_null = TRUE) always returns
NULL, without checking other stabilize_*()
rules. For example, stabilize_int(NULL, min_value = 1) now
returns NULL, rather than erroring (#353).to_df() and to_lst() now error if extra
arguments are passed in .... Previously, these extra
arguments were silently discarded (#200).to_chr() now converts named functions to a string
representing their name instead of erroring. Package functions are
returned as "pkg::fn" (e.g., to_chr(mean)
returns "base::mean"). Anonymous functions still produce an
informative error. This behavior extends to
to_chr_scalar(), stabilize_chr(), and
stabilize_chr_scalar() (#251).pkg_inform() and pkg_warn() signal
classed messages and warnings, respectively, with an opinionated class
hierarchy, mirroring pkg_abort(). New
expect_pkg_message_classes() and
expect_pkg_warning_classes() test that the expected classes
are thrown, and expect_pkg_message_snapshot() and
expect_pkg_warning_snapshot() snapshot-test the full output
in one step (#213).to() coerces x to the type of
its .to argument. stbl_to() is also registered
as a C callable in a new public C API (#182).to_fn(), are_fn_ish(), and
is_fn_ish() add the fn type family to stbl.
to_fn() coerces strings and symbols to functions.
is_fn_ish() checks whether a single object can be safely
coerced to a function. are_fn_ish() checks each element of
a character vector for syntactic fn-ishness (bare name or
"pkg::fn" form) (#250).expect_pkg_error_snapshot(),
expect_pkg_message_snapshot(), and
expect_pkg_warning_snapshot() now produce stable snapshots
when run under devtools::test_coverage_active_file().
specify_*() functions now also produce stable function-body
snapshots under coverage (#253).expect_pkg_message_classes() and
expect_pkg_warning_classes() now support assignments inside
object (e.g. result <- fn_that_warns()).
expect_pkg_message_snapshot() and
expect_pkg_warning_snapshot() inherit the same fix
(#234).are_*_ish(), to_*(),
stabilize_dbl(), and stabilize_int() are all
significantly faster for large vectors, with benchmarks showing roughly
3–20× throughput improvements (#217, #218, #219, #220, #221, #226,
#239).are_*_ish(), to_*(), and range-check
functions are now registered as C callables, as are the
*_to_chr and *_to_fct families
(stbl_chr_to_fct(), stbl_dbl_to_chr(),
stbl_dbl_are_chrish(), stbl_fct_to_chr(),
stbl_fct_are_chrish(), stbl_int_to_chr(),
stbl_int_are_chrish(), stbl_int_to_fct(),
stbl_lgl_to_chr(), and stbl_lgl_are_chrish())
(#235, #237, #241).is_fct_ish() now accepts a max_levels
argument to limit the number of unique non-NA levels
(#231).to_chr_scalar(), to_dbl_scalar(),
to_fct_scalar(), to_int_scalar(),
to_lgl_scalar(), stabilize_chr_scalar(),
stabilize_dbl_scalar(),
stabilize_fct_scalar(),
stabilize_int_scalar(),
stabilize_lgl_scalar(), specify_chr_scalar(),
specify_dbl_scalar(), specify_fct_scalar(),
specify_int_scalar(), and specify_lgl_scalar()
(and their synonyms) now default to allow_null = FALSE and
allow_zero_length = FALSE. Pass
allow_null = TRUE or allow_zero_length = TRUE
to restore the previous behavior (#189, #197).to_character() is a synonym for
to_chr(), specify_logical() for
specify_lgl(), and stabilise_*() for all
stabilize_*() functions (#164, #167).expect_pkg_error_classes() checks that an error
with the expected set of classes is thrown by pkg_abort(),
and expect_pkg_error_snapshot() snapshot-tests the full
error output in one step by combining expect_snapshot()
with expect_pkg_error_classes() (#136, #188). New
pkg_abort() throws errors with a standardized, opinionated
collection of classes (#136).specify_*() creates a
"stbl_specified_fn", a call to the corresponding
stabilize_*() function with arguments pre-filled. For
example,
stabilize_email <- specify_chr(regex = "^[^@]+@[^@]+\\.[^@]+$")
creates a stabilize_email() function that validates email
addresses (#147, #148, #149, #150, #151, #153, #161).stabilize_df() and specify_df()
validate data frame structure and contents (#142).stabilize_lst() and specify_lst()
validate list structure and contents and create pre-configured
validators for nested validation (#110, #204).stabilize_present() validates that a value is
non-NULL without imposing any type constraints (#110).to_df() (and synonym to_data_frame())
coerces compatible objects to a data frame, including named lists and
named atomic vectors (e.g., to_df(letters)), with
informative errors for incompatible inputs such as jagged lists (#142,
#201, #203).to_lst() (and synonym to_list())
coerces an object to a list, with conditional checks for
NULL and functions (#157, #166).is_*_ish() family
(is_chr_ish(), is_dbl_ish(),
is_fct_ish(), is_int_ish(), and
is_lgl_ish()) checks the entire object at once. The
are_*_ish() family (are_chr_ish(),
are_dbl_ish(), are_fct_ish(),
are_int_ish(), and are_lgl_ish()) checks each
element of a vector individually (#23, #93).to_dbl(), to_dbl_scalar(),
stabilize_dbl(), and stabilize_dbl_scalar()
(#23).stabilize_chr() now accepts patterns from
stringr::regex(), stringr::fixed(), and
stringr::coll() (#87), and can generate more informative
error messages for regex failures via the new
regex_must_match() and regex_must_not_match()
helper functions (#52, #85, #86, #89).to_*() functions now consistently flatten list-like
inputs when no information would be lost in the process (#128).to_fct() now lists the allowed values in its error
message when a value is not in the expected set, making it easier to
debug (#67).to_lgl() now coerces character representations of
numbers (e.g., “0” and “1”) to FALSE and TRUE
respectively (#30).vignette("stbl") provides an overview of the
package and its functions (#42).These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.