Files

WebMock

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.

Constants

AssertionFailedError

Public Class Methods

encode_unsafe_chars_in_userinfo(userinfo) click to toggle source
    # 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
heuristic_parse(uri) click to toggle source
    # File lib/webmock/util/uri.rb, line 26
26:       def self.heuristic_parse(uri)
27:         ADDRESSABLE_URIS[uri].dup
28:       end
normalize_uri(uri) click to toggle source
    # 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
strip_default_port_from_uri_string(uri_string) click to toggle source
    # 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
variations_of_uri_as_strings(uri_object) click to toggle source
    # 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
version() click to toggle source
   # File lib/webmock/webmock.rb, line 4
4:   def self.version
5:     open(File.join(File.dirname(__FILE__), '../../VERSION')) { |f|
6:       f.read.strip
7:     }
8:   end

Private Class Methods

sort_query_values(query_values) click to toggle source
    # 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
uris_encoded_and_unencoded(uris) click to toggle source
    # 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
uris_with_inferred_port_and_without(uris) click to toggle source
    # 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
uris_with_scheme_and_without(uris) click to toggle source
    # File lib/webmock/util/uri.rb, line 85
85:       def self.uris_with_scheme_and_without(uris)
86:         uris.map { |uri| [ uri, uri.gsub(%{^https?://},"").freeze ] }.flatten
87:       end
uris_with_trailing_slash_and_without(uris) click to toggle source
    # File lib/webmock/util/uri.rb, line 89
89:       def self.uris_with_trailing_slash_and_without(uris)
90:         uris = uris.map { |uri| [ uri, uri.omit(:path).freeze ] }.flatten
91:       end

Public Instance Methods

after_request(options={}, &block) click to toggle source
    # File lib/webmock/webmock.rb, line 70
70:   def after_request(options={}, &block)
71:     CallbackRegistry.add_callback(options, block)
72:   end
allow_net_connect!() click to toggle source
    # File lib/webmock/webmock.rb, line 33
33:   def allow_net_connect!
34:     Config.instance.allow_net_connect = true
35:   end
assert_not_requested(method, uri, options = {}, &block) click to toggle source
    # 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
assert_requested(method, uri, options = {}, &block) click to toggle source
    # 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
assertion_failure(message) click to toggle source
    # File lib/webmock/webmock.rb, line 66
66:   def assertion_failure(message)
67:     raise message
68:   end
assertion_failure(message) click to toggle source
    # File lib/webmock/adapters/test_unit.rb, line 20
20:   def assertion_failure(message)
21:     raise AssertionFailedError.new(message)
22:   end
assertion_failure(message) click to toggle source
    # File lib/webmock/adapters/rspec.rb, line 27
27:   def assertion_failure(message)
28:     raise RSPEC_NAMESPACE::Expectations::ExpectationNotMetError.new(message)
29:   end
disable_net_connect!(options = {}) click to toggle source
    # 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
net_connect_allowed?(uri = nil) click to toggle source
    # 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
registered_request?(request_signature) click to toggle source
    # File lib/webmock/webmock.rb, line 50
50:   def registered_request?(request_signature)
51:     RequestRegistry.instance.registered_request?(request_signature)
52:   end
request(method, uri) click to toggle source
    # File lib/webmock/webmock.rb, line 16
16:   def request(method, uri)
17:     RequestPattern.new(method, uri)
18:   end
reset_callbacks() click to toggle source
    # File lib/webmock/webmock.rb, line 62
62:   def reset_callbacks
63:     WebMock::CallbackRegistry.reset
64:   end
reset_webmock() click to toggle source
    # File lib/webmock/webmock.rb, line 58
58:   def reset_webmock
59:     WebMock::RequestRegistry.instance.reset_webmock
60:   end
response_for_request(request_signature, &block) click to toggle source
    # 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
stub_http_request(method, uri) click to toggle source
Alias for: stub_request
stub_request(method, uri) click to toggle source
    # 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
Also aliased as: stub_http_request

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.