webmock 1.3.5 → 1.4.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/CHANGELOG.md +23 -0
- data/README.md +17 -20
- data/Rakefile +4 -3
- data/VERSION +1 -1
- data/lib/webmock.rb +5 -0
- data/lib/webmock/adapters/rspec.rb +12 -9
- data/lib/webmock/adapters/test_unit.rb +1 -6
- data/lib/webmock/api.rb +32 -0
- data/lib/webmock/assertion_failure.rb +13 -0
- data/lib/webmock/deprecation.rb +9 -0
- data/lib/webmock/http_lib_adapters/curb.rb +260 -0
- data/lib/webmock/http_lib_adapters/em_http_request.rb +2 -2
- data/lib/webmock/http_lib_adapters/httpclient.rb +4 -3
- data/lib/webmock/http_lib_adapters/net_http.rb +2 -2
- data/lib/webmock/http_lib_adapters/net_http_response.rb +9 -27
- data/lib/webmock/http_lib_adapters/patron.rb +2 -2
- data/lib/webmock/util/uri.rb +5 -0
- data/lib/webmock/webmock.rb +47 -41
- data/spec/curb_spec.rb +173 -0
- data/spec/curb_spec_helper.rb +137 -0
- data/spec/request_execution_verifier_spec.rb +9 -9
- data/spec/request_pattern_spec.rb +115 -115
- data/spec/request_registry_spec.rb +44 -42
- data/spec/request_signature_spec.rb +6 -6
- data/spec/request_stub_spec.rb +5 -5
- data/spec/response_spec.rb +33 -33
- data/spec/spec_helper.rb +2 -3
- data/spec/util/hash_counter_spec.rb +4 -4
- data/spec/util/headers_spec.rb +4 -4
- data/spec/webmock_spec.rb +67 -54
- data/test/test_helper.rb +2 -2
- data/webmock.gemspec +25 -14
- metadata +34 -29
@@ -30,8 +30,8 @@ if defined?(EventMachine::HttpRequest)
|
|
30
30
|
|
31
31
|
WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
|
32
32
|
|
33
|
-
if WebMock.registered_request?(request_signature)
|
34
|
-
webmock_response = WebMock.response_for_request(request_signature)
|
33
|
+
if WebMock::RequestRegistry.instance.registered_request?(request_signature)
|
34
|
+
webmock_response = WebMock::RequestRegistry.instance.response_for_request(request_signature)
|
35
35
|
WebMock::CallbackRegistry.invoke_callbacks(
|
36
36
|
{:lib => :em_http_request}, request_signature, webmock_response)
|
37
37
|
client = WebMockFakeHttpClient.new(nil)
|
@@ -15,8 +15,8 @@ if defined?(::HTTPClient)
|
|
15
15
|
|
16
16
|
WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
|
17
17
|
|
18
|
-
if WebMock.registered_request?(request_signature)
|
19
|
-
webmock_response = WebMock.response_for_request(request_signature)
|
18
|
+
if WebMock::RequestRegistry.instance.registered_request?(request_signature)
|
19
|
+
webmock_response = WebMock::RequestRegistry.instance.response_for_request(request_signature)
|
20
20
|
response = build_httpclient_response(webmock_response, stream, &block)
|
21
21
|
res = conn.push(response)
|
22
22
|
WebMock::CallbackRegistry.invoke_callbacks(
|
@@ -46,7 +46,8 @@ if defined?(::HTTPClient)
|
|
46
46
|
req = create_request(method, uri, query, body, extheader)
|
47
47
|
request_signature = build_request_signature(req)
|
48
48
|
|
49
|
-
if WebMock.registered_request?(request_signature) ||
|
49
|
+
if WebMock::RequestRegistry.instance.registered_request?(request_signature) ||
|
50
|
+
WebMock.net_connect_allowed?(request_signature.uri)
|
50
51
|
do_request_async_without_webmock(method, uri, query, body, extheader)
|
51
52
|
else
|
52
53
|
raise WebMock::NetConnectNotAllowedError.new(request_signature)
|
@@ -51,9 +51,9 @@ module Net #:nodoc: all
|
|
51
51
|
|
52
52
|
WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
|
53
53
|
|
54
|
-
if WebMock.registered_request?(request_signature)
|
54
|
+
if WebMock::RequestRegistry.instance.registered_request?(request_signature)
|
55
55
|
@socket = Net::HTTP.socket_type.new
|
56
|
-
webmock_response = WebMock.response_for_request(request_signature)
|
56
|
+
webmock_response = WebMock::RequestRegistry.instance.response_for_request(request_signature)
|
57
57
|
WebMock::CallbackRegistry.invoke_callbacks(
|
58
58
|
{:lib => :net_http}, request_signature, webmock_response)
|
59
59
|
build_net_http_response(webmock_response, &block)
|
@@ -14,36 +14,18 @@
|
|
14
14
|
module WebMock
|
15
15
|
module Net
|
16
16
|
module HTTPResponse
|
17
|
-
def self.extended(object)
|
18
|
-
body_object = object.instance_variable_get(:@body)
|
19
|
-
object.instance_variable_set(:@__orig_body__,
|
20
|
-
case body_object
|
21
|
-
when String then body_object
|
22
|
-
when nil then nil
|
23
|
-
else raise ArgumentError.new("Unexpected body object: #{body_object}")
|
24
|
-
end
|
25
|
-
)
|
26
|
-
end
|
27
|
-
|
28
17
|
def read_body(dest = nil, &block)
|
29
|
-
if @
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
@body
|
38
|
-
else
|
39
|
-
@body = @__orig_body__
|
40
|
-
end
|
41
|
-
else
|
42
|
-
super
|
43
|
-
end
|
18
|
+
return super if @__read_body_previously_called
|
19
|
+
return @body if dest.nil? && block.nil?
|
20
|
+
raise ArgumentError.new("both arg and block given for HTTP method") if dest && block
|
21
|
+
return nil if @body.nil?
|
22
|
+
|
23
|
+
dest ||= ::Net::ReadAdapter.new(block)
|
24
|
+
dest << @body
|
25
|
+
@body = dest
|
44
26
|
ensure
|
45
27
|
# allow subsequent calls to #read_body to proceed as normal, without our hack...
|
46
|
-
@
|
28
|
+
@__read_body_previously_called = true
|
47
29
|
end
|
48
30
|
end
|
49
31
|
end
|
@@ -8,8 +8,8 @@ if defined?(Patron)
|
|
8
8
|
|
9
9
|
WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
|
10
10
|
|
11
|
-
if WebMock.registered_request?(request_signature)
|
12
|
-
webmock_response = WebMock.response_for_request(request_signature)
|
11
|
+
if WebMock::RequestRegistry.instance.registered_request?(request_signature)
|
12
|
+
webmock_response = WebMock::RequestRegistry.instance.response_for_request(request_signature)
|
13
13
|
handle_file_name(req, webmock_response)
|
14
14
|
res = build_patron_response(webmock_response)
|
15
15
|
WebMock::CallbackRegistry.invoke_callbacks(
|
data/lib/webmock/util/uri.rb
CHANGED
@@ -66,6 +66,11 @@ module WebMock
|
|
66
66
|
Addressable::URI.encode_component(userinfo, Addressable::URI::CharacterClasses::USERINFO)
|
67
67
|
end
|
68
68
|
|
69
|
+
def self.is_uri_localhost?(uri)
|
70
|
+
uri.is_a?(Addressable::URI) &&
|
71
|
+
%w(localhost 127.0.0.1 0.0.0.0).include?(uri.host)
|
72
|
+
end
|
73
|
+
|
69
74
|
private
|
70
75
|
|
71
76
|
def self.sort_query_values(query_values)
|
data/lib/webmock/webmock.rb
CHANGED
@@ -1,76 +1,82 @@
|
|
1
1
|
module WebMock
|
2
|
-
extend self
|
3
2
|
|
4
|
-
def self.
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
3
|
+
def self.included(clazz)
|
4
|
+
WebMock::Deprecation.warning("include WebMock is deprecated. Please include WebMock::API instead")
|
5
|
+
if clazz.instance_methods.map(&:to_s).include?('request')
|
6
|
+
warn "WebMock#request was not included in #{clazz} to avoid name collision"
|
7
|
+
else
|
8
|
+
clazz.class_eval do
|
9
|
+
def request(method, uri)
|
10
|
+
WebMock::Deprecation.warning("WebMock#request is deprecated. Please use WebMock::API#a_request method instead")
|
11
|
+
WebMock.a_request(method, uri)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
12
15
|
end
|
13
16
|
|
14
|
-
|
15
|
-
|
16
|
-
def request(method, uri)
|
17
|
-
RequestPattern.new(method, uri)
|
18
|
-
end
|
17
|
+
include WebMock::API
|
18
|
+
extend WebMock::API
|
19
19
|
|
20
|
-
|
21
|
-
|
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?
|
20
|
+
class << self
|
21
|
+
alias :request :a_request
|
25
22
|
end
|
26
23
|
|
27
|
-
def
|
28
|
-
|
29
|
-
|
30
|
-
|
24
|
+
def self.version
|
25
|
+
open(File.join(File.dirname(__FILE__), '../../VERSION')) { |f|
|
26
|
+
f.read.strip
|
27
|
+
}
|
31
28
|
end
|
32
29
|
|
33
|
-
def allow_net_connect!
|
30
|
+
def self.allow_net_connect!
|
34
31
|
Config.instance.allow_net_connect = true
|
35
32
|
end
|
36
33
|
|
37
|
-
def disable_net_connect!(options = {})
|
34
|
+
def self.disable_net_connect!(options = {})
|
38
35
|
Config.instance.allow_net_connect = false
|
39
36
|
Config.instance.allow_localhost = options[:allow_localhost]
|
40
37
|
Config.instance.allow = options[:allow]
|
41
38
|
end
|
42
39
|
|
43
|
-
def net_connect_allowed?(uri = nil)
|
40
|
+
def self.net_connect_allowed?(uri = nil)
|
44
41
|
if uri.is_a?(String)
|
45
42
|
uri = WebMock::Util::URI.normalize_uri(uri)
|
46
43
|
end
|
47
44
|
Config.instance.allow_net_connect ||
|
48
|
-
(Config.instance.allow_localhost &&
|
45
|
+
(Config.instance.allow_localhost && WebMock::Util::URI.is_uri_localhost?(uri)) ||
|
49
46
|
Config.instance.allow && Config.instance.allow.include?(uri.host)
|
50
47
|
end
|
51
48
|
|
52
|
-
def
|
53
|
-
RequestRegistry.instance.
|
49
|
+
def self.reset_webmock
|
50
|
+
WebMock::RequestRegistry.instance.reset_webmock
|
54
51
|
end
|
55
52
|
|
56
|
-
def
|
57
|
-
|
53
|
+
def self.reset_callbacks
|
54
|
+
WebMock::CallbackRegistry.reset
|
58
55
|
end
|
59
56
|
|
60
|
-
def
|
61
|
-
|
57
|
+
def self.after_request(options={}, &block)
|
58
|
+
CallbackRegistry.add_callback(options, block)
|
62
59
|
end
|
63
60
|
|
64
|
-
def
|
65
|
-
|
61
|
+
def self.registered_request?(request_signature)
|
62
|
+
RequestRegistry.instance.registered_request?(request_signature)
|
66
63
|
end
|
67
64
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
65
|
+
%w(
|
66
|
+
allow_net_connect!
|
67
|
+
disable_net_connect!
|
68
|
+
net_connect_allowed?
|
69
|
+
reset_webmock
|
70
|
+
reset_callbacks
|
71
|
+
after_request
|
72
|
+
registered_request?
|
73
|
+
).each do |method|
|
74
|
+
self.class_eval(%Q(
|
75
|
+
def #{method}(*args, &block)
|
76
|
+
WebMock::Deprecation.warning("WebMock##{method} instance method is deprecated. Please use WebMock.#{method} class method instead")
|
77
|
+
WebMock.#{method}(*args, &block)
|
78
|
+
end
|
79
|
+
))
|
74
80
|
end
|
75
81
|
|
76
82
|
end
|
data/spec/curb_spec.rb
ADDED
@@ -0,0 +1,173 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
require 'webmock_spec'
|
3
|
+
|
4
|
+
unless RUBY_PLATFORM =~ /java/
|
5
|
+
require 'curb_spec_helper'
|
6
|
+
|
7
|
+
describe "Curb", :shared => true do
|
8
|
+
include CurbSpecHelper
|
9
|
+
|
10
|
+
it_should_behave_like "WebMock"
|
11
|
+
|
12
|
+
describe "when doing PUTs" do
|
13
|
+
it "should stub them" do
|
14
|
+
stub_http_request(:put, "www.example.com").with(:body => "01234")
|
15
|
+
http_request(:put, "http://www.example.com", :body => "01234").
|
16
|
+
status.should == "200"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "Curb features" do
|
22
|
+
before(:each) do
|
23
|
+
WebMock.disable_net_connect!
|
24
|
+
WebMock::RequestRegistry.instance.reset_webmock
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "callbacks" do
|
28
|
+
before(:each) do
|
29
|
+
@curl = Curl::Easy.new
|
30
|
+
@curl.url = "http://example.com"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should call on_success with 2xx response" do
|
34
|
+
body = "on_success fired"
|
35
|
+
stub_request(:any, "example.com").to_return(:body => body)
|
36
|
+
|
37
|
+
test = nil
|
38
|
+
@curl.on_success do |c|
|
39
|
+
test = c.body_str
|
40
|
+
end
|
41
|
+
@curl.http_get
|
42
|
+
test.should == body
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should call on_failure with 5xx response" do
|
46
|
+
response_code = 599
|
47
|
+
stub_request(:any, "example.com").
|
48
|
+
to_return(:status => [response_code, "Server On Fire"])
|
49
|
+
|
50
|
+
test = nil
|
51
|
+
@curl.on_failure do |c, code|
|
52
|
+
test = code
|
53
|
+
end
|
54
|
+
@curl.http_get
|
55
|
+
test.should == response_code
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should call on_body when response body is read" do
|
59
|
+
body = "on_body fired"
|
60
|
+
stub_request(:any, "example.com").
|
61
|
+
to_return(:body => body)
|
62
|
+
|
63
|
+
test = nil
|
64
|
+
@curl.on_body do |data|
|
65
|
+
test = data
|
66
|
+
end
|
67
|
+
@curl.http_get
|
68
|
+
test.should == body
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should call on_header when response headers are read" do
|
72
|
+
stub_request(:any, "example.com").
|
73
|
+
to_return(:headers => {:one => 1})
|
74
|
+
|
75
|
+
test = nil
|
76
|
+
@curl.on_header do |data|
|
77
|
+
test = data
|
78
|
+
end
|
79
|
+
@curl.http_get
|
80
|
+
test.should match /One: 1/
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should call on_complete when request is complete" do
|
84
|
+
body = "on_complete fired"
|
85
|
+
stub_request(:any, "example.com").to_return(:body => body)
|
86
|
+
|
87
|
+
test = nil
|
88
|
+
@curl.on_complete do |curl|
|
89
|
+
test = curl.body_str
|
90
|
+
end
|
91
|
+
@curl.http_get
|
92
|
+
test.should == body
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should call on_progress when portion of response body is read" do
|
96
|
+
stub_request(:any, "example.com").to_return(:body => "01234")
|
97
|
+
|
98
|
+
test = nil
|
99
|
+
@curl.on_progress do |*args|
|
100
|
+
args.length.should == 4
|
101
|
+
args.each {|arg| arg.is_a?(Float).should == true }
|
102
|
+
test = true
|
103
|
+
end
|
104
|
+
@curl.http_get
|
105
|
+
test.should == true
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should call callbacks in correct order on successful request" do
|
109
|
+
stub_request(:any, "example.com")
|
110
|
+
order = []
|
111
|
+
@curl.on_success {|*args| order << :on_success }
|
112
|
+
@curl.on_failure {|*args| order << :on_failure }
|
113
|
+
@curl.on_header {|*args| order << :on_header }
|
114
|
+
@curl.on_body {|*args| order << :on_body }
|
115
|
+
@curl.on_complete {|*args| order << :on_complete }
|
116
|
+
@curl.on_progress {|*args| order << :on_progress }
|
117
|
+
@curl.http_get
|
118
|
+
|
119
|
+
order.should == [:on_progress,:on_header,:on_body,:on_complete,:on_success]
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should call callbacks in correct order on successful request" do
|
123
|
+
stub_request(:any, "example.com").to_return(:status => [500, ""])
|
124
|
+
order = []
|
125
|
+
@curl.on_success {|*args| order << :on_success }
|
126
|
+
@curl.on_failure {|*args| order << :on_failure }
|
127
|
+
@curl.on_header {|*args| order << :on_header }
|
128
|
+
@curl.on_body {|*args| order << :on_body }
|
129
|
+
@curl.on_complete {|*args| order << :on_complete }
|
130
|
+
@curl.on_progress {|*args| order << :on_progress }
|
131
|
+
@curl.http_get
|
132
|
+
|
133
|
+
order.should == [:on_progress,:on_header,:on_body,:on_complete,:on_failure]
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe "Webmock with Curb" do
|
139
|
+
describe "using #http for requests" do
|
140
|
+
it_should_behave_like "Curb"
|
141
|
+
include CurbSpecHelper::DynamicHttp
|
142
|
+
|
143
|
+
it "should work with uppercase arguments" do
|
144
|
+
stub_request(:get, "www.example.com").to_return(:body => "abc")
|
145
|
+
|
146
|
+
c = Curl::Easy.new
|
147
|
+
c.url = "http://www.example.com"
|
148
|
+
c.http(:GET)
|
149
|
+
c.body_str.should == "abc"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe "using #http_* methods for requests" do
|
154
|
+
it_should_behave_like "Curb"
|
155
|
+
include CurbSpecHelper::NamedHttp
|
156
|
+
end
|
157
|
+
|
158
|
+
describe "using #perform for requests" do
|
159
|
+
it_should_behave_like "Curb"
|
160
|
+
include CurbSpecHelper::Perform
|
161
|
+
end
|
162
|
+
|
163
|
+
describe "using .http_* methods for requests" do
|
164
|
+
it_should_behave_like "Curb"
|
165
|
+
include CurbSpecHelper::ClassNamedHttp
|
166
|
+
end
|
167
|
+
|
168
|
+
describe "using .perform for requests" do
|
169
|
+
it_should_behave_like "Curb"
|
170
|
+
include CurbSpecHelper::ClassPerform
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
module CurbSpecHelper
|
2
|
+
def http_request(method, uri, options = {}, &block)
|
3
|
+
uri = Addressable::URI.heuristic_parse(uri)
|
4
|
+
body = options[:body]
|
5
|
+
|
6
|
+
curl = curb_http_request(uri, method, body, options)
|
7
|
+
|
8
|
+
status, response_headers = Curl::Easy::WebmockHelper.parse_header_string(curl.header_str)
|
9
|
+
|
10
|
+
OpenStruct.new(
|
11
|
+
:body => curl.body_str,
|
12
|
+
:headers => WebMock::Util::Headers.normalize_headers(response_headers),
|
13
|
+
:status => curl.response_code.to_s,
|
14
|
+
:message => status
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
def setup_request(uri, curl, options={})
|
19
|
+
curl ||= Curl::Easy.new
|
20
|
+
curl.url = uri.omit(:userinfo).to_s
|
21
|
+
curl.username = uri.user
|
22
|
+
curl.password = uri.password
|
23
|
+
curl.timeout = 10
|
24
|
+
|
25
|
+
if headers = options[:headers]
|
26
|
+
headers.each {|k,v| curl.headers[k] = v }
|
27
|
+
end
|
28
|
+
|
29
|
+
curl
|
30
|
+
end
|
31
|
+
|
32
|
+
def default_client_request_headers(request_method = nil, has_body = false)
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
|
36
|
+
def client_timeout_exception_class
|
37
|
+
Curl::Err::TimeoutError
|
38
|
+
end
|
39
|
+
|
40
|
+
def connection_refused_exception_class
|
41
|
+
Curl::Err::ConnectionFailedError
|
42
|
+
end
|
43
|
+
|
44
|
+
def setup_expectations_for_real_request(options = {})
|
45
|
+
end
|
46
|
+
|
47
|
+
def http_library
|
48
|
+
:curb
|
49
|
+
end
|
50
|
+
|
51
|
+
module DynamicHttp
|
52
|
+
def curb_http_request(uri, method, body, options)
|
53
|
+
curl = setup_request(uri, nil, options)
|
54
|
+
|
55
|
+
case method
|
56
|
+
when :post
|
57
|
+
curl.post_body = body
|
58
|
+
when :put
|
59
|
+
curl.put_data = body
|
60
|
+
end
|
61
|
+
|
62
|
+
curl.http(method)
|
63
|
+
curl
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
module NamedHttp
|
68
|
+
def curb_http_request(uri, method, body, options)
|
69
|
+
curl = setup_request(uri, nil, options)
|
70
|
+
|
71
|
+
case method
|
72
|
+
when :put, :post
|
73
|
+
curl.send( "http_#{method}", body )
|
74
|
+
else
|
75
|
+
curl.send( "http_#{method}" )
|
76
|
+
end
|
77
|
+
curl
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
module Perform
|
82
|
+
def curb_http_request(uri, method, body, options)
|
83
|
+
curl = setup_request(uri, nil, options)
|
84
|
+
|
85
|
+
case method
|
86
|
+
when :post
|
87
|
+
curl.post_body = body
|
88
|
+
when :put
|
89
|
+
curl.put_data = body
|
90
|
+
when :head
|
91
|
+
curl.head = true
|
92
|
+
when :delete
|
93
|
+
curl.delete = true
|
94
|
+
end
|
95
|
+
|
96
|
+
curl.perform
|
97
|
+
curl
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
module ClassNamedHttp
|
102
|
+
def curb_http_request(uri, method, body, options)
|
103
|
+
args = ["http_#{method}", uri]
|
104
|
+
args << body if method == :post || method == :put
|
105
|
+
|
106
|
+
c = Curl::Easy.send(*args) do |curl|
|
107
|
+
setup_request(uri, curl, options)
|
108
|
+
end
|
109
|
+
|
110
|
+
c
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
module ClassPerform
|
115
|
+
def curb_http_request(uri, method, body, options)
|
116
|
+
args = ["http_#{method}", uri]
|
117
|
+
args << body if method == :post || method == :put
|
118
|
+
|
119
|
+
c = Curl::Easy.send(*args) do |curl|
|
120
|
+
setup_request(uri, curl, options)
|
121
|
+
|
122
|
+
case method
|
123
|
+
when :post
|
124
|
+
curl.post_body = body
|
125
|
+
when :put
|
126
|
+
curl.put_data = body
|
127
|
+
when :head
|
128
|
+
curl.head = true
|
129
|
+
when :delete
|
130
|
+
curl.delete = true
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
c
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|