Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
2 changes: 2 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# httr2 (development version)

* `multi_dots()` now re-calculates n lengths when using `.multi = "explode"` to avoid select/recycling issues (@Kevanness, #719).
Comment thread
Kevanness marked this conversation as resolved.
Outdated

# httr2 1.1.2

* `req_headers()` more carefully checks its input types (#707).
Expand Down
8 changes: 1 addition & 7 deletions R/utils-multi.R
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,7 @@ multi_dots <- function(
dots[n > 1] <- lapply(dots[n > 1], I)
} else if (.multi == "explode") {
dots <- explode(dots)
dots[n > 1] <- imap(
dots[n > 1],
format_query_param,
multi = TRUE,
form = form
)
dots[n > 1] <- lapply(dots[n > 1], I)
n <- lengths(dots)
} else if (.multi == "error") {
cli::cli_abort(
c(
Expand Down
19 changes: 19 additions & 0 deletions tests/testthat/test-utils-multi.R
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,25 @@ test_that("can handle multi query params", {
)
})

test_that("can handle mixed length multi query params", {
expect_equal(
multi_dots(a = 1:2, b = 1, c = NULL, .multi = "explode"),
list(a = I("1"), a = I("2"), b = I("1"), c = NULL)
)
expect_equal(
multi_dots(a = 1:2, b = 1, c = NULL, .multi = "comma"),
list(a = I("1,2"), b = I("1"), c = NULL)
)
expect_equal(
multi_dots(a = 1:2, b = 1, c = NULL, .multi = "pipe"),
list(a = I("1|2"), b = I("1"), c = NULL)
)
expect_equal(
multi_dots(a = 1:2, b = 1, c = NULL, .multi = function(x) "X"),
list(a = I("X"), b = I("1"), c = NULL)
)
})

test_that("can opt-out of escaping for' vectors", {
expect_equal(
multi_dots(a = I(c(" ", " ")), .multi = "comma"),
Expand Down
Loading