Skip to content

Commit 47ef0e7

Browse files
committed
Improve errors for set_mode and set_engine
1 parent 46a2018 commit 47ef0e7

File tree

3 files changed

+29
-29
lines changed

3 files changed

+29
-29
lines changed

R/aaa_models.R

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -133,21 +133,22 @@ check_mode_val <- function(mode) {
133133
invisible(NULL)
134134
}
135135

136+
137+
glue_compatible_modes <- function(cls, spec_modes) {
138+
glue::glue(
139+
"Available modes are: ",
140+
glue::glue_collapse(glue::glue("'{spec_modes}'"), sep = ", ")
141+
)
142+
}
143+
136144
# check if class and mode are compatible
137145
check_spec_mode_val <- function(cls, mode) {
138146
spec_modes <- rlang::env_get(get_model_env(), paste0(cls, "_modes"))
139-
compatible_modes <-
140-
glue::glue(
141-
"`mode` should be one of: ",
142-
glue::glue_collapse(glue::glue("'{spec_modes}'"), sep = ", ")
143-
)
144-
145-
if (is.null(mode)) {
146-
rlang::abort(compatible_modes)
147+
if (is.null(mode) | length(mode) > 1) {
148+
rlang::abort(glue_compatible_modes(cls, spec_modes))
147149
} else if (!(mode %in% spec_modes)) {
148-
rlang::abort(compatible_modes)
150+
rlang::abort(glue_compatible_modes(cls, spec_modes))
149151
}
150-
151152
invisible(NULL)
152153
}
153154

R/arguments.R

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,12 @@ set_args <- function(object, ...) {
7676
#' @rdname set_args
7777
#' @export
7878
set_mode <- function(object, mode) {
79+
cls <- class(object)[1]
7980
if (rlang::is_missing(mode)) {
80-
mode <- NULL
81+
spec_modes <- rlang::env_get(get_model_env(), paste0(cls, "_modes"))
82+
rlang::abort(glue_compatible_modes(cls, spec_modes))
8183
}
82-
mode <- mode[1]
83-
check_spec_mode_val(class(object)[1], mode)
84+
check_spec_mode_val(cls, mode)
8485
object$mode <- mode
8586
object
8687
}

R/engines.R

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,20 @@ possible_engines <- function(object, ...) {
1010
unique(engs$engine)
1111
}
1212

13+
glue_compatible_engines <- function(engine, avail_eng) {
14+
glue::glue(
15+
"Available engines are: ",
16+
glue::glue_collapse(glue::glue("'{avail_eng}'"), sep = ", ")
17+
)
18+
}
19+
1320
check_engine <- function(object) {
1421
avail_eng <- possible_engines(object)
15-
if (is.null(object$engine)) {
16-
object$engine <- avail_eng[1]
17-
rlang::warn(glue::glue("`engine` was NULL and updated to be `{object$engine}`"))
18-
} else {
19-
if (!is.character(object$engine) | length(object$engine) != 1) {
20-
rlang::abort("`engine` should be a single character value.")
21-
}
22-
}
23-
if (!(object$engine %in% avail_eng)) {
24-
rlang::abort(
25-
glue::glue(
26-
"Engine '{object$engine}' is not available. Please use one of: ",
27-
glue::glue_collapse(glue::glue("'{avail_eng}'"), sep = ", ")
28-
)
29-
)
22+
eng <- object$engine
23+
if (is.null(eng) | length(eng) > 1) {
24+
rlang::abort(glue_compatible_engines(eng, avail_eng))
25+
} else if (!(eng %in% avail_eng)) {
26+
rlang::abort(glue_compatible_engines(eng, avail_eng))
3027
}
3128
object
3229
}
@@ -97,7 +94,8 @@ set_engine <- function(object, engine, ...) {
9794
}
9895

9996
if (rlang::is_missing(engine)) {
100-
engine <- NULL
97+
avail_eng <- possible_engines(object)
98+
rlang::abort(glue_compatible_engines(object$engine, avail_eng))
10199
}
102100
object$engine <- engine
103101
object <- check_engine(object)

0 commit comments

Comments
 (0)