/
http_interaction.R
84 lines (81 loc) · 2.57 KB
/
http_interaction.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#' @title HTTPInteraction class
#' @description object holds request and response objects
#' @export
#' @details
#' \strong{Methods}
#' \describe{
#' \item{\code{to_hash()}}{
#' Create a hash from the HTTPInteraction object
#' }
#' \item{\code{from_hash(hash)}}{
#' Create a HTTPInteraction object from a hash
#' }
#' }
#' @examples \dontrun{
#' # make the request
#' library(vcr)
#' url <- "https://hb.opencpu.org/post"
#' body <- list(foo = "bar")
#' cli <- crul::HttpClient$new(url = url)
#' res <- cli$post(body = body)
#'
#' # build a Request object
#' (request <- Request$new("POST", uri = url,
#' body = body, headers = res$response_headers))
#' # build a VcrResponse object
#' (response <- VcrResponse$new(
#' res$status_http(),
#' res$response_headers,
#' res$parse("UTF-8"),
#' res$response_headers$status))
#'
#' # make HTTPInteraction object
#' (x <- HTTPInteraction$new(request = request, response = response))
#' x$recorded_at
#' x$to_hash()
#'
#' # make an HTTPInteraction from a hash with the object already made
#' x$from_hash(x$to_hash())
#'
#' # Make an HTTPInteraction from a hash alone
#' my_hash <- x$to_hash()
#' HTTPInteraction$new()$from_hash(my_hash)
#' }
HTTPInteraction <- R6::R6Class(
'HTTPInteraction',
public = list(
#' @field request A `Request` class object
request = NULL,
#' @field response A `VcrResponse` class object
response = NULL,
#' @field recorded_at (character) Time http interaction recorded at
recorded_at = NULL,
#' @description Create a new `HTTPInteraction` object
#' @param request A `Request` class object
#' @param response A `VcrResponse` class object
#' @param recorded_at (character) Time http interaction recorded at
#' @return A new `HTTPInteraction` object
initialize = function(request, response, recorded_at) {
if (!missing(request)) self$request <- request
if (!missing(response)) self$response <- response
self$recorded_at <- Sys.time()
},
#' @description Create a hash from the HTTPInteraction object
#' @return a named list
to_hash = function() {
list(request = self$request$to_hash(),
response = self$response$to_hash(),
recorded_at = self$recorded_at)
},
#' @description Create a HTTPInteraction object from a hash
#' @param hash a named list
#' @return a new `HttpInteraction` object
from_hash = function(hash) {
HTTPInteraction$new(
Request$new()$from_hash(hash$request),
VcrResponse$new()$from_hash(hash$response),
hash$recorded_at
)
}
)
)