1 source("./R/custom_classes.R")
3 HttpRequest <- setRefClass(
8 send_method = "character",
9 server_base_url = "character",
10 server_relative_url = "character",
11 auth_token = "character",
12 allowed_methods = "list",
13 query_filters = "ANY",
14 response_limit = "ANY",
19 initialize = function(method,
27 send_method <<- method
29 server_base_url <<- base_url
30 server_relative_url <<- relative_url
31 query_filters <<- filters
32 response_limit <<- limit
33 query_offset <<- offset
38 http_method <- switch(send_method,
39 "GET" = .self$getRequest,
40 "POST" = .self$postRequest,
41 "PUT" = .self$putRequest,
42 "DELETE" = .self$deleteRequest,
43 "PATCH" = .self$pathcRequest)
47 getRequest = function()
49 requestHeaders <- httr::add_headers(Authorization = .self$getAuthHeader())
50 requestQuery <- .self$generateQuery()
51 url <- paste0(server_base_url, server_relative_url, requestQuery)
53 server_data <- httr::GET(url = url,
54 config = requestHeaders)
57 #Todo(Fudo): Try to make this more generic
58 postRequest = function()
60 #Todo(Fudo): Implement this later on.
64 putRequest = function()
66 #Todo(Fudo): Implement this later on.
70 deleteRequest = function()
72 #Todo(Fudo): Implement this later on.
73 print("DELETE method")
76 pathcRequest = function()
78 #Todo(Fudo): Implement this later on.
82 getAuthHeader = function()
84 auth_method <- "OAuth2"
85 auth_header <- paste(auth_method, auth_token)
88 generateQuery = function()
92 if(!is.null(query_filters))
94 filters <- sapply(query_filters, function(filter)
96 filter <- sapply(filter, function(component)
98 component <- paste0("\"", component, "\"")
101 queryParameter <- paste(filter, collapse = ",+")
102 queryParameter <- paste0("[[", queryParameter, "]]")
105 encodedQuery <- URLencode(filters, reserved = T, repeated = T)
107 #Todo(Fudo): Hardcoded for now. Look for a better solution.
108 finalQuery <- paste0("?alt=json&filters=", encodedQuery)
110 #Todo(Fudo): This is a hack for now. Find a proper solution.
111 finalQuery <- str_replace_all(finalQuery, "%2B", "+")