module Sniffer::Adapters::CurlAdapter
Curl adapter
Public Class Methods
included(base)
click to toggle source
# File lib/sniffer/adapters/curb_adapter.rb, line 7 def self.included(base) base.class_eval do alias_method :http_without_sniffer, :http alias_method :http, :http_with_sniffer alias_method :http_post_without_sniffer, :http_post alias_method :http_post, :http_post_with_sniffer end end
Public Instance Methods
http_post_with_sniffer(*args)
click to toggle source
# File lib/sniffer/adapters/curb_adapter.rb, line 31 def http_post_with_sniffer(*args) sniffer_request(:POST, *args) bm = Benchmark.realtime do @res = http_post_without_sniffer(*args) end sniffer_response(bm) @res end
http_with_sniffer(verb)
click to toggle source
# File lib/sniffer/adapters/curb_adapter.rb, line 17 def http_with_sniffer(verb) sniffer_request(verb) http_without_sniffer(verb) bm = Benchmark.realtime do @res = http_without_sniffer(verb) end sniffer_response(bm) @res end
Private Instance Methods
data_item()
click to toggle source
# File lib/sniffer/adapters/curb_adapter.rb, line 45 def data_item @data_item ||= Sniffer::DataItem.new if Sniffer.enabled? end
sniffer_request(verb, *args)
click to toggle source
rubocop:disable Metrics/AbcSize, Metrics/MethodLength
# File lib/sniffer/adapters/curb_adapter.rb, line 50 def sniffer_request(verb, *args) return unless data_item uri = URI(url) query = uri.path query += "?#{uri.query}" if uri.query data_item.request = Sniffer::DataItem::Request.new(host: uri.host, method: verb, query: query, headers: headers.collect.to_h, body: args.join("&"), port: uri.port) Sniffer.store(data_item) end
sniffer_response(timing)
click to toggle source
rubocop:enable Metrics/AbcSize, Metrics/MethodLength
# File lib/sniffer/adapters/curb_adapter.rb, line 68 def sniffer_response(timing) return unless data_item _, *http_headers = header_str.split(/[\r\n]+/).map(&:strip) http_headers = Hash[http_headers.flat_map { |s| s.scan(/^(\S+): (.+)/) }] data_item.response = Sniffer::DataItem::Response.new(status: status.to_i, headers: http_headers, body: body_str, timing: timing) Sniffer.notify_response(data_item) end