Sha256: 88eefda95834be6dab3c957febff06703cdbb4c58da4f6bb1d704e00a952ce78

Contents?: true

Size: 1.98 KB

Versions: 6

Compression:

Stored size: 1.98 KB

Contents

# frozen_string_literal: true

module DevSuite
  module RequestLogger
    module Adapter
      class NetHttp < Base
        # Enables the logging of Net::HTTP requests by monkey patching the request method
        def enable
          ::Net::HTTP.class_eval do
            # Alias the original request method with a unique name (_original_request)
            # This preserves the original functionality so it can still be called after logging is added
            alias_method(:_original_request, :request)

            # Override the request method to add logging functionality
            def request(request, body = nil, &block)
              start_time = Time.now

              Logger.log_request(self, request)

              response = nil
              begin
                # Call the original request method (now aliased as _original_request) to perform the actual HTTP request
                response = _original_request(request, body, &block)
              ensure
                end_time = Time.now
                response ||= Net::HTTPResponse.new("1.1", "500", "Internal Server Error")
                response.instance_variable_set(:@start_time, start_time)
                response.instance_variable_set(:@end_time, end_time)
                response.define_singleton_method(:start_time) { @start_time }
                response.define_singleton_method(:end_time) { @end_time }

                Logger.log_response(self, response)
              end

              response
            end
          end
        end

        # Disables the logging by restoring the original Net::HTTP request method
        def disable
          ::Net::HTTP.class_eval do
            # Restore the original request method by aliasing it back from _original_request
            # This effectively removes the logging functionality and returns Net::HTTP to its original state
            alias_method(:request, :_original_request)
            remove_method(:_original_request)
          end
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
dev_suite-0.2.13 lib/dev_suite/request_logger/adapter/net_http.rb
dev_suite-0.2.12 lib/dev_suite/request_logger/adapter/net_http.rb
dev_suite-0.2.11 lib/dev_suite/request_logger/adapter/net_http.rb
dev_suite-0.2.10 lib/dev_suite/request_logger/adapter/net_http.rb
dev_suite-0.2.9 lib/dev_suite/request_logger/adapter/net_http.rb
dev_suite-0.2.8 lib/dev_suite/request_logger/adapter/net_http.rb