Sha256: 85c5d097b7c354e083540b1357d8875c33b7fdba2912c655989170baf4656102

Contents?: true

Size: 1.29 KB

Versions: 82

Compression:

Stored size: 1.29 KB

Contents

module VCR
  # @private
  module Net
    # A Net::HTTP response that has already been read raises an IOError when #read_body
    # is called with a destination string or block.
    #
    # This causes a problem when VCR records a response--it reads the body before yielding
    # the response, and if the code that is consuming the HTTP requests uses #read_body, it
    # can cause an error.
    #
    # This is a bit of a hack, but it allows a Net::HTTP response to be "re-read"
    # after it has aleady been read.  This attemps to preserve the behavior of
    # #read_body, acting just as if it had never been read.
    # @private
    module HTTPResponse
      def self.extended(response)
        response.instance_variable_set(:@__read_body_previously_called, false)
      end

      def read_body(dest = nil, &block)
        return super if @__read_body_previously_called
        return @body if dest.nil? && block.nil?
        raise ArgumentError.new("both arg and block given for HTTP method") if dest && block

        if @body
          dest ||= ::Net::ReadAdapter.new(block)
          dest << @body
          @body = dest
        end
      ensure
        # allow subsequent calls to #read_body to proceed as normal, without our hack...
        @__read_body_previously_called = true
      end
    end
  end
end

Version data entries

82 entries across 82 versions & 10 rubygems

Version Path
docspring-3.0.0 vendor/bundle/ruby/3.3.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.16 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.15 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.14 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.13 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.12 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.11 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.10 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.9 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.8 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.7 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.6 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.5 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.4 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.3 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.2 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.1 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-2.0.0 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-1.142.3 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb
cloudsmith-api-1.120.3 vendor/bundle/ruby/2.6.0/gems/vcr-3.0.3/lib/vcr/extensions/net_http_response.rb