Module: HTTPX::Plugins::PushPromise::InstanceMethods

Defined in:
lib/httpx/plugins/push_promise.rb,
sig/plugins/push_promise.rbs

Instance Method Summary collapse

Instance Method Details

#__on_promise_request(parser, stream, h) ⇒ void

This method returns an undefined value.

Parameters:



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/httpx/plugins/push_promise.rb', line 45

def __on_promise_request(parser, stream, h)
  log(level: 1, color: :yellow) do
    # simplecov:disable
    h.map { |k, v| "#{stream.id}: -> PROMISE HEADER: #{k}: #{v}" }.join("\n")
    # simplecov:enable
  end
  headers = @options.headers_class.new(h)
  path = headers[":path"]
  authority = headers[":authority"]

  request = parser.pending.find { |r| r.authority == authority && r.path == path }
  if request
    request.merge_headers(headers)
    promise_headers[stream] = request
    parser.pending.delete(request)
    parser.streams[request] = stream
    request.transition(:done)
  else
    stream.refuse
  end
end

#__on_promise_response(parser, stream, h) ⇒ void

This method returns an undefined value.

Parameters:



67
68
69
70
71
72
73
74
75
76
# File 'lib/httpx/plugins/push_promise.rb', line 67

def __on_promise_response(parser, stream, h)
  request = promise_headers.delete(stream)
  return unless request

  parser.__send__(:on_stream_headers, stream, request, h)
  response = request.response
  response.mark_as_pushed!
  stream.on(:data, &parser.method(:on_stream_data).curry(3)[stream, request])
  stream.on(:close, &parser.method(:on_stream_close).curry(3)[stream, request])
end

#promise_headersHash[::HTTP2::Stream, Request]

Returns:



32
33
34
# File 'lib/httpx/plugins/push_promise.rb', line 32

def promise_headers
  @promise_headers ||= {}
end