1 HttpRequest <- R6::R6Class(
7 initialize = function()
11 GET = function(url, headers = NULL, queryFilters = NULL, limit = NULL, offset = NULL)
13 headers <- httr::add_headers(unlist(headers))
14 query <- private$createQuery(queryFilters, limit, offset)
15 url <- paste0(url, query)
17 serverResponse <- httr::GET(url = url, config = headers)
20 PUT = function(url, headers = NULL, body = NULL,
21 queryFilters = NULL, limit = 100, offset = 0)
23 headers <- httr::add_headers(unlist(headers))
24 query <- private$createQuery(queryFilters, limit, offset)
25 url <- paste0(url, query)
27 serverResponse <- httr::PUT(url = url, config = headers, body = body)
30 POST = function(url, headers = NULL, body = NULL,
31 queryFilters = NULL, limit = 100, offset = 0)
33 headers <- httr::add_headers(unlist(headers))
34 query <- private$createQuery(queryFilters, limit, offset)
35 url <- paste0(url, query)
37 serverResponse <- httr::POST(url = url, config = headers, body = body)
40 DELETE = function(url, headers = NULL, body = NULL,
41 queryFilters = NULL, limit = NULL, offset = NULL)
43 headers <- httr::add_headers(unlist(headers))
44 query <- private$createQuery(queryFilters, limit, offset)
45 url <- paste0(url, query)
47 serverResponse <- httr::DELETE(url = url, config = headers)
50 PROPFIND = function(url, headers = NULL)
52 h <- curl::new_handle()
53 curl::handle_setopt(h, customrequest = "PROPFIND")
54 curl::handle_setheaders(h, .list = headers)
56 propfindResponse <- curl::curl_fetch_memory(url, h)
62 #Todo(Fudo): Refactor this and find a better way to build
63 # Python array from R list (recursion?)
64 createQuery = function(filters, limit, offset)
70 filters <- sapply(filters, function(filter)
72 if(length(filter) != 3)
73 stop("Filter list must have exacthey 3 elements.")
75 attributeAndOperator = filter[c(1, 2)]
76 filterList = filter[[3]]
77 filterListIsPrimitive = TRUE
78 if(length(filterList) > 1)
79 filterListIsPrimitive = FALSE
81 attributeAndOperator <- sapply(attributeAndOperator, function(component) {
82 component <- paste0("\"", component, "\"")
85 filterList <- sapply(unlist(filterList), function(filter) {
86 filter <- paste0("\"", filter, "\"")
89 filterList <- paste(filterList, collapse = ",+")
91 if(!filterListIsPrimitive)
92 filterList <- paste0("[", filterList, "]")
94 filter <- c(attributeAndOperator, filterList)
96 queryParameter <- paste(filter, collapse = ",+")
97 queryParameter <- paste0("[", queryParameter, "]")
101 filters <- paste(filters, collapse = ",+")
102 filters <- paste0("[", filters, "]")
104 encodedQuery <- URLencode(filters, reserved = T, repeated = T)
106 #Todo(Fudo): This is a hack for now. Find a proper solution.
107 encodedQuery <- stringr::str_replace_all(encodedQuery, "%2B", "+")
109 finalQuery <- c(finalQuery, paste0("filters=", encodedQuery))
116 if(!is.numeric(limit))
117 stop("Limit must be a numeric type.")
119 finalQuery <- c(finalQuery, paste0("limit=", limit))
124 if(!is.numeric(offset))
125 stop("Offset must be a numeric type.")
127 finalQuery <- c(finalQuery, paste0("offset=", offset))
130 if(length(finalQuery) > 1)
132 finalQuery <- paste0(finalQuery, collapse = "&")
133 finalQuery <- paste0("?", finalQuery)