tests/testthat/helper.R

standard_app <- function(silent = TRUE) {
  app <- Fire$new(port = 49925)
  logger <- logger_console("{event}: {message}")
  if (!silent) {
      app$set_logger(logger)
  } else {
      app$set_logger(function(event, message, request, ...) if (event %in% c("message", "error", "warning")) logger(event, message,request, ...))
  }
  app$access_log_format <- '{request$ip} - {id} [29/Jan/2025:08:17:44 +0100] "{toupper(request$method)} {request$path}{request$querystring} {toupper(request$protocol)}/1.1" {response$status} {response$content_length()}'
  app
}

r_session <- function(silent = TRUE) {
  rs <- callr::r_session$new()
  caller <- function(expr, invisible = TRUE) {
    expr <- enexpr(expr)
    val <- rs$run_with_output(
      function(x) rlang::eval_bare(expr = x, globalenv()),
      args = list(expr)
    )
    if (val$stdout != "") {
      cat(val$stdout)
    }
    if (val$stderr != "") {
      rlang::inform(trimws(val$stderr))
    }
    if (!is.null(val$error)) cnd_signal(val$error)
    if (invisible) {
      invisible(val$result)
    } else {
      val$result
    }
  }

  caller(library(fiery))
  caller(library(rlang))
  caller(options(rlang_backtrace_on_error = "none"))
  caller({
    standard_app <- function() {
      app <- Fire$new(port = 49925)
      logger <- logger_console("{event}: {message}")
      if (!!silent) {
        app$set_logger(function(event, message, request, ...) if (event %in% c("message", "error", "warning")) logger(event, message,request, ...))
      } else {
        app$set_logger(logger)
      }
      app$access_log_format <- '{request$ip} - {id} [29/Jan/2025:08:17:44 +0100] "{toupper(request$method)} {request$path}{request$querystring} {toupper(request$protocol)}/1.1" {response$status} {response$content_length()}'
      app
    }
  })
  caller(app <- standard_app())

  structure(caller, session = rs)
}

Try the fiery package in your browser

Any scripts or data that you put into this service are public.

fiery documentation built on Aug. 21, 2025, 5:44 p.m.