class LittleSniffer::Adapters::NetHttpAdapter
Public Class Methods
new(handler:)
click to toggle source
# File lib/little_sniffer/adapters/net_http_adapter.rb, line 9 def initialize(handler:) @handler = handler end
Public Instance Methods
sniff() { || ... }
click to toggle source
# File lib/little_sniffer/adapters/net_http_adapter.rb, line 13 def sniff Net::HTTP.define_method(:request_with_sniffer, build_request_with_sniffer(@handler)) Net::HTTP.alias_method(:request_without_sniffer, :request) Net::HTTP.alias_method(:request, :request_with_sniffer) yield ensure Net::HTTP.alias_method(:request, :request_without_sniffer) Net::HTTP.remove_method(:request_with_sniffer) Net::HTTP.remove_method(:request_without_sniffer) end
Private Instance Methods
build_request_with_sniffer(handler)
click to toggle source
rubocop:disable Metrics/AbcSize, Metrics/MethodLength
# File lib/little_sniffer/adapters/net_http_adapter.rb, line 28 def build_request_with_sniffer(handler) lambda do |req, body = nil, &block| data = { request: { host: @address, method: req.method, query: req.path, port: @port, headers: req.each_header.collect.to_h, body: req.body.to_s } } bm = Benchmark.realtime do @response = request_without_sniffer(req, body, &block) end data[:response] = { status: @response.code.to_i, headers: @response.each_header.collect.to_h, body: @response.body.to_s, timing: bm } handler.call(data) @response end end