This repository has been archived by the owner on Mar 27, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #5 from jimhester/argufy_package
Add an argufy_package function
- Loading branch information
Showing
7 changed files
with
146 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
# Generated by roxygen2 (4.1.1): do not edit by hand | ||
|
||
export(argufy) | ||
export(argufy_package) | ||
export(as_enum) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
#' argufy all of the functions within a package | ||
#' | ||
#' This function is best placed either in the last file sourced (\code{zzz.R} | ||
#' or the last file listed in the collate directive) or in \code{.onLoad()}. | ||
#' @inheritParams argufy | ||
#' @param env the package environment to argufy | ||
#' @export | ||
argufy_package <- function(env = parent.frame(), ...) { | ||
if (is.character(env)) { | ||
env <- asNamespace(env) | ||
} | ||
|
||
argufy_environment(env, ...) | ||
|
||
argufy_S4(env, ...) | ||
|
||
invisible() | ||
} | ||
|
||
argufy_environment <- function(ns, ...) { | ||
nms <- ls(ns, all.names = TRUE) | ||
|
||
funs <- mget(nms, ns, mode = "function", ifnotfound = NA) | ||
|
||
funs <- funs[!is.na(funs)] | ||
|
||
Map (function(nme, fun) { | ||
fun <- argufy(fun, ...) | ||
assign(nme, fun, envir = ns) | ||
}, names(funs), funs) | ||
|
||
invisible() | ||
} | ||
|
||
argufy_S4 <- function(ns, ...) { | ||
generics <- getGenerics(ns) | ||
|
||
Map(generics@.Data, generics@package, USE.NAMES = FALSE, | ||
f = function(name, package) { | ||
what <- methodsPackageMetaName("T", paste(name, package, sep = ":")) | ||
|
||
table <- get(what, envir = ns) | ||
|
||
argufy_environment(table, ...) | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
% Generated by roxygen2 (4.1.1): do not edit by hand | ||
% Please edit documentation in R/argufy_package.R | ||
\name{argufy_package} | ||
\alias{argufy_package} | ||
\title{argufy all of the functions within a package} | ||
\usage{ | ||
argufy_package(env = parent.frame(), ...) | ||
} | ||
\arguments{ | ||
\item{env}{the package environment to argufy} | ||
|
||
\item{...}{Function arguments to modify, this allows you to argufy existing | ||
function definitions.} | ||
} | ||
\description{ | ||
This function is best placed either in the last file sourced (\code{zzz.R} | ||
or the last file listed in the collate directive) or in \code{.onLoad()}. | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
library(disposables) | ||
|
||
context("argufy_package") | ||
test_that("argufy_package works with simple functions", { | ||
pkg <- make_packages( | ||
simple = { | ||
a <- function(x = ~ is.numeric) { | ||
if (x) { | ||
1 | ||
} else { | ||
2 | ||
} | ||
} | ||
|
||
argufy::argufy_package() | ||
}) | ||
|
||
expect_equal(a(0), 2) | ||
|
||
expect_equal(a(1), 1) | ||
|
||
expect_error(a("a"), "is.numeric\\(x\\) is not TRUE") | ||
|
||
dispose_packages(pkg) | ||
}) | ||
|
||
test_that("argufy_package works with S4 generics and methods", { | ||
|
||
pkg <- make_packages( | ||
TestS4 = { | ||
|
||
setGeneric("paste2", function(x = ~ is.character, y) { | ||
standardGeneric("paste2") | ||
}) | ||
|
||
setMethod("paste2", | ||
signature(x = "character", y = "missing"), | ||
function(x) { | ||
paste(x) | ||
}) | ||
|
||
setMethod("paste2", | ||
c(x = "character", y = "ANY"), | ||
function(x, y = ~ is.character) { | ||
paste(x, y) | ||
}) | ||
|
||
argufy::argufy_package() | ||
}) | ||
|
||
expect_equal(paste2("a"), "a") | ||
|
||
expect_equal(paste2("a", "b"), "a b") | ||
|
||
# argufy set on generic | ||
expect_error(paste2(1), "is.character\\(x\\) is not TRUE") | ||
|
||
# argufy set on method | ||
expect_error(paste2("a", 1), "is.character\\(y\\) is not TRUE") | ||
|
||
dispose_packages(pkg) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,4 @@ | ||
|
||
context("") | ||
context("coercions") | ||
|
||
test_that("as_enum works", { | ||
|
||
|