self$validVerbs <- c("GET", "POST", "PUT", "DELETE", "PROPFIND", "MOVE")
},
- execute = function(verb, url, headers = NULL, body = NULL, query = NULL,
- limit = NULL, offset = NULL, retryTimes = 0)
- {
- if(!(verb %in% self$validVerbs))
- stop("Http verb is not valid.")
-
- headers <- httr::add_headers(unlist(headers))
- urlQuery <- self$createQuery(query, limit, offset)
- url <- paste0(url, urlQuery)
-
- # times = 1 regular call + numberOfRetries
- response <- httr::RETRY(verb, url = url, body = body,
- config = headers, times = retryTimes + 1)
- },
-
exec = function(verb, url, headers = NULL, body = NULL, queryParams = NULL,
retryTimes = 0)
{
stop("Http verb is not valid.")
headers <- httr::add_headers(unlist(headers))
- urlQuery <- self$genQuery(queryParams)
+ urlQuery <- self$createQuery(queryParams)
url <- paste0(url, urlQuery)
# times = 1 regular call + numberOfRetries
config = headers, times = retryTimes + 1)
},
- createQuery = function(filters, limit, offset)
- {
- finalQuery <- NULL
-
- finalQuery <- c(finalQuery, private$createFiltersQuery(filters))
- finalQuery <- c(finalQuery, private$createLimitQuery(limit))
- finalQuery <- c(finalQuery, private$createOffsetQuery(offset))
-
- finalQuery <- finalQuery[!is.null(finalQuery)]
- finalQuery <- paste0(finalQuery, collapse = "&")
-
- if(finalQuery != "")
- finalQuery <- paste0("/?", finalQuery)
-
- finalQuery
- },
-
- genQuery = function(queryParams)
+ createQuery = function(queryParams)
{
queryParams <- Filter(Negate(is.null), queryParams)
}
),
- private = list(
-
- createFiltersQuery = function(filters)
- {
- if(!is.null(filters))
- {
- filters <- RListToPythonList(filters, ",")
- encodedQuery <- URLencode(filters, reserved = T, repeated = T)
-
- return(paste0("filters=", encodedQuery))
- }
-
- return(NULL)
- },
-
- createLimitQuery = function(limit)
- {
- if(!is.null(limit))
- {
- limit <- suppressWarnings(as.numeric(limit))
-
- if(is.na(limit))
- stop("Limit must be a numeric type.")
-
- return(paste0("limit=", limit))
- }
-
- return(NULL)
- },
-
- createOffsetQuery = function(offset)
- {
- if(!is.null(offset))
- {
- offset <- suppressWarnings(as.numeric(offset))
-
- if(is.na(offset))
- stop("Offset must be a numeric type.")
-
- return(paste0("offset=", offset))
- }
-
- return(NULL)
- }
- ),
-
cloneable = FALSE
)
test_that("execyte raises exception if http verb is not valid", {
http <- HttpRequest$new()
- expect_that(http$execute("FAKE VERB", "url"),
+ expect_that(http$exec("FAKE VERB", "url"),
throws_error("Http verb is not valid."))
})
-test_that(paste("createQuery generates and encodes query portion of http",
- "request based on filters, limit and offset parameters"), {
+test_that("createQuery generates and encodes query portion of http", {
http <- HttpRequest$new()
- filters <- list(list("color", "=", "red"))
- limit <- 20
- offset <- 50
- expect_that(http$createQuery(filters, limit, offset),
+ queryParams <- list()
+ queryParams$filters <- list(list("color", "=", "red"))
+ queryParams$limit <- 20
+ queryParams$offset <- 50
+ expect_that(http$createQuery(queryParams),
equals(paste0("/?filters=%5B%5B%22color%22%2C%22%3D%22%2C%22red",
"%22%5D%5D&limit=20&offset=50")))
})
-test_that(paste("createQuery generates and empty string",
- "when filters, limit and offset parameters are set to NULL"), {
+test_that("createQuery generates and empty string when queryParams is an empty list", {
http <- HttpRequest$new()
- expect_that(http$createQuery(NULL, NULL, NULL), equals(""))
+ expect_that(http$createQuery(list()), equals(""))
})