Skip to contents

artsend 0.2.0

Breaking changes

Improvements

  • All functions now use {stringr} for pattern matching instead of base R grepl() for consistency with tidyverse style.

  • Internal template functions are now properly prefixed with . and co-located with their calling functions for better code organization.

  • Standardized {httr2} response handling with consistent variable naming (resp for raw response, parsed for parsed body, cfg for configuration).

  • Consolidated email templates from separate files into their respective sending function files, reducing file count and improving maintainability.

  • Renamed utils. R to internal-utils.R following internal file naming conventions.

  • Added {stringr} to Imports for stringr::str_detect() usage.

  • Removed unused {jsonlite} from Imports.

Internal

  • Deleted obsolete email-template.R and metrics-email-templates.R files.

  • Internal validation function validate_email_params() is now .validate_email_params().

  • All internal template builder functions now use .build_* naming pattern.

artsend 0.2.1

Improvements

  • Tests now follow coding standards: stringr::str_detect() instead of grepl(), cfg instead of config, standardized path_mocks() helper.

  • Test suite refactored to test internal functions through public API rather than directly, improving maintainability.

  • Mock fixture directories shortened for portable file names (<100 bytes).

  • Added VignetteBuilder: quarto and {quarto} to Suggests for vignette support.

  • Fixed pkgdown site URL to https://docs.artalytics.dev/r/artsend/.

  • Updated .Rbuildignore for full R CMD check compliance (0 errors, 0 warnings, 0 notes).

artsend 0.2.2

Improvements

  • Added rate limiting to all email sending functions using httr2::req_throttle(rate = 2) to respect Resend API’s 2 requests/second limit.

  • Added automatic retry logic with httr2::req_retry(max_tries = 3) for handling transient 429 (rate limit) and 503 (service unavailable) errors with exponential backoff.

  • Replaced glue::glue() with stringr::str_glue() throughout codebase for consistency (stringr re-exports str_glue from glue).

  • Replaced gsub() with stringr::str_replace_all() in email template processing.

  • Replaced sprintf() with stringr::str_glue() for string interpolation.

  • Removed {glue} from Imports (no longer needed as stringr provides str_glue).

Internal

  • Added comprehensive rate limiting tests verifying all 8 send functions have proper throttle and retry configuration.