Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 2 additions & 28 deletions NAMESPACE
Original file line number Diff line number Diff line change
@@ -1,43 +1,17 @@
# Generated by roxygen2: do not edit by hand

export(generate_pkg)
export(read_api_definition)
export(read_config)
export(use_beekeeper)
if (getRversion() < "4.3.0") importFrom("S7", "@")
importFrom(S7,class_any)
importFrom(S7,class_data.frame)
importFrom(S7,class_list)
importFrom(cli,cli_abort)
importFrom(cli,cli_warn)
importFrom(fs,file_delete)
importFrom(fs,file_exists)
importFrom(fs,path)
importFrom(fs,path_dir)
importFrom(fs,path_rel)
importFrom(glue,glue)
importFrom(glue,glue_collapse)
importFrom(httptest2,use_httptest2)
importFrom(nectar,req_prepare)
importFrom(purrr,discard)
importFrom(purrr,imap)
importFrom(purrr,map)
importFrom(purrr,map2)
importFrom(purrr,map_chr)
importFrom(purrr,pmap)
importFrom(rapid,as_rapid)
importFrom(rapid,class_api_key_security_scheme)
importFrom(rapid,class_paths)
importFrom(rapid,class_security_scheme_details)
importFrom(rapid,class_security_schemes)
importFrom(rlang,.data)
importFrom(rlang,check_dots_empty)
importFrom(rlang,set_names)
importFrom(rlang,try_fetch)
importFrom(testthat,test_that)
importFrom(usethis,proj_get)
importFrom(usethis,proj_path)
importFrom(usethis,use_build_ignore)
importFrom(usethis,use_directory)
importFrom(usethis,use_package)
importFrom(usethis,use_template)
importFrom(usethis,use_testthat)
importFrom(utils,capture.output)
12 changes: 12 additions & 0 deletions R/aaa-shared_params.R
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,19 @@
#' These parameters are used in multiple functions. They are defined here to
#' make them easier to import and to find.
#'
#' @param api_abbr (`character(1)`) A short (about 2-5 letter) abbreviation for
#' the API, for use in function names and environment variables.
#' @param api_definition (`rapid::class_rapid`) The API definition to generate
#' package code from.
#' @param api_title (`character(1)`) The API title used in generated package
#' files.
#' @param call (`environment`) The caller environment for error messages.
#' @param config_file (`character(1)` or `fs_path`) The path to a beekeeper yaml
#' config file.
#' @param pkg_dir (`character(1)` or `fs_path`) The directory containing package
#' files.
#' @param rapid_file (`character(1)` or `fs_path`) The path to the R API
#' definition (rapid) file.
#'
#' @name .shared-params
#' @keywords internal
Expand Down
9 changes: 2 additions & 7 deletions R/as_bk_data.R
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,9 @@
#'
#' @return A list.
#' @keywords internal
as_bk_data <- S7::new_generic(
"as_bk_data",
dispatch_args = "x"
)
as_bk_data <- S7::new_generic("as_bk_data", dispatch_args = "x")

S7::method(as_bk_data, class_any) <- function(x) {
cli_warn(
"No method for as_bk_data() for class {.cls {class(x)}}."
)
cli::cli_warn("No method for as_bk_data() for class {.cls {class(x)}}.")
return(list())
}
36 changes: 5 additions & 31 deletions R/beekeeper-package.R
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,18 @@
"_PACKAGE"

