NEWS
stbl 0.3.0.9002
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() are now available as registered C callables, completing the *_to_chr and *_to_fct families in the C API (#241).
- New
pkg_inform() signals classed messages with an opinionated class hierarchy, mirroring pkg_abort(). New expect_pkg_message_classes() tests that a message with the expected set of classes is thrown, and expect_pkg_message_snapshot() snapshot-tests the full message output in one step (#213).
- New
pkg_warn() signals classed warnings with an opinionated class hierarchy, mirroring pkg_abort(). New expect_pkg_warning_classes() tests that a warning with the expected set of classes is thrown, and expect_pkg_warning_snapshot() snapshot-tests the full warning output in one step (#213).
- The C functions underlying
are_*_ish(), to_*(), and range checks are now registered as C callables, making them available to other packages. Include inst/include/stbl.h and inst/include/stbl.c in a dependent package and call stbl_init_api() at load time to use them. stbl_*_to_* C callables return a named list list(result = <type>, valid = <lgl>), with the coerced value in result (with NA for invalid conversions) and a logical vector indicating whether the conversion was successful in valid (#235, #237).
- Many
are_*_ish() and to_*() methods are now implemented in C. Benchmarks show a significant speedup (about 3-20x) for large vectors (#217, #218, #219, #221, #226, #239).
is_fct_ish() now accepts a max_levels argument to limit the number of unique non-NA levels (#231).
stabilize_dbl() and stabilize_int() now use a C implementation for min/max range checks, improving throughput for large vectors (#220).
stbl 0.3.0 (2026-04-04)
Breaking changes
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).
Potential breaking changes
- Several conditions that formerly included a subclass of "stbl-error-must" no longer include that subclass. This only occurs when "stbl-error-must" was not the most specific subclass (i.e., when a more specific subclass was already included), and therefore should not impact most if any code (#136).
New features
- New long-form and British-spelling synonym functions for all class functions. For example,
to_character() is a synonym for to_chr(), specify_logical() for specify_lgl(), and stabilise_*() for all stabilize_*() functions (#164, #167).
- New
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).
- New specification functions:
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).
- New
stabilize_df() and specify_df() validate data frame structure and contents (#142).
- New
stabilize_lst() and specify_lst() validate list structure and contents and create pre-configured validators for nested validation (#110, #204).
- New
stabilize_present() validates that a value is non-NULL without imposing any type constraints (#110).
- New
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).
- New
to_lst() (and synonym to_list()) coerces an object to a list, with conditional checks for NULL and functions (#157, #166).
Other changes
- Revised the "Getting started with stbl" vignette to clarify what happens at each step (#139, #143, #144).
- Clarified error messages (#176, #177).
stbl 0.2.0 (2025-09-16)
New features
- New predicate functions check if an object can be safely coerced to a specific type. The
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).
- New functions for working with doubles are available:
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).
Minor improvements and fixes
- Error messages are now clearer and more standardized throughout the package (#95).
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).
Documentation
- The purpose of and vision for this package are now more clearly described in documentation (#56, #77).
- New
vignette("stbl") provides an overview of the package and its functions (#42).
stbl 0.1.1 (2024-05-23)
- Update formatting in DESCRIPTION and examples.
stbl 0.1.0