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).
-
#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) ⇒ Request
constructor
Initializes a new Request.
Constructor Details
#initialize(http_method, url, headers: {}, body: nil, json: nil, params: nil, timeout: nil, max_redirects: nil) ⇒ Request
Initializes a new Request.
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/patient_http/request.rb', line 87 def initialize( http_method, url, headers: {}, body: nil, json: nil, params: nil, timeout: nil, max_redirects: 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) @headers = headers.is_a?(HttpHeaders) ? headers : HttpHeaders.new(headers) @body = (body == "") ? nil : body @timeout = timeout @max_redirects = max_redirects 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 |
#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
46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/patient_http/request.rb', line 46 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"] ) end |
Instance Method Details
#as_json ⇒ Hash
Serialize to JSON hash.
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/patient_http/request.rb', line 135 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 end |
#body ⇒ String?
Returns the request body, decoding it from the payload if necessary.
127 128 129 130 |
# File 'lib/patient_http/request.rb', line 127 def body @body = @payload&.value if @body.equal?(UNDEFINED) @body end |