## usethis namespace: start
# Needed for installation: nectar (likely others, TBD)
#' @importFrom cli cli_abort
#' @importFrom cli cli_warn
#' @importFrom fs file_delete
#' @importFrom fs file_exists
#' @importFrom fs path
#' @importFrom fs path_dir
#' @importFrom fs path_rel
#' @importFrom glue glue
#' @importFrom glue glue_collapse
#' @importFrom httptest2 use_httptest2
## Force installation
#' @importFrom nectar req_prepare
#' @importFrom purrr discard
#' @importFrom purrr imap
#' @importFrom purrr map
#' @importFrom purrr map_chr
#' @importFrom purrr map2
#' @importFrom purrr pmap
#' @importFrom rapid as_rapid
#' @importFrom testthat test_that
## S7 classes
#' @importFrom rapid class_api_key_security_scheme
#' @importFrom rapid class_paths
#' @importFrom rapid class_security_scheme_details
#' @importFrom rapid class_security_schemes
#' @importFrom rlang .data
#' @importFrom rlang check_dots_empty
#' @importFrom rlang set_names
#' @importFrom rlang try_fetch
#' @importFrom S7 class_any
#' @importFrom S7 class_data.frame
#' @importFrom S7 class_list
#' @importFrom testthat test_that
#' @importFrom usethis proj_get
#' @importFrom usethis proj_path
#' @importFrom usethis use_build_ignore
#' @importFrom usethis use_directory
#' @importFrom usethis use_package
#' @importFrom usethis use_template
#' @importFrom usethis use_testthat
#' @importFrom utils capture.output
## Use as pronoun
#' @importFrom rlang .data
## usethis namespace: end
NULL
31 changes: 17 additions & 14 deletions R/generate_pkg-paths.R
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,17 @@ S7::method(as_bk_data, class_paths) <- function(x) {
}

.paths_fill_operation_id <- function(operation_id, endpoint, method) {
.coalesce(.to_snake(operation_id), glue("{method}_{.to_snake(endpoint)}"))
.coalesce(
.to_snake(operation_id),
glue::glue("{method}_{.to_snake(endpoint)}")
)
}

.paths_fill_summary <- function(summary, endpoint, method) {
endpoint_spaced <- stringr::str_replace_all(.to_snake(endpoint), "_", " ")
.coalesce(
stringr::str_squish(summary),
stringr::str_to_sentence(glue("{method} {endpoint_spaced}"))
stringr::str_to_sentence(glue::glue("{method} {endpoint_spaced}"))
)
}

