-source("./R/custom_classes.R")
-
-HttpRequest <- setRefClass(
+HttpRequest <- R6::R6Class(
"HttrRequest",
- fields = list(
+ public = list(
- GET = "function",
- PUT = "function",
- POST = "function",
- DELETE = "function"
- ),
+ validContentTypes = NULL,
- methods = list(
initialize = function()
{
- # Public methods
- GET <<- function(url, headers = NULL, body = NULL,
- queryFilters = NULL, limit = NULL, offset = NULL)
- {
- headers <- httr::add_headers(unlist(headers))
- query <- .createQuery(queryFilters, limit, offset)
- url <- paste0(url, query)
- print(url)
+ self$validContentTypes <- c("text", "raw")
+ },
- serverResponse <- httr::GET(url = url, config = headers)
- }
+ GET = function(url, headers = NULL, queryFilters = NULL, limit = NULL, offset = NULL)
+ {
+ headers <- httr::add_headers(unlist(headers))
+ query <- private$createQuery(queryFilters, limit, offset)
+ url <- paste0(url, query)
- PUT <<- function(url, headers = NULL, body = NULL,
- queryFilters = NULL, limit = 100, offset = 0)
- {
- headers <- httr::add_headers(unlist(headers))
- query <- .createQuery(queryFilters, limit, offset)
- url <- paste0(url, query)
+ serverResponse <- httr::GET(url = url, config = headers)
+ },
- serverResponse <- httr::PUT(url = url, config = headers, body = body)
- }
+ PUT = function(url, headers = NULL, body = NULL,
+ queryFilters = NULL, limit = 100, offset = 0)
+ {
+ headers <- httr::add_headers(unlist(headers))
+ query <- private$createQuery(queryFilters, limit, offset)
+ url <- paste0(url, query)
- POST <<- function(url, headers = NULL, body = NULL,
- queryFilters = NULL, limit = 100, offset = 0)
- {
- headers <- httr::add_headers(unlist(headers))
- query <- .createQuery(queryFilters, limit, offset)
- url <- paste0(url, query)
+ serverResponse <- httr::PUT(url = url, config = headers, body = body)
+ },
- serverResponse <- httr::POST(url = url, config = headers, body = body)
- }
+ POST = function(url, headers = NULL, body = NULL,
+ queryFilters = NULL, limit = 100, offset = 0)
+ {
+ headers <- httr::add_headers(unlist(headers))
+ query <- private$createQuery(queryFilters, limit, offset)
+ url <- paste0(url, query)
- DELETE <<- function(url, headers = NULL, body = NULL,
- queryFilters = NULL, limit = NULL, offset = NULL)
- {
- headers <- httr::add_headers(unlist(headers))
- query <- .createQuery(queryFilters, limit, offset)
- url <- paste0(url, query)
+ serverResponse <- httr::POST(url = url, config = headers, body = body)
+ },
- serverResponse <- httr::DELETE(url = url, config = headers)
- }
+ DELETE = function(url, headers = NULL, body = NULL,
+ queryFilters = NULL, limit = NULL, offset = NULL)
+ {
+ headers <- httr::add_headers(unlist(headers))
+ query <- private$createQuery(queryFilters, limit, offset)
+ url <- paste0(url, query)
- # Private methods
- .createQuery <- function(filters, limit, offset)
- {
- finalQuery <- "?alt=json"
+ serverResponse <- httr::DELETE(url = url, config = headers)
+ },
- if(!is.null(filters))
- {
- filters <- sapply(filters, function(filter)
- {
- if(length(filter) != 3)
- stop("Filter list must have exacthey 3 elements.")
+ PROPFIND = function(url, headers = NULL)
+ {
+ h <- curl::new_handle()
+ curl::handle_setopt(h, customrequest = "PROPFIND")
+ curl::handle_setheaders(h, .list = headers)
- attributeAndOperator = filter[c(1, 2)]
- filterList = filter[[3]]
- filterListIsPrimitive = TRUE
- if(length(filterList) > 1)
- filterListIsPrimitive = FALSE
+ propfindResponse <- curl::curl_fetch_memory(url, h)
+ },
- attributeAndOperator <- sapply(attributeAndOperator, function(component) {
- component <- paste0("\"", component, "\"")
- })
+ MOVE = function(url, headers = NULL)
+ {
+ h <- curl::new_handle()
+ curl::handle_setopt(h, customrequest = "MOVE")
+ curl::handle_setheaders(h, .list = headers)
- filterList <- sapply(unlist(filterList), function(filter) {
- filter <- paste0("\"", filter, "\"")
- })
+ propfindResponse <- curl::curl_fetch_memory(url, h)
+ }
+ ),
- filterList <- paste(filterList, collapse = ",+")
+ private = list(
- if(!filterListIsPrimitive)
- filterList <- paste0("[", filterList, "]")
+ createQuery = function(filters, limit, offset)
+ {
+ finalQuery <- NULL
- filter <- c(attributeAndOperator, filterList)
+ if(!is.null(filters))
+ {
+ filters <- sapply(filters, function(filter)
+ {
+ if(length(filter) != 3)
+ stop("Filter list must have exactly 3 elements.")
+
+ attributeAndOperator = filter[c(1, 2)]
+ filterList = filter[[3]]
+ filterListIsPrimitive = TRUE
+ if(length(filterList) > 1)
+ filterListIsPrimitive = FALSE
+
+ attributeAndOperator <- sapply(attributeAndOperator, function(component) {
+ component <- paste0("\"", component, "\"")
+ })
- queryParameter <- paste(filter, collapse = ",+")
- queryParameter <- paste0("[", queryParameter, "]")
-
+ filterList <- sapply(unlist(filterList), function(filter) {
+ filter <- paste0("\"", filter, "\"")
})
- filters <- paste(filters, collapse = ",+")
- filters <- paste0("[", filters, "]")
+ filterList <- paste(filterList, collapse = ",+")
- encodedQuery <- URLencode(filters, reserved = T, repeated = T)
+ if(!filterListIsPrimitive)
+ filterList <- paste0("[", filterList, "]")
- finalQuery <- paste0(finalQuery, "&filters=", encodedQuery)
+ filter <- c(attributeAndOperator, filterList)
- #Todo(Fudo): This is a hack for now. Find a proper solution.
- finalQuery <- stringr::str_replace_all(finalQuery, "%2B", "+")
- }
+ queryParameter <- paste(filter, collapse = ",+")
+ queryParameter <- paste0("[", queryParameter, "]")
+
+ })
- if(!is.null(limit))
- {
- if(!is.numeric(limit))
- stop("Limit must be a numeric type.")
-
- finalQuery <- paste0(finalQuery, "&limit=", limit)
- }
+ filters <- paste(filters, collapse = ",+")
+ filters <- paste0("[", filters, "]")
- if(!is.null(offset))
- {
- if(!is.numeric(offset))
- stop("Offset must be a numeric type.")
-
- finalQuery <- paste0(finalQuery, "&offset=", offset)
- }
+ encodedQuery <- URLencode(filters, reserved = T, repeated = T)
+
+ encodedQuery <- stringr::str_replace_all(encodedQuery, "%2B", "+")
+
+ finalQuery <- c(finalQuery, paste0("filters=", encodedQuery))
finalQuery
}
+
+ if(!is.null(limit))
+ {
+ if(!is.numeric(limit))
+ stop("Limit must be a numeric type.")
+
+ finalQuery <- c(finalQuery, paste0("limit=", limit))
+ }
+
+ if(!is.null(offset))
+ {
+ if(!is.numeric(offset))
+ stop("Offset must be a numeric type.")
+
+ finalQuery <- c(finalQuery, paste0("offset=", offset))
+ }
+
+ if(length(finalQuery) > 1)
+ {
+ finalQuery <- paste0(finalQuery, collapse = "&")
+ }
+
+ finalQuery <- paste0("/?", finalQuery)
+
+ finalQuery
}
- )
+ ),
+
+ cloneable = FALSE
)