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.