modules/grab/add.r

#' @export
add <- function(repo) {
    invisible(lapply(repo, add_helper))
}

add_helper <- function(repo, package) {
    box::use(
        jsonlite[write_json, unbox],
        cli[cli_h1, cli_alert, cli_alert_warning, cli_alert_success],
        rlang[interrupt],
        glue[glue],
        . / util[get_module_list, grab_SHA, scalar],
        . / install[inst = install]
    )

    input <- as.list(unlist(strsplit(repo, "[/@]")))
    details <- list(
        moduleName = scalar(unlist(input[2])),
        author = scalar(unlist(input[1])),
        repo = scalar(glue("https://github.com/{input[1]}/{input[2]}/")),
        SHA = scalar(grab_SHA(repo))
    )
    package <- get_module_list()


    if (!any(details$moduleName %in% package$modules$moduleName && details$author %in% package$modules$author)) {
        if (NROW(package$modules) > 0) {
            package$modules[nrow(package$modules) + 1, ] <- details
        } else {
            package$modules[1] <- list(details)
        }

        write_json(package, "package.json", auto_unbox = TRUE, pretty = TRUE)
        cli_alert_success(
            glue("'{input[2]}' added to package.json")
        )
        inst(repo)

    } else {
        cli_alert_warning(
            "Package.json already contains {details$moduleName}. Run grab$upgrade to check for updates."
        )
    }
}
ElianHugh/boxingtape documentation built on Feb. 13, 2021, 12:48 a.m.