A Net::HTTP response that has already been read raises an IOError when # 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 #, 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 #, acting just as if it had never been read.
# File lib/webmock/util/uri.rb, line 65
65: def self.encode_unsafe_chars_in_userinfo(userinfo)
66: Addressable::URI.encode_component(userinfo, Addressable::URI::CharacterClasses::USERINFO)
67: end
# File lib/webmock/util/uri.rb, line 26
26: def self.heuristic_parse(uri)
27: ADDRESSABLE_URIS[uri].dup
28: end
# File lib/webmock/util/uri.rb, line 30
30: def self.normalize_uri(uri)
31: return uri if uri.is_a?(Regexp)
32: uri = 'http://' + uri unless uri.match('^https?://') if uri.is_a?(String)
33: NORMALIZED_URIS[uri].dup
34: end
# File lib/webmock/util/uri.rb, line 57
57: def self.strip_default_port_from_uri_string(uri_string)
58: case uri_string
59: when %{^http://} then uri_string.sub(%{:80(/|$)}, '\1')
60: when %{^https://} then uri_string.sub(%{:443(/|$)}, '\1')
61: else uri_string
62: end
63: end
# File lib/webmock/util/uri.rb, line 36
36: def self.variations_of_uri_as_strings(uri_object)
37: normalized_uri = normalize_uri(uri_object.dup).freeze
38: uris = [ normalized_uri ]
39:
40: if normalized_uri.path == '/'
41: uris = uris_with_trailing_slash_and_without(uris)
42: end
43:
44: uris = uris_encoded_and_unencoded(uris)
45:
46: if normalized_uri.port == Addressable::URI.port_mapping[normalized_uri.scheme]
47: uris = uris_with_inferred_port_and_without(uris)
48: end
49:
50: if normalized_uri.scheme == "http"
51: uris = uris_with_scheme_and_without(uris)
52: end
53:
54: uris.map {|uri| uri.to_s.gsub(/^\/\//,'') }.uniq
55: end
# File lib/webmock/util/uri.rb, line 71
71: def self.sort_query_values(query_values)
72: Hash[*query_values.sort.inject([]) { |values, pair| values + pair}]
73: end
# File lib/webmock/util/uri.rb, line 79
79: def self.uris_encoded_and_unencoded(uris)
80: uris.map do |uri|
81: [ uri.to_s, Addressable::URI.unencode(uri, String).freeze ]
82: end.flatten
83: end
# File lib/webmock/util/uri.rb, line 75
75: def self.uris_with_inferred_port_and_without(uris)
76: uris.map { |uri| [ uri, uri.gsub(%{(:80)|(:443)}, "").freeze ] }.flatten
77: end
# File lib/webmock/webmock.rb, line 70
70: def after_request(options={}, &block)
71: CallbackRegistry.add_callback(options, block)
72: end
# File lib/webmock/webmock.rb, line 33
33: def allow_net_connect!
34: Config.instance.allow_net_connect = true
35: end
# File lib/webmock/webmock.rb, line 27
27: def assert_not_requested(method, uri, options = {}, &block)
28: request = RequestPattern.new(method, uri, options).with(&block)
29: verifier = RequestExecutionVerifier.new(request, options.delete(:times))
30: assertion_failure(verifier.negative_failure_message) unless verifier.does_not_match?
31: end
# File lib/webmock/webmock.rb, line 20
20: def assert_requested(method, uri, options = {}, &block)
21: expected_times_executed = options.delete(:times) || 1
22: request = RequestPattern.new(method, uri, options).with(&block)
23: verifier = RequestExecutionVerifier.new(request, expected_times_executed)
24: assertion_failure(verifier.failure_message) unless verifier.matches?
25: end
# File lib/webmock/webmock.rb, line 66
66: def assertion_failure(message)
67: raise message
68: end
# File lib/webmock/adapters/test_unit.rb, line 20
20: def assertion_failure(message)
21: raise AssertionFailedError.new(message)
22: end
# File lib/webmock/adapters/rspec.rb, line 27
27: def assertion_failure(message)
28: raise RSPEC_NAMESPACE::Expectations::ExpectationNotMetError.new(message)
29: end
# File lib/webmock/webmock.rb, line 37
37: def disable_net_connect!(options = {})
38: Config.instance.allow_net_connect = false
39: Config.instance.allow_localhost = options[:allow_localhost]
40: end
# File lib/webmock/webmock.rb, line 42
42: def net_connect_allowed?(uri = nil)
43: if uri.is_a?(String)
44: uri = WebMock::Util::URI.normalize_uri(uri)
45: end
46: Config.instance.allow_net_connect ||
47: (Config.instance.allow_localhost && uri.is_a?(Addressable::URI) && (uri.host == 'localhost' || uri.host == '127.0.0.1'))
48: end
# File lib/webmock/webmock.rb, line 50
50: def registered_request?(request_signature)
51: RequestRegistry.instance.registered_request?(request_signature)
52: end
# File lib/webmock/webmock.rb, line 16
16: def request(method, uri)
17: RequestPattern.new(method, uri)
18: end
# File lib/webmock/webmock.rb, line 62
62: def reset_callbacks
63: WebMock::CallbackRegistry.reset
64: end
# File lib/webmock/webmock.rb, line 58
58: def reset_webmock
59: WebMock::RequestRegistry.instance.reset_webmock
60: end
# File lib/webmock/webmock.rb, line 54
54: def response_for_request(request_signature, &block)
55: RequestRegistry.instance.response_for_request(request_signature, &block)
56: end
# File lib/webmock/webmock.rb, line 10
10: def stub_request(method, uri)
11: RequestRegistry.instance.register_request_stub(RequestStub.new(method, uri))
12: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.