webmock 1.6.4 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gemtest +0 -0
- data/.gitignore +3 -1
- data/.travis.yml +6 -0
- data/CHANGELOG.md +211 -118
- data/Gemfile +16 -1
- data/Guardfile +24 -0
- data/LICENSE +1 -1
- data/README.md +64 -15
- data/Rakefile +19 -6
- data/lib/webmock.rb +9 -4
- data/lib/webmock/api.rb +5 -4
- data/lib/webmock/assertion_failure.rb +1 -1
- data/lib/webmock/callback_registry.rb +1 -1
- data/lib/webmock/config.rb +2 -2
- data/lib/webmock/cucumber.rb +1 -1
- data/lib/webmock/errors.rb +17 -5
- data/lib/webmock/http_lib_adapters/{curb.rb → curb_adapter.rb} +79 -49
- data/lib/webmock/http_lib_adapters/{em_http_request.rb → em_http_request/em_http_request_0_x.rb} +20 -15
- data/lib/webmock/http_lib_adapters/em_http_request/em_http_request_1_x.rb +201 -0
- data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +11 -0
- data/lib/webmock/http_lib_adapters/http_lib_adapter.rb +7 -0
- data/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +19 -0
- data/lib/webmock/http_lib_adapters/{httpclient.rb → httpclient_adapter.rb} +35 -8
- data/lib/webmock/http_lib_adapters/net_http.rb +84 -25
- data/lib/webmock/http_lib_adapters/net_http_response.rb +17 -17
- data/lib/webmock/http_lib_adapters/patron_adapter.rb +124 -0
- data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +166 -0
- data/lib/webmock/minitest.rb +15 -0
- data/lib/webmock/rack_response.rb +52 -0
- data/lib/webmock/request_pattern.rb +4 -2
- data/lib/webmock/request_signature.rb +4 -0
- data/lib/webmock/request_stub.rb +35 -2
- data/lib/webmock/responses_sequence.rb +2 -2
- data/lib/webmock/rspec.rb +2 -2
- data/lib/webmock/rspec/matchers.rb +9 -4
- data/lib/webmock/rspec/matchers/webmock_matcher.rb +1 -1
- data/lib/webmock/stub_registry.rb +1 -1
- data/lib/webmock/stub_request_snippet.rb +14 -11
- data/lib/webmock/util/hash_keys_stringifier.rb +4 -4
- data/lib/webmock/util/headers.rb +3 -3
- data/lib/webmock/util/json.rb +54 -0
- data/lib/webmock/util/uri.rb +1 -1
- data/lib/webmock/version.rb +1 -1
- data/lib/webmock/webmock.rb +20 -3
- data/minitest/test_helper.rb +29 -0
- data/minitest/test_webmock.rb +6 -0
- data/minitest/webmock_spec.rb +30 -0
- data/spec/curb_spec.rb +26 -8
- data/spec/curb_spec_helper.rb +6 -6
- data/spec/em_http_request_spec.rb +95 -1
- data/spec/em_http_request_spec_helper.rb +16 -16
- data/spec/errors_spec.rb +19 -4
- data/spec/example_curl_output.txt +22 -22
- data/spec/http_lib_adapters/http_lib_adapter_registry_spec.rb +17 -0
- data/spec/http_lib_adapters/http_lib_adapter_spec.rb +12 -0
- data/spec/httpclient_spec.rb +1 -1
- data/spec/httpclient_spec_helper.rb +3 -38
- data/spec/my_rack_app.rb +18 -0
- data/spec/net_http_shared.rb +125 -0
- data/spec/net_http_spec.rb +27 -31
- data/spec/net_http_spec_helper.rb +4 -34
- data/spec/network_connection.rb +1 -1
- data/spec/patron_spec_helper.rb +4 -7
- data/spec/quality_spec.rb +60 -0
- data/spec/rack_response_spec.rb +33 -0
- data/spec/real_net_http_spec.rb +20 -0
- data/spec/request_execution_verifier_spec.rb +8 -8
- data/spec/request_pattern_spec.rb +3 -3
- data/spec/request_stub_spec.rb +19 -19
- data/spec/response_spec.rb +8 -8
- data/spec/spec_helper.rb +14 -11
- data/spec/stub_request_snippet_spec.rb +85 -37
- data/spec/support/webmock_server.rb +62 -0
- data/spec/typhoeus_hydra_spec.rb +53 -0
- data/spec/typhoeus_hydra_spec_helper.rb +50 -0
- data/spec/util/headers_spec.rb +5 -5
- data/spec/util/json_spec.rb +7 -0
- data/spec/util/uri_spec.rb +1 -1
- data/spec/vendor/addressable/lib/uri.rb +1 -0
- data/spec/vendor/crack/lib/crack.rb +1 -0
- data/spec/vendor/right_http_connection-1.2.4/History.txt +4 -4
- data/spec/vendor/right_http_connection-1.2.4/README.txt +4 -4
- data/spec/vendor/right_http_connection-1.2.4/Rakefile +3 -3
- data/spec/vendor/right_http_connection-1.2.4/lib/net_fix.rb +4 -4
- data/spec/vendor/right_http_connection-1.2.4/setup.rb +4 -4
- data/spec/webmock_shared.rb +375 -143
- data/spec/webmock_spec.rb +7 -0
- data/test/http_request.rb +24 -0
- data/test/shared_test.rb +47 -0
- data/test/test_helper.rb +6 -3
- data/test/test_webmock.rb +2 -67
- data/webmock.gemspec +8 -7
- metadata +153 -88
- data/lib/webmock/http_lib_adapters/patron.rb +0 -100
- data/spec/other_net_http_libs_spec.rb +0 -30
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
if defined?(Patron)
|
|
2
|
-
|
|
3
|
-
module Patron
|
|
4
|
-
class Session
|
|
5
|
-
|
|
6
|
-
def handle_request_with_webmock(req)
|
|
7
|
-
request_signature = build_request_signature(req)
|
|
8
|
-
|
|
9
|
-
WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
|
|
10
|
-
|
|
11
|
-
if WebMock::StubRegistry.instance.registered_request?(request_signature)
|
|
12
|
-
webmock_response = WebMock::StubRegistry.instance.response_for_request(request_signature)
|
|
13
|
-
handle_file_name(req, webmock_response)
|
|
14
|
-
res = build_patron_response(webmock_response)
|
|
15
|
-
WebMock::CallbackRegistry.invoke_callbacks(
|
|
16
|
-
{:lib => :patron}, request_signature, webmock_response)
|
|
17
|
-
res
|
|
18
|
-
elsif WebMock.net_connect_allowed?(request_signature.uri)
|
|
19
|
-
res = handle_request_without_webmock(req)
|
|
20
|
-
if WebMock::CallbackRegistry.any_callbacks?
|
|
21
|
-
webmock_response = build_webmock_response(res)
|
|
22
|
-
WebMock::CallbackRegistry.invoke_callbacks(
|
|
23
|
-
{:lib => :patron, :real_request => true}, request_signature,
|
|
24
|
-
webmock_response)
|
|
25
|
-
end
|
|
26
|
-
res
|
|
27
|
-
else
|
|
28
|
-
raise WebMock::NetConnectNotAllowedError.new(request_signature)
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
alias_method :handle_request_without_webmock, :handle_request
|
|
33
|
-
alias_method :handle_request, :handle_request_with_webmock
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
def handle_file_name(req, webmock_response)
|
|
38
|
-
if req.action == :get && req.file_name
|
|
39
|
-
begin
|
|
40
|
-
File.open(req.file_name, "w") do |f|
|
|
41
|
-
f.write webmock_response.body
|
|
42
|
-
end
|
|
43
|
-
rescue Errno::EACCES
|
|
44
|
-
raise ArgumentError.new("Unable to open specified file.")
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def build_request_signature(req)
|
|
50
|
-
uri = WebMock::Util::URI.heuristic_parse(req.url)
|
|
51
|
-
uri.path = uri.normalized_path.gsub("[^:]//","/")
|
|
52
|
-
uri.user = req.username
|
|
53
|
-
uri.password = req.password
|
|
54
|
-
|
|
55
|
-
if [:put, :post].include?(req.action)
|
|
56
|
-
if req.file_name
|
|
57
|
-
if !File.exist?(req.file_name) || !File.readable?(req.file_name)
|
|
58
|
-
raise ArgumentError.new("Unable to open specified file.")
|
|
59
|
-
end
|
|
60
|
-
request_body = File.read(req.file_name)
|
|
61
|
-
elsif req.upload_data
|
|
62
|
-
request_body = req.upload_data
|
|
63
|
-
else
|
|
64
|
-
raise ArgumentError.new("Must provide either data or a filename when doing a PUT or POST")
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
request_signature = WebMock::RequestSignature.new(
|
|
69
|
-
req.action,
|
|
70
|
-
uri.to_s,
|
|
71
|
-
:body => request_body,
|
|
72
|
-
:headers => req.headers
|
|
73
|
-
)
|
|
74
|
-
request_signature
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def build_patron_response(webmock_response)
|
|
78
|
-
raise Patron::TimeoutError if webmock_response.should_timeout
|
|
79
|
-
webmock_response.raise_error_if_any
|
|
80
|
-
res = Patron::Response.new
|
|
81
|
-
res.instance_variable_set(:@body, webmock_response.body)
|
|
82
|
-
res.instance_variable_set(:@status, webmock_response.status[0])
|
|
83
|
-
res.instance_variable_set(:@status_line, webmock_response.status[1])
|
|
84
|
-
res.instance_variable_set(:@headers, webmock_response.headers)
|
|
85
|
-
res
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def build_webmock_response(patron_response)
|
|
89
|
-
webmock_response = WebMock::Response.new
|
|
90
|
-
reason = patron_response.status_line.scan(%r(\AHTTP/(\d+\.\d+)\s+(\d\d\d)\s*([^\r\n]+)?\r?\z))[0][2]
|
|
91
|
-
webmock_response.status = [patron_response.status, reason]
|
|
92
|
-
webmock_response.body = patron_response.body
|
|
93
|
-
webmock_response.headers = patron_response.headers
|
|
94
|
-
webmock_response
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
|
|
3
|
-
describe "loading other Net::HTTP based libraries" do
|
|
4
|
-
|
|
5
|
-
def capture_output_from_requiring(libs, additional_code = "")
|
|
6
|
-
requires = libs.map { |lib| "require '#{lib}'" }
|
|
7
|
-
requires << " require 'addressable/uri'"
|
|
8
|
-
requires << " require 'crack'"
|
|
9
|
-
requires = requires.join("; ")
|
|
10
|
-
webmock_dir = "#{File.dirname(__FILE__)}/../lib"
|
|
11
|
-
vendor_dirs = Dir["#{File.dirname(__FILE__)}/vendor/*/lib"]
|
|
12
|
-
load_path_opts = vendor_dirs.unshift(webmock_dir).map { |dir| "-I#{dir}" }.join(" ")
|
|
13
|
-
|
|
14
|
-
# TODO: use the same Ruby executable that this test was invoked with
|
|
15
|
-
`ruby #{load_path_opts} -e "#{requires}; #{additional_code}" 2>&1 | cat`
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it "should requiring right http connection before webmock and then connecting does not print warning" do
|
|
19
|
-
additional_code = "Net::HTTP.start('example.com')"
|
|
20
|
-
output = capture_output_from_requiring %w(right_http_connection webmock), additional_code
|
|
21
|
-
output.should be_empty
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should requiring right http connection after webmock and then connecting prints warning" do
|
|
25
|
-
additional_code = "Net::HTTP.start('example.com')"
|
|
26
|
-
output = capture_output_from_requiring %w(webmock right_http_connection), additional_code
|
|
27
|
-
output.should match(%r(Warning: RightHttpConnection has to be required before WebMock is required !!!))
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
end
|