Expand Down Expand Up @@ -209,15 +212,15 @@ S7::method(as_bk_data, class_paths) <- function(x) {

.path_as_arg <- function(path, params_df) {
if (!nrow(params_df) || !any(params_df$`in` == "path")) {
return(glue('"{path}"'))
return(glue::glue('"{path}"'))
}
params_path <- params_df$name[params_df$`in` == "path"]
params <- .collapse_comma_self_equal(params_path)
return(glue('c("{path}", {params})'))
return(glue::glue('c("{path}", {params})'))
}

.collapse_comma_self_equal <- function(x) {
.collapse_comma(glue("{x} = {x}"))
.collapse_comma(glue::glue("{x} = {x}"))
}

# generate files ---------------------------------------------------------------
Expand All @@ -231,7 +234,7 @@ S7::method(as_bk_data, class_paths) <- function(x) {
security_arg_names <- security_data$security_arg_names %|0|% character()

# Prep each operation: remove security args, compile args strings
prepped <- imap(paths_by_operation, function(op, op_id) {
prepped <- purrr::imap(paths_by_operation, function(op, op_id) {
params <- .remove_security_args(op$params, security_arg_names)
params_query <- .prep_param_args(op$params_query_raw, security_arg_names)
params_header <- .prep_param_args(op$params_header_raw, security_arg_names)
Expand All @@ -255,13 +258,13 @@ S7::method(as_bk_data, class_paths) <- function(x) {
})

# One R file per operation
r_files <- unname(unlist(imap(prepped, function(op, op_id) {
r_files <- unname(unlist(purrr::imap(prepped, function(op, op_id) {
.generate_paths_file(op, op_id, api_abbr, security_data)
})))

# One test file per tag (operations grouped by tag, preserving encounter
# order)
tags <- map_chr(prepped, "tag")
tags <- purrr::map_chr(prepped, "tag")
unique_tags <- unique(tags)
test_files <- unname(unlist(lapply(unique_tags, function(tag_name) {
tag_ops <- prepped[tags == tag_name]
Expand All @@ -272,15 +275,15 @@ S7::method(as_bk_data, class_paths) <- function(x) {
}

.params_to_args <- function(params) {
.collapse_comma(map_chr(params, "name")) %|"|% character()
.collapse_comma(purrr::map_chr(params, "name")) %|"|% character()
}

.params_to_named_args <- function(params) {
.collapse_comma_self_equal(map_chr(params, "name")) %|"|% character()
.collapse_comma_self_equal(purrr::map_chr(params, "name")) %|"|% character()
}

.remove_security_args <- function(params, security_args) {
discard(
purrr::discard(
params,
function(param) {
param$name %in% security_args
Expand Down Expand Up @@ -339,12 +342,12 @@ S7::method(as_bk_data, class_paths) <- function(x) {
pagination_fn = ""
)
),
target = glue("paths-{path_operation$tag}-{operation_id}.R")
target = glue::glue("paths-{path_operation$tag}-{operation_id}.R")
)
}

.generate_paths_test_file <- function(tag_operations, tag_name, api_abbr) {
paths_list <- unname(imap(tag_operations, function(op, op_id) {
paths_list <- unname(purrr::imap(tag_operations, function(op, op_id) {
list(
operation_id = op_id,
test_args = op$test_args %|0|% ""
Expand All @@ -358,6 +361,6 @@ S7::method(as_bk_data, class_paths) <- function(x) {
api_abbr = api_abbr
),
dir = "tests/testthat",
target = glue("test-paths-{tag_name}.R")
target = glue::glue("test-paths-{tag_name}.R")
)
}
28 changes: 13 additions & 15 deletions R/generate_pkg-security.R
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
}

.generate_security_signature <- function(security_arg_names, api_abbr) {
env_vars <- toupper(glue("{api_abbr}_{security_arg_names}"))
env_vars <- toupper(glue::glue("{api_abbr}_{security_arg_names}"))
return(
.collapse_comma_newline(glue(
.collapse_comma_newline(glue::glue(
"{security_arg_names} = Sys.getenv(\"{env_vars}\")"
))
)
Expand All @@ -31,7 +31,7 @@ S7::method(as_bk_data, class_security_schemes) <- function(x) {
}

.security_schemes_collect <- function(x) {
pmap(
purrr::pmap(
list(
x@name,
x@details,
Expand Down Expand Up @@ -87,30 +87,28 @@ S7::method(as_bk_data, class_security_schemes) <- function(x) {
}

.security_args_compile <- function(security_schemes) {
security_args <- sort(unique(map_chr(security_schemes, "arg_name")))
security_args <- sort(unique(purrr::map_chr(security_schemes, "arg_name")))
return(list(
security_arg_names = security_args,
security_arg_list = .collapse_comma(
glue("{security_args} = {security_args}")
),
security_arg_list = .collapse_comma(glue::glue(
"{security_args} = {security_args}"
)),
security_arg_helps = .generate_security_arg_help(
security_schemes,
security_args
),
security_arg_nulls = .collapse_comma(
glue("{security_args} = NULL")
)
security_arg_nulls = .collapse_comma(glue::glue("{security_args} = NULL"))
))
}

.generate_security_arg_help <- function(security_schemes, security_args) {
security_arg_description <- set_names(
map_chr(security_schemes, "description"),
map_chr(security_schemes, "arg_name")
security_arg_description <- rlang::set_names(
purrr::map_chr(security_schemes, "description"),
purrr::map_chr(security_schemes, "arg_name")
)
security_arg_description <- unname(security_arg_description[security_args])
return(
map2(
purrr::map2(
security_arg_description,
security_args,
.security_arg_description_clean
Expand All @@ -123,7 +121,7 @@ S7::method(as_bk_data, class_security_schemes) <- function(x) {
}

S7::method(as_bk_data, class_security_scheme_details) <- function(x) {
map(x, as_bk_data)
purrr::map(x, as_bk_data)
}

S7::method(as_bk_data, class_api_key_security_scheme) <- function(x) {
Expand Down
Loading
Loading