Class: Net::HTTP

Inherits:
Object
  • Object
show all
Defined in:
lib/nsa/net_http_tracker.rb

Instance Method Summary collapse

Instance Method Details

#orig_requestObject



66
# File 'lib/nsa/net_http_tracker.rb', line 66

alias_method(:orig_request, :request)

#request(req, request_body = nil, &block) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/nsa/net_http_tracker.rb', line 69

def request(req, request_body = nil, &block)
  return orig_request(req, request_body, &block) unless started?
  protocol = use_ssl? ? "https" : "http"
  request_headers = Hash[req.each_header.to_a]
  request_tracker = ::Nsa::NetHttpTracker.new(
    protocol, @address, @port, req.path, req.method, request_headers,
    request_body || req.body
  )

  response_body = ""
  block_provided = block_given?
  response = orig_request(req, request_body) do |resp|
    resp.read_body { |str| response_body << str }
    resp.define_singleton_method(:read_body) do |dest = nil, &block|
      dest << response_body unless dest.nil?
      block.call(response_body) unless block.nil?
      response_body
    end
    block.call(resp) if block_provided
  end

  request_tracker.set_response_info(
    response.code, response.message, Hash[response.each_header.to_a]
  )
  request_tracker.response_body = response_body
  response
end