Module: TIMEx::Propagation::HttpHeader

Extended by:
HttpHeader
Included in:
HttpHeader
Defined in:
lib/timex/propagation/http_header.rb

Overview

Helpers for reading and writing the Deadline::HEADER_NAME wire format on Rack env and generic header maps.

Constant Summary collapse

HEADER_NAME =
Deadline::HEADER_NAME
RACK_HEADER_KEY =
"HTTP_X_TIMEX_DEADLINE"

Instance Method Summary collapse

Instance Method Details

#from_headers(headers) ⇒ Deadline?

Resolves a deadline from a case-insensitive header map when possible.

Parameters:

  • headers (Hash, #key?, #find, nil)

    header-like collection

Returns:



27
28
29
30
31
32
33
34
# File 'lib/timex/propagation/http_header.rb', line 27

def from_headers(headers)
  return Deadline.from_header(nil) if headers.nil?

  return Deadline.from_header(headers[HEADER_NAME]) if headers.respond_to?(:key?) && headers.key?(HEADER_NAME)

  pair = headers.find { |k, _| k.to_s.casecmp?(HEADER_NAME) } if headers.respond_to?(:find)
  Deadline.from_header(pair&.last)
end

#from_rack_env(env) ⇒ Deadline?

Returns parsed deadline or nil.

Parameters:

  • env (Hash{String => Object})

    Rack environment (+HTTP_*+ keys)

Returns:

  • (Deadline, nil)

    parsed deadline or nil



19
20
21
# File 'lib/timex/propagation/http_header.rb', line 19

def from_rack_env(env)
  Deadline.from_header(env[RACK_HEADER_KEY])
end

#inject(headers, deadline, prefer: :remaining) ⇒ Hash

Writes deadline into headers under HEADER_NAME.

Parameters:

  • headers (Hash)

    mutable header map (mutated in place)

  • deadline (Deadline)
  • prefer (:remaining, :wall) (defaults to: :remaining)

    forwarded to Deadline#to_header

Returns:

  • (Hash)

    headers (same object)



42
43
44
45
# File 'lib/timex/propagation/http_header.rb', line 42

def inject(headers, deadline, prefer: :remaining)
  headers[HEADER_NAME] = deadline.to_header(prefer:)
  headers
end