webmock 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +21 -0
- data/LICENSE +281 -0
- data/README.md +170 -0
- data/Rakefile +54 -0
- data/VERSION +1 -0
- data/lib/webmock.rb +18 -0
- data/lib/webmock/adapters/rspec.rb +23 -0
- data/lib/webmock/adapters/rspec/matchers.rb +19 -0
- data/lib/webmock/adapters/rspec/request_profile_matcher.rb +37 -0
- data/lib/webmock/adapters/rspec/webmock_matcher.rb +45 -0
- data/lib/webmock/adapters/test_unit.rb +25 -0
- data/lib/webmock/config.rb +7 -0
- data/lib/webmock/errors.rb +5 -0
- data/lib/webmock/http_lib_adapters/net_http.rb +129 -0
- data/lib/webmock/request_execution_verifier.rb +22 -0
- data/lib/webmock/request_profile.rb +67 -0
- data/lib/webmock/request_registry.rb +47 -0
- data/lib/webmock/request_stub.rb +26 -0
- data/lib/webmock/response.rb +31 -0
- data/lib/webmock/url.rb +46 -0
- data/lib/webmock/util/hash_counter.rb +12 -0
- data/lib/webmock/utility.rb +65 -0
- data/lib/webmock/webmock.rb +58 -0
- data/spec/net_http_spec.rb +33 -0
- data/spec/other_net_http_libs_spec.rb +37 -0
- data/spec/request_execution_verifier_spec.rb +51 -0
- data/spec/request_profile_spec.rb +166 -0
- data/spec/request_registry_spec.rb +114 -0
- data/spec/request_stub_spec.rb +54 -0
- data/spec/response_spec.rb +59 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +58 -0
- data/spec/util/hash_counter_spec.rb +24 -0
- data/spec/utility_spec.rb +70 -0
- data/spec/vendor/right_http_connection-1.2.4/History.txt +59 -0
- data/spec/vendor/right_http_connection-1.2.4/Manifest.txt +7 -0
- data/spec/vendor/right_http_connection-1.2.4/README.txt +54 -0
- data/spec/vendor/right_http_connection-1.2.4/Rakefile +103 -0
- data/spec/vendor/right_http_connection-1.2.4/lib/net_fix.rb +160 -0
- data/spec/vendor/right_http_connection-1.2.4/lib/right_http_connection.rb +435 -0
- data/spec/vendor/right_http_connection-1.2.4/setup.rb +1585 -0
- data/spec/vendor/samuel-0.2.1/.document +5 -0
- data/spec/vendor/samuel-0.2.1/.gitignore +5 -0
- data/spec/vendor/samuel-0.2.1/LICENSE +20 -0
- data/spec/vendor/samuel-0.2.1/README.rdoc +70 -0
- data/spec/vendor/samuel-0.2.1/Rakefile +62 -0
- data/spec/vendor/samuel-0.2.1/VERSION +1 -0
- data/spec/vendor/samuel-0.2.1/lib/samuel.rb +52 -0
- data/spec/vendor/samuel-0.2.1/lib/samuel/net_http.rb +10 -0
- data/spec/vendor/samuel-0.2.1/lib/samuel/request.rb +96 -0
- data/spec/vendor/samuel-0.2.1/samuel.gemspec +69 -0
- data/spec/vendor/samuel-0.2.1/test/request_test.rb +193 -0
- data/spec/vendor/samuel-0.2.1/test/samuel_test.rb +42 -0
- data/spec/vendor/samuel-0.2.1/test/test_helper.rb +66 -0
- data/spec/vendor/samuel-0.2.1/test/thread_test.rb +32 -0
- data/spec/webmock_spec.rb +492 -0
- data/test/test_helper.rb +9 -0
- data/test/test_webmock.rb +56 -0
- metadata +144 -0
@@ -0,0 +1,114 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe RequestRegistry do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
RequestRegistry.instance.reset_webmock
|
7
|
+
@request_profile = RequestProfile.new(:get, "www.google.com")
|
8
|
+
@request_stub = RequestStub.new(:get, "www.google.com")
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "reset_webmock" do
|
12
|
+
before(:each) do
|
13
|
+
RequestRegistry.instance.register_request_stub(@request_stub)
|
14
|
+
RequestRegistry.instance.response_for_request(@request_profile)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should clean request stubs" do
|
18
|
+
RequestRegistry.instance.registered_request?(@request_profile).should == @request_stub
|
19
|
+
RequestRegistry.instance.reset_webmock
|
20
|
+
RequestRegistry.instance.registered_request?(@request_profile).should == nil
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should clean list of executed requests" do
|
24
|
+
RequestRegistry.instance.times_executed(@request_profile).should == 1
|
25
|
+
RequestRegistry.instance.reset_webmock
|
26
|
+
RequestRegistry.instance.times_executed(@request_profile).should == 0
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "registering and reporting registered requests" do
|
32
|
+
|
33
|
+
it "should return registered stub" do
|
34
|
+
RequestRegistry.instance.register_request_stub(@request_stub).should == @request_stub
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should report if request stub is not registered" do
|
38
|
+
RequestRegistry.instance.registered_request?(@request_profile).should == nil
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should register and report registered stib" do
|
42
|
+
RequestRegistry.instance.register_request_stub(@request_stub)
|
43
|
+
RequestRegistry.instance.registered_request?(@request_profile).should == @request_stub
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "response for request" do
|
50
|
+
|
51
|
+
it "should registered response for request profile" do
|
52
|
+
@request_stub.response = @response = Response.new
|
53
|
+
RequestRegistry.instance.register_request_stub(@request_stub)
|
54
|
+
RequestRegistry.instance.response_for_request(@request_profile).should == @response
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should report nothing if no response for request is registered" do
|
58
|
+
RequestRegistry.instance.response_for_request(@request_profile).should == nil
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should increase number of times request was executed" do
|
62
|
+
RequestRegistry.instance.times_executed(@request_profile).should == 0
|
63
|
+
RequestRegistry.instance.response_for_request(@request_profile)
|
64
|
+
RequestRegistry.instance.times_executed(@request_profile).should == 1
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should always return last registered matching response" do
|
68
|
+
@request_stub1 = RequestStub.new(:get, "www.google.com")
|
69
|
+
@request_stub1.response = @response1 = Response.new
|
70
|
+
@request_stub2 = RequestStub.new(:get, "www.google.com")
|
71
|
+
@request_stub2.response = @response2 = Response.new
|
72
|
+
@request_stub3 = RequestStub.new(:get, "www.google.org")
|
73
|
+
@request_stub3.response = @response3 = Response.new
|
74
|
+
RequestRegistry.instance.register_request_stub(@request_stub1)
|
75
|
+
RequestRegistry.instance.register_request_stub(@request_stub2)
|
76
|
+
RequestRegistry.instance.register_request_stub(@request_stub3)
|
77
|
+
RequestRegistry.instance.response_for_request(@request_profile).should == @response2
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "times executed" do
|
83
|
+
|
84
|
+
def times_executed(request_profile)
|
85
|
+
self.requested.hash.select { |executed_request_profile, times_executed|
|
86
|
+
executed_request_profile.match(request_profile)
|
87
|
+
}.inject(0) {|sum, (_, times_executed)| sum =+ times_executed }
|
88
|
+
end
|
89
|
+
|
90
|
+
before(:each) do
|
91
|
+
@request_stub1 = RequestStub.new(:get, "www.google.com")
|
92
|
+
@request_stub2 = RequestStub.new(:get, "www.google.net")
|
93
|
+
@request_stub3 = RequestStub.new(:get, "www.google.org")
|
94
|
+
RequestRegistry.instance.response_for_request(RequestProfile.new(:get, "www.google.com"))
|
95
|
+
RequestRegistry.instance.response_for_request(RequestProfile.new(:get, "www.google.com"))
|
96
|
+
RequestRegistry.instance.response_for_request(RequestProfile.new(:get, "www.google.org"))
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should report 0 if no request matching profile was requested" do
|
100
|
+
RequestRegistry.instance.times_executed(RequestProfile.new(:get, "www.google.net")).should == 0
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should report number of times matching profile was requested" do
|
104
|
+
RequestRegistry.instance.times_executed(RequestProfile.new(:get, "www.google.com")).should == 2
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should report number of times all matching profile were requested" do
|
108
|
+
RequestRegistry.instance.times_executed(RequestProfile.new(:get, /.*google.*/)).should == 3
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe RequestStub do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@request_stub = RequestStub.new(:get, "www.google.com")
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should have request profile with method and url" do
|
10
|
+
@request_stub.request_profile.method.should == :get
|
11
|
+
@request_stub.request_profile.uri.host.should == "www.google.com"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should have response" do
|
15
|
+
@request_stub.response.should be_a(WebMock::Response)
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "with" do
|
19
|
+
|
20
|
+
it "should assign body to request profile" do
|
21
|
+
@request_stub.with(:body => "abc")
|
22
|
+
@request_stub.request_profile.body.should == "abc"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should assign normalized headers to request profile" do
|
26
|
+
Utility.should_receive(:normalize_headers).with('A' => 'a').and_return('B' => 'b')
|
27
|
+
@request_stub.with(:headers => {'A' => 'a'})
|
28
|
+
@request_stub.request_profile.headers.should == {'B' => 'b'}
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "to_return" do
|
34
|
+
|
35
|
+
it "should assign response with provided options" do
|
36
|
+
@request_stub.to_return(:body => "abc", :status => 500)
|
37
|
+
@request_stub.response.body.should == "abc"
|
38
|
+
@request_stub.response.status.should == 500
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "to_raise" do
|
44
|
+
|
45
|
+
it "should assign response with exception to be thrown" do
|
46
|
+
@request_stub.to_raise(ArgumentError)
|
47
|
+
lambda {
|
48
|
+
@request_stub.response.raise_error_if_any
|
49
|
+
}.should raise_error(ArgumentError, "Exception from WebMock")
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe Response do
|
4
|
+
before(:each) do
|
5
|
+
@response = Response.new(:headers => {'A' => 'a'})
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should report normalized headers" do
|
9
|
+
Utility.should_receive(:normalize_headers).with('A' => 'a').and_return('B' => 'b')
|
10
|
+
@response.headers.should == {'B' => 'b'}
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "status" do
|
14
|
+
|
15
|
+
it "should be 200 by default" do
|
16
|
+
@response.status.should == 200
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should return assigned status" do
|
20
|
+
@response = Response.new(:status => 500)
|
21
|
+
@response.status.should == 500
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "raising error" do
|
27
|
+
|
28
|
+
it "should raise error if any assigned" do
|
29
|
+
@response = Response.new(:exception => ArgumentError)
|
30
|
+
lambda {
|
31
|
+
@response.raise_error_if_any
|
32
|
+
}.should raise_error(ArgumentError, "Exception from WebMock")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should not raise error if no error assigned" do
|
36
|
+
@response.raise_error_if_any
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "body" do
|
42
|
+
|
43
|
+
it "should return empty body by default" do
|
44
|
+
@response.body.should == ''
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should report body if assigned" do
|
48
|
+
@response = Response.new(:body => "abc")
|
49
|
+
@response.body.should == "abc"
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should report content of a file as body if provided" do
|
53
|
+
@response = Response.new(:body => __FILE__)
|
54
|
+
@response.body.should == File.new(__FILE__).read
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
require 'webmock'
|
4
|
+
require 'spec'
|
5
|
+
require 'spec/autorun'
|
6
|
+
|
7
|
+
include WebMock
|
8
|
+
|
9
|
+
def fail()
|
10
|
+
raise_error(Spec::Expectations::ExpectationNotMetError)
|
11
|
+
end
|
12
|
+
|
13
|
+
def fail_with(message)
|
14
|
+
raise_error(Spec::Expectations::ExpectationNotMetError,message)
|
15
|
+
end
|
16
|
+
|
17
|
+
class Proc
|
18
|
+
def should_pass
|
19
|
+
lambda { self.call }.should_not raise_error
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Sets several expectations that a real HTTP request makes it
|
24
|
+
# past WebMock to the socket layer. You can use this when you need to check
|
25
|
+
# that a request isn't handled by WebMock
|
26
|
+
#This solution is copied from FakeWeb project
|
27
|
+
def setup_expectations_for_real_request(options = {})
|
28
|
+
# Socket handling
|
29
|
+
if options[:port] == 443
|
30
|
+
socket = mock("SSLSocket")
|
31
|
+
OpenSSL::SSL::SSLSocket.should_receive(:===).with(socket).at_least(:once).and_return(true)
|
32
|
+
OpenSSL::SSL::SSLSocket.should_receive(:new).with(socket, instance_of(OpenSSL::SSL::SSLContext)).at_least(:once).and_return(socket)
|
33
|
+
socket.stub!(:sync_close=).and_return(true)
|
34
|
+
socket.should_receive(:connect).at_least(:once).with()
|
35
|
+
else
|
36
|
+
socket = mock("TCPSocket")
|
37
|
+
Socket.should_receive(:===).with(socket).at_least(:once).and_return(true)
|
38
|
+
end
|
39
|
+
|
40
|
+
TCPSocket.should_receive(:open).with(options[:host], options[:port]).at_least(:once).and_return(socket)
|
41
|
+
socket.stub!(:closed?).and_return(false)
|
42
|
+
socket.stub!(:close).and_return(true)
|
43
|
+
|
44
|
+
# Request/response handling
|
45
|
+
request_parts = ["#{options[:method]} #{options[:path]} HTTP/1.1", "Host: #{options[:host]}"]
|
46
|
+
socket.should_receive(:write).with(/#{request_parts[0]}.*#{request_parts[1]}.*/m).and_return(100)
|
47
|
+
|
48
|
+
socket.should_receive(:sysread).once.and_return("HTTP/1.1 #{options[:response_code]} #{options[:response_message]}\nContent-Length: #{options[:response_body].length}\n\n#{options[:response_body]}")
|
49
|
+
socket.should_receive(:sysread).any_number_of_times.and_raise(EOFError)
|
50
|
+
end
|
51
|
+
|
52
|
+
def setup_expectations_for_real_google_request(options = {})
|
53
|
+
defaults = { :host => "www.google.com", :port => 80, :method => "GET",
|
54
|
+
:path => "/",
|
55
|
+
:response_code => 200, :response_message => "OK",
|
56
|
+
:response_body => "<title>Google fake response</title>" }
|
57
|
+
setup_expectations_for_real_request(defaults.merge(options))
|
58
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe HashCounter do
|
4
|
+
|
5
|
+
it "should return 0 for non existing key" do
|
6
|
+
HashCounter.new.get(:abc).should == 0
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should increase the returned value on every put with the same key" do
|
10
|
+
counter =HashCounter.new
|
11
|
+
counter.put(:abc)
|
12
|
+
counter.get(:abc).should == 1
|
13
|
+
counter.put(:abc)
|
14
|
+
counter.get(:abc).should == 2
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should only increase value for given key provided to put" do
|
18
|
+
counter =HashCounter.new
|
19
|
+
counter.put(:abc)
|
20
|
+
counter.get(:abc).should == 1
|
21
|
+
counter.get(:def).should == 0
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe Utility do
|
4
|
+
|
5
|
+
it "should decode_userinfo_from_header handles basic auth" do
|
6
|
+
authorization_header = "Basic dXNlcm5hbWU6c2VjcmV0"
|
7
|
+
userinfo = Utility.decode_userinfo_from_header(authorization_header)
|
8
|
+
userinfo.should == "username:secret"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should encode unsafe chars in userinfo does not encode userinfo safe punctuation" do
|
12
|
+
userinfo = "user;&=+$,:secret"
|
13
|
+
userinfo.should == Utility.encode_unsafe_chars_in_userinfo(userinfo)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should encode unsafe chars in userinfo does not encode rfc 3986 unreserved characters" do
|
17
|
+
userinfo = "-.!~*'()abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789:secret"
|
18
|
+
userinfo.should == Utility.encode_unsafe_chars_in_userinfo(userinfo)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should encode unsafe chars in userinfo does encode other characters" do
|
22
|
+
userinfo, safe_userinfo = 'us#rn@me:sec//ret?"', 'us%23rn%40me:sec%2F%2Fret%3F%22'
|
23
|
+
safe_userinfo.should == Utility.encode_unsafe_chars_in_userinfo(userinfo)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should strip_default_port_from_uri strips 80 from http with path" do
|
27
|
+
uri = "http://example.com:80/foo/bar"
|
28
|
+
stripped_uri = Utility.strip_default_port_from_uri(uri)
|
29
|
+
stripped_uri.should == "http://example.com/foo/bar"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should strip_default_port_from_uri strips 80 from http without path" do
|
33
|
+
uri = "http://example.com:80"
|
34
|
+
stripped_uri = Utility.strip_default_port_from_uri(uri)
|
35
|
+
stripped_uri.should == "http://example.com"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should strip_default_port_from_uri strips 443 from https without path" do
|
39
|
+
uri = "https://example.com:443"
|
40
|
+
stripped_uri = Utility.strip_default_port_from_uri(uri)
|
41
|
+
stripped_uri.should == "https://example.com"
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should strip_default_port_from_uri strips 443 from https" do
|
45
|
+
uri = "https://example.com:443/foo/bar"
|
46
|
+
stripped_uri = Utility.strip_default_port_from_uri(uri)
|
47
|
+
stripped_uri.should == "https://example.com/foo/bar"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should strip_default_port_from_uri does not strip 8080 from http" do
|
51
|
+
uri = "http://example.com:8080/foo/bar"
|
52
|
+
uri.should == Utility.strip_default_port_from_uri(uri)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should strip_default_port_from_uri does not strip 443 from http" do
|
56
|
+
uri = "http://example.com:443/foo/bar"
|
57
|
+
uri.should == Utility.strip_default_port_from_uri(uri)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should strip_default_port_from_uri does not strip 80 from query string" do
|
61
|
+
uri = "http://example.com/?a=:80&b=c"
|
62
|
+
uri.should == Utility.strip_default_port_from_uri(uri)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should strip_default_port_from_uri does not modify strings that do not start with http or https" do
|
66
|
+
uri = "httpz://example.com:80/"
|
67
|
+
uri.should == Utility.strip_default_port_from_uri(uri)
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
== 0.0.1 2007-05-15
|
2
|
+
* 1 major enhancement:
|
3
|
+
* Initial release
|
4
|
+
|
5
|
+
== 0.1.2 2007-06-27
|
6
|
+
|
7
|
+
* No major changes.
|
8
|
+
|
9
|
+
== 0.1.3 2007-07-09
|
10
|
+
|
11
|
+
* No change.
|
12
|
+
|
13
|
+
== 0.1.4 2007-08-10
|
14
|
+
|
15
|
+
* r1442, todd, 2007-08-07 15:45:24
|
16
|
+
* # 373, Add support in right_http_connection for bailing out to a block while
|
17
|
+
reading the HTTP response (to support GET streaming...)
|
18
|
+
|
19
|
+
* r1411, todd, 2007-08-03 15:14:45
|
20
|
+
* # 373, Stream uploads (PUTs) if the source is a file, stream, or anything
|
21
|
+
read()-able
|
22
|
+
|
23
|
+
== 1.1.0 2007-08-15
|
24
|
+
Initial public release
|
25
|
+
|
26
|
+
== 1.2.0 2007-10-05
|
27
|
+
|
28
|
+
* r1867, konstantin, 2007-10-05 06:19:45
|
29
|
+
* # 220, (re)open connection to server if none exists or connection params
|
30
|
+
have changed
|
31
|
+
|
32
|
+
== 1.2.1
|
33
|
+
|
34
|
+
* r2648, konstantin, 01-24-08 11:12:00
|
35
|
+
* net_fix.rb moved from right_aws gem to fix the problem with uploading the streamable
|
36
|
+
objects to S3
|
37
|
+
|
38
|
+
* r2764, konstantin, 02-08-08 00:05:00 +03:00
|
39
|
+
* "RightAws: incompatible Net::HTTP monkey-patch" exception is raised if our net_fix
|
40
|
+
patch was overriden (by attachment_fu for example, to avoid this load attachment_fu
|
41
|
+
before loading the right_http_connection gem).
|
42
|
+
|
43
|
+
== 1.2.2
|
44
|
+
|
45
|
+
* r3524, konstantin, 2008-04-17 11:35:42 +0400
|
46
|
+
* Fixed a problem with incorrect error handling (connection retries always failed).
|
47
|
+
|
48
|
+
== 1.2.3
|
49
|
+
|
50
|
+
- Added support for setting retry & timeout parameters in the constructor
|
51
|
+
- Improve handling of data streams during upload: if there is a failure and a retry, reset
|
52
|
+
the seek pointer for the subsequent re-request
|
53
|
+
|
54
|
+
== 1.2.4
|
55
|
+
|
56
|
+
* r4984, konstantin, 2008-08-11 14:49:18 +0400
|
57
|
+
* fixed a bug: <NoMethodError: You have a nil object when you didn't expect it!
|
58
|
+
The error occurred while evaluating nil.body_stream>
|
59
|
+
|