Class: PatientHttp::Request
- Inherits:
-
Object
- Object
- PatientHttp::Request
- Defined in:
- lib/patient_http/request.rb
Overview
Represents an async HTTP request that will be processed by the async processor.
Constant Summary collapse
- VALID_METHODS =
Valid HTTP methods
%i[get post put patch delete].freeze
Instance Attribute Summary collapse
-
#headers ⇒ HttpHeaders
readonly
Request headers.
-
#http_method ⇒ Symbol
readonly
HTTP method (:get, :post, :put, :patch, :delete).
-
#max_redirects ⇒ Integer?
readonly
Maximum number of redirects to follow (nil uses config default, 0 disables).
-
#preprocessors ⇒ Array<String>
readonly
Names of preprocessors registered on the configuration to apply to the request when it is sent.
-
#processor ⇒ String?
readonly
Name of the processor that should execute the request.
-
#secret_params ⇒ Hash{String, Symbol => SecretReference}
readonly
Query parameters whose values are secret references, kept out of the serialized URL and resolved at send time.
-
#timeout ⇒ Numeric?
readonly
Overall timeout in seconds.
-
#url ⇒ String
readonly
The request URL.
Class Method Summary collapse
-
.load(hash) ⇒ Request
Reconstruct a Request from a hash.
Instance Method Summary collapse
-
#as_json ⇒ Hash
Serialize to JSON hash.
-
#body ⇒ String?
Returns the request body, decoding it from the payload if necessary.
-
#initialize(http_method, url, headers: {}, body: nil, json: nil, params: nil, timeout: nil, max_redirects: nil, preprocessors: nil, processor: nil) ⇒ Request
constructor
Initializes a new Request.
Constructor Details
#initialize(http_method, url, headers: {}, body: nil, json: nil, params: nil, timeout: nil, max_redirects: nil, preprocessors: nil, processor: nil) ⇒ Request
Initializes a new Request.
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/patient_http/request.rb', line 102 def initialize( http_method, url, headers: {}, body: nil, json: nil, params: nil, timeout: nil, max_redirects: nil, preprocessors: nil, processor: nil ) @http_method = http_method.is_a?(String) ? http_method.downcase.to_sym : http_method unless url.nil? || url.is_a?(String) || url.is_a?(URI::Generic) raise ArgumentError.new("url must be a String or URI, got: #{url.class}") end @secret_params = {} @url = normalized_url(url, params) # Copy the headers so the request does not share mutable state with the # caller (or with another request when following redirects). @headers = headers.is_a?(HttpHeaders) ? headers.dup : HttpHeaders.new(headers) @body = (body == "") ? nil : body @timeout = timeout @max_redirects = max_redirects @preprocessors = normalized_preprocessors(preprocessors) @processor = normalized_processor(processor) if json raise ArgumentError.new("Cannot provide both body and json") if @body @body = JSON.generate(json) @headers["content-type"] ||= "application/json; charset=utf-8" end validate! encoding, encoded_body, charset = Payload.encode(@body, @headers["content-type"]) @payload = Payload.new(encoding, encoded_body, charset) unless @body.nil? @body = UNDEFINED end |
Instance Attribute Details
#headers ⇒ HttpHeaders (readonly)
Returns Request headers.
29 30 31 |
# File 'lib/patient_http/request.rb', line 29 def headers @headers end |
#http_method ⇒ Symbol (readonly)
Returns HTTP method (:get, :post, :put, :patch, :delete).
23 24 25 |
# File 'lib/patient_http/request.rb', line 23 def http_method @http_method end |
#max_redirects ⇒ Integer? (readonly)
Returns Maximum number of redirects to follow (nil uses config default, 0 disables).
35 36 37 |
# File 'lib/patient_http/request.rb', line 35 def max_redirects @max_redirects end |
#preprocessors ⇒ Array<String> (readonly)
Returns Names of preprocessors registered on the configuration to apply to the request when it is sent.
43 44 45 |
# File 'lib/patient_http/request.rb', line 43 def preprocessors @preprocessors end |
#processor ⇒ String? (readonly)
Returns Name of the processor that should execute the request. Integrations use this to route the request to a named processor; nil uses the default processor.
48 49 50 |
# File 'lib/patient_http/request.rb', line 48 def processor @processor end |
#secret_params ⇒ Hash{String, Symbol => SecretReference} (readonly)
Returns Query parameters whose values are secret references, kept out of the serialized URL and resolved at send time.
39 40 41 |
# File 'lib/patient_http/request.rb', line 39 def secret_params @secret_params end |
#timeout ⇒ Numeric? (readonly)
Returns Overall timeout in seconds.
32 33 34 |
# File 'lib/patient_http/request.rb', line 32 def timeout @timeout end |
#url ⇒ String (readonly)
Returns The request URL.
26 27 28 |
# File 'lib/patient_http/request.rb', line 26 def url @url end |
Class Method Details
.load(hash) ⇒ Request
Reconstruct a Request from a hash
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/patient_http/request.rb', line 55 def load(hash) new( hash["http_method"].to_sym, hash["url"], headers: load_headers(hash["headers"]), body: Payload.load(hash["body"])&.value, params: load_secret_params(hash["secret_params"]), timeout: hash["timeout"], max_redirects: hash["max_redirects"], preprocessors: hash["preprocessors"], processor: hash["processor"] ) end |
Instance Method Details
#as_json ⇒ Hash
Serialize to JSON hash.
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/patient_http/request.rb', line 156 def as_json hash = { "http_method" => @http_method.to_s, "url" => @url.to_s, "headers" => serialized_headers, "body" => @payload&.as_json, "timeout" => @timeout, "max_redirects" => @max_redirects } if @secret_params.any? hash["secret_params"] = @secret_params.transform_values(&:as_json) end hash["preprocessors"] = @preprocessors if @preprocessors.any? hash["processor"] = @processor if @processor hash end |
#body ⇒ String?
Returns the request body, decoding it from the payload if necessary.
148 149 150 151 |
# File 'lib/patient_http/request.rb', line 148 def body @body = @payload&.value if @body.equal?(UNDEFINED) @body end |