webmock 1.7.5 → 1.7.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec-tm +2 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile +2 -2
- data/README.md +1 -0
- data/Rakefile +3 -3
- data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +11 -4
- data/lib/webmock/version.rb +1 -1
- data/spec/{curb_spec.rb → acceptance/curb/curb_spec.rb} +9 -9
- data/spec/{curb_spec_helper.rb → acceptance/curb/curb_spec_helper.rb} +0 -0
- data/spec/{em_http_request_spec.rb → acceptance/em_http_request/em_http_request_spec.rb} +13 -13
- data/spec/{em_http_request_spec_helper.rb → acceptance/em_http_request/em_http_request_spec_helper.rb} +0 -0
- data/spec/acceptance/httpclient/httpclient_spec.rb +67 -0
- data/spec/{httpclient_spec_helper.rb → acceptance/httpclient/httpclient_spec_helper.rb} +0 -0
- data/spec/{net_http_shared.rb → acceptance/net_http/net_http_shared.rb} +0 -0
- data/spec/{net_http_spec.rb → acceptance/net_http/net_http_spec.rb} +6 -6
- data/spec/{net_http_spec_helper.rb → acceptance/net_http/net_http_spec_helper.rb} +0 -0
- data/spec/{real_net_http_spec.rb → acceptance/net_http/real_net_http_spec.rb} +1 -1
- data/spec/{patron_spec.rb → acceptance/patron/patron_spec.rb} +12 -12
- data/spec/{patron_spec_helper.rb → acceptance/patron/patron_spec_helper.rb} +0 -0
- data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +142 -0
- data/spec/acceptance/shared/callbacks.rb +130 -0
- data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +96 -0
- data/spec/acceptance/shared/precedence_of_stubs.rb +15 -0
- data/spec/acceptance/shared/request_expectations.rb +620 -0
- data/spec/acceptance/shared/returning_declared_responses.rb +377 -0
- data/spec/acceptance/shared/stubbing_requests.rb +314 -0
- data/spec/{typhoeus_hydra_spec.rb → acceptance/typhoeus/typhoeus_hydra_spec.rb} +5 -5
- data/spec/{typhoeus_hydra_spec_helper.rb → acceptance/typhoeus/typhoeus_hydra_spec_helper.rb} +0 -0
- data/spec/acceptance/webmock_shared.rb +38 -0
- data/spec/spec_helper.rb +4 -2
- data/spec/{example_curl_output.txt → support/example_curl_output.txt} +0 -0
- data/spec/{my_rack_app.rb → support/my_rack_app.rb} +0 -0
- data/spec/{network_connection.rb → support/network_connection.rb} +0 -0
- data/spec/{errors_spec.rb → unit/errors_spec.rb} +1 -1
- data/spec/{http_lib_adapters → unit/http_lib_adapters}/http_lib_adapter_registry_spec.rb +1 -1
- data/spec/{http_lib_adapters → unit/http_lib_adapters}/http_lib_adapter_spec.rb +1 -1
- data/spec/{rack_response_spec.rb → unit/rack_response_spec.rb} +1 -1
- data/spec/{request_execution_verifier_spec.rb → unit/request_execution_verifier_spec.rb} +1 -1
- data/spec/{request_pattern_spec.rb → unit/request_pattern_spec.rb} +1 -1
- data/spec/{request_registry_spec.rb → unit/request_registry_spec.rb} +1 -1
- data/spec/{request_signature_spec.rb → unit/request_signature_spec.rb} +1 -1
- data/spec/{request_stub_spec.rb → unit/request_stub_spec.rb} +1 -1
- data/spec/{response_spec.rb → unit/response_spec.rb} +4 -4
- data/spec/{stub_registry_spec.rb → unit/stub_registry_spec.rb} +1 -1
- data/spec/{stub_request_snippet_spec.rb → unit/stub_request_snippet_spec.rb} +1 -1
- data/spec/{util → unit/util}/hash_counter_spec.rb +1 -1
- data/spec/{util → unit/util}/hash_keys_stringifier_spec.rb +1 -1
- data/spec/{util → unit/util}/headers_spec.rb +1 -1
- data/spec/{util → unit/util}/json_spec.rb +1 -1
- data/spec/{util → unit/util}/uri_spec.rb +1 -1
- data/spec/{webmock_spec.rb → unit/webmock_spec.rb} +1 -1
- data/webmock.gemspec +1 -1
- metadata +111 -116
- data/spec/httpclient_spec.rb +0 -43
- data/spec/vendor/addressable/lib/addressable/uri.rb +0 -8
- data/spec/vendor/addressable/lib/uri.rb +0 -1
- data/spec/vendor/crack/lib/crack.rb +0 -1
- data/spec/vendor/right_http_connection-1.2.4/History.txt +0 -59
- data/spec/vendor/right_http_connection-1.2.4/Manifest.txt +0 -7
- data/spec/vendor/right_http_connection-1.2.4/README.txt +0 -54
- data/spec/vendor/right_http_connection-1.2.4/Rakefile +0 -103
- data/spec/vendor/right_http_connection-1.2.4/lib/net_fix.rb +0 -160
- data/spec/vendor/right_http_connection-1.2.4/lib/right_http_connection.rb +0 -435
- data/spec/vendor/right_http_connection-1.2.4/setup.rb +0 -1585
- data/spec/webmock_shared.rb +0 -1770
data/spec/httpclient_spec.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
-
require 'webmock_shared'
|
3
|
-
require 'ostruct'
|
4
|
-
|
5
|
-
require 'httpclient_spec_helper'
|
6
|
-
|
7
|
-
describe "Webmock with HTTPClient" do
|
8
|
-
include HTTPClientSpecHelper
|
9
|
-
|
10
|
-
before(:each) do
|
11
|
-
HTTPClientSpecHelper.async_mode = false
|
12
|
-
end
|
13
|
-
|
14
|
-
it_should_behave_like "WebMock"
|
15
|
-
|
16
|
-
it "should yield block on response if block provided" do
|
17
|
-
stub_http_request(:get, "www.example.com").to_return(:body => "abc")
|
18
|
-
response_body = ""
|
19
|
-
http_request(:get, "http://www.example.com/") do |body|
|
20
|
-
response_body = body
|
21
|
-
end
|
22
|
-
response_body.should == "abc"
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should match requests if headers are the same but in different order" do
|
26
|
-
stub_http_request(:get, "www.example.com").with(:headers => {"a" => ["b", "c"]} )
|
27
|
-
http_request(
|
28
|
-
:get, "http://www.example.com/",
|
29
|
-
:headers => {"a" => ["c", "b"]}).status.should == "200"
|
30
|
-
end
|
31
|
-
|
32
|
-
|
33
|
-
describe "async requests" do
|
34
|
-
|
35
|
-
before(:each) do
|
36
|
-
HTTPClientSpecHelper.async_mode = true
|
37
|
-
end
|
38
|
-
|
39
|
-
it_should_behave_like "WebMock"
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
|
@@ -1 +0,0 @@
|
|
1
|
-
|
@@ -1,59 +0,0 @@
|
|
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
|
-
|
@@ -1,54 +0,0 @@
|
|
1
|
-
RightScale::HttpConnection
|
2
|
-
by RightScale, Inc.
|
3
|
-
www.RightScale.com
|
4
|
-
|
5
|
-
== DESCRIPTION:
|
6
|
-
|
7
|
-
Rightscale::HttpConnection is a robust HTTP/S library. It implements a retry
|
8
|
-
algorithm for low-level network errors.
|
9
|
-
|
10
|
-
== FEATURES:
|
11
|
-
|
12
|
-
- provides put/get streaming
|
13
|
-
- does configurable retries on connect and read timeouts, DNS failures, etc.
|
14
|
-
- HTTPS certificate checking
|
15
|
-
|
16
|
-
== SYNOPSIS:
|
17
|
-
|
18
|
-
|
19
|
-
== REQUIREMENTS:
|
20
|
-
|
21
|
-
- 2/11/08: If you use RightScale::HttpConnection in conjunction with attachment_fu, the
|
22
|
-
HttpConnection gem must be included (using the require statement) AFTER
|
23
|
-
attachment_fu.
|
24
|
-
This is due to a conflict between the HttpConnection gem and another
|
25
|
-
gem required by attachment_fu.
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
== INSTALL:
|
30
|
-
|
31
|
-
sudo gem install right_http_connection
|
32
|
-
|
33
|
-
== LICENSE:
|
34
|
-
|
35
|
-
Copyright (c) 2007-2008 RightScale, Inc.
|
36
|
-
|
37
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
38
|
-
a copy of this software and associated documentation files (the
|
39
|
-
'Software'), to deal in the Software without restriction, including
|
40
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
41
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
42
|
-
permit persons to whom the Software is furnished to do so, subject to
|
43
|
-
the following conditions:
|
44
|
-
|
45
|
-
The above copyright notice and this permission notice shall be
|
46
|
-
included in all copies or substantial portions of the Software.
|
47
|
-
|
48
|
-
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
49
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
50
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
51
|
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
52
|
-
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
53
|
-
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
54
|
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -1,103 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'rake'
|
3
|
-
require 'rake/clean'
|
4
|
-
require 'rake/testtask'
|
5
|
-
require 'rake/packagetask'
|
6
|
-
require 'rake/gempackagetask'
|
7
|
-
require 'rake/rdoctask'
|
8
|
-
require 'rake/contrib/rubyforgepublisher'
|
9
|
-
require 'fileutils'
|
10
|
-
require 'hoe'
|
11
|
-
include FileUtils
|
12
|
-
require File.join(File.dirname(__FILE__), 'lib', 'right_http_connection')
|
13
|
-
|
14
|
-
AUTHOR = 'RightScale' # can also be an array of Authors
|
15
|
-
EMAIL = "rubygems@rightscale.com"
|
16
|
-
DESCRIPTION = "RightScale's robust HTTP/S connection module"
|
17
|
-
GEM_NAME = 'right_http_connection' # what ppl will type to install your gem
|
18
|
-
RUBYFORGE_PROJECT = 'rightscale' # The unix name for your project
|
19
|
-
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
20
|
-
DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
|
21
|
-
|
22
|
-
NAME = "right_http_connection"
|
23
|
-
REV = nil # UNCOMMENT IF REQUIRED: File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
|
24
|
-
VERS = RightHttpConnection::VERSION::STRING + (REV ? ".#{REV}" : "")
|
25
|
-
CLEAN.include ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store']
|
26
|
-
RDOC_OPTS = ['--quiet', '--title', 'right_http_connection documentation',
|
27
|
-
"--opname", "index.html",
|
28
|
-
"--line-numbers",
|
29
|
-
"--main", "README",
|
30
|
-
"--inline-source"]
|
31
|
-
|
32
|
-
# Suppress Hoe's self-inclusion as a dependency for our Gem. This also keeps
|
33
|
-
# Rake & rubyforge out of the dependency list. Users must manually install
|
34
|
-
# these gems to run tests, etc.
|
35
|
-
# TRB 2/19/09: also do this for the extra_dev_deps array present in newer hoes.
|
36
|
-
# Older versions of RubyGems will try to install developer-dependencies as
|
37
|
-
# required runtime dependencies....
|
38
|
-
class Hoe
|
39
|
-
def extra_deps
|
40
|
-
@extra_deps.reject do |x|
|
41
|
-
Array(x).first == 'hoe'
|
42
|
-
end
|
43
|
-
end
|
44
|
-
def extra_dev_deps
|
45
|
-
@extra_dev_deps.reject do |x|
|
46
|
-
Array(x).first == 'hoe'
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
# Generate all the Rake tasks
|
52
|
-
# Run 'rake -T' to see list of generated tasks (from gem root directory)
|
53
|
-
hoe = Hoe.new(GEM_NAME, VERS) do |p|
|
54
|
-
p.author = AUTHOR
|
55
|
-
p.description = DESCRIPTION
|
56
|
-
p.email = EMAIL
|
57
|
-
p.summary = DESCRIPTION
|
58
|
-
p.url = HOMEPATH
|
59
|
-
p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
|
60
|
-
p.test_globs = ["test/**/test_*.rb"]
|
61
|
-
p.clean_globs = CLEAN #An array of file patterns to delete on clean.
|
62
|
-
p.remote_rdoc_dir = "right_http_gem_doc"
|
63
|
-
|
64
|
-
# == Optional
|
65
|
-
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
66
|
-
#p.extra_deps = [] # An array of rubygem dependencies [name, version], e.g. [ ['active_support', '>= 1.3.1'] ]
|
67
|
-
#p.spec_extras = {} # A hash of extra values to set in the gemspec.
|
68
|
-
end
|
69
|
-
|
70
|
-
|
71
|
-
desc 'Generate website files'
|
72
|
-
task :website_generate do
|
73
|
-
Dir['website/**/*.txt'].each do |txt|
|
74
|
-
sh %{ ruby scripts/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
desc 'Upload website files to rubyforge'
|
79
|
-
task :website_upload do
|
80
|
-
config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml")))
|
81
|
-
host = "#{config["username"]}@rubyforge.org"
|
82
|
-
remote_dir = "/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/"
|
83
|
-
# remote_dir = "/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
|
84
|
-
local_dir = 'website'
|
85
|
-
sh %{rsync -av #{local_dir}/ #{host}:#{remote_dir}}
|
86
|
-
end
|
87
|
-
|
88
|
-
desc 'Generate and upload website files'
|
89
|
-
task :website => [:website_generate, :website_upload]
|
90
|
-
|
91
|
-
desc 'Release the website and new gem version'
|
92
|
-
task :deploy => [:check_version, :website, :release]
|
93
|
-
|
94
|
-
task :check_version do
|
95
|
-
unless ENV['VERSION']
|
96
|
-
puts 'Must pass a VERSION=x.y.z release version'
|
97
|
-
exit
|
98
|
-
end
|
99
|
-
unless ENV['VERSION'] == VERS
|
100
|
-
puts "Please update your version.rb to match the release version, currently #{VERS}"
|
101
|
-
exit
|
102
|
-
end
|
103
|
-
end
|
@@ -1,160 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (c) 2008 RightScale Inc
|
3
|
-
#
|
4
|
-
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
-
# a copy of this software and associated documentation files (the
|
6
|
-
# "Software"), to deal in the Software without restriction, including
|
7
|
-
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
-
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
-
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
-
# the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be
|
13
|
-
# included in all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
-
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
-
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
-
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
-
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
-
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
-
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
-
#
|
23
|
-
#
|
24
|
-
|
25
|
-
# Net::HTTP and Net::HTTPGenericRequest fixes to support 100-continue on
|
26
|
-
# POST and PUT. The request must have 'expect' field set to '100-continue'.
|
27
|
-
|
28
|
-
|
29
|
-
module Net
|
30
|
-
|
31
|
-
class BufferedIO #:nodoc:
|
32
|
-
# Monkey-patch Net::BufferedIO to read > 1024 bytes from the socket at a time
|
33
|
-
|
34
|
-
# Default size (in bytes) of the max read from a socket into the user space read buffers for socket IO
|
35
|
-
DEFAULT_SOCKET_READ_SIZE = 16*1024
|
36
|
-
|
37
|
-
@@socket_read_size = DEFAULT_SOCKET_READ_SIZE
|
38
|
-
|
39
|
-
def self.socket_read_size=(readsize)
|
40
|
-
if(readsize <= 0)
|
41
|
-
return
|
42
|
-
end
|
43
|
-
@@socket_read_size = readsize
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.socket_read_size?()
|
47
|
-
@@socket_read_size
|
48
|
-
end
|
49
|
-
|
50
|
-
def rbuf_fill
|
51
|
-
timeout(@read_timeout) {
|
52
|
-
@rbuf << @io.sysread(@@socket_read_size)
|
53
|
-
}
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
|
-
#-- Net::HTTPGenericRequest --
|
59
|
-
|
60
|
-
class HTTPGenericRequest
|
61
|
-
# Monkey-patch Net::HTTPGenericRequest to read > 1024 bytes from the local data
|
62
|
-
# source at a time (used in streaming PUTs)
|
63
|
-
|
64
|
-
# Default size (in bytes) of the max read from a local source (File, String,
|
65
|
-
# etc.) to the user space write buffers for socket IO.
|
66
|
-
DEFAULT_LOCAL_READ_SIZE = 16*1024
|
67
|
-
|
68
|
-
@@local_read_size = DEFAULT_LOCAL_READ_SIZE
|
69
|
-
|
70
|
-
def self.local_read_size=(readsize)
|
71
|
-
if(readsize <= 0)
|
72
|
-
return
|
73
|
-
end
|
74
|
-
@@local_read_size = readsize
|
75
|
-
end
|
76
|
-
|
77
|
-
def self.local_read_size?()
|
78
|
-
@@local_read_size
|
79
|
-
end
|
80
|
-
|
81
|
-
def exec(sock, ver, path, send_only=nil) #:nodoc: internal use only
|
82
|
-
if @body
|
83
|
-
send_request_with_body sock, ver, path, @body, send_only
|
84
|
-
elsif @body_stream
|
85
|
-
send_request_with_body_stream sock, ver, path, @body_stream, send_only
|
86
|
-
else
|
87
|
-
write_header(sock, ver, path)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
private
|
92
|
-
|
93
|
-
def send_request_with_body(sock, ver, path, body, send_only=nil)
|
94
|
-
self.content_length = body.length
|
95
|
-
delete 'Transfer-Encoding'
|
96
|
-
supply_default_content_type
|
97
|
-
write_header(sock, ver, path) unless send_only == :body
|
98
|
-
sock.write(body) unless send_only == :header
|
99
|
-
end
|
100
|
-
|
101
|
-
def send_request_with_body_stream(sock, ver, path, f, send_only=nil)
|
102
|
-
unless content_length() or chunked?
|
103
|
-
raise ArgumentError,
|
104
|
-
"Content-Length not given and Transfer-Encoding is not `chunked'"
|
105
|
-
end
|
106
|
-
supply_default_content_type
|
107
|
-
write_header(sock, ver, path) unless send_only == :body
|
108
|
-
unless send_only == :header
|
109
|
-
if chunked?
|
110
|
-
while s = f.read(@@local_read_size)
|
111
|
-
sock.write(sprintf("%x\r\n", s.length) << s << "\r\n")
|
112
|
-
end
|
113
|
-
sock.write "0\r\n\r\n"
|
114
|
-
else
|
115
|
-
while s = f.read(@@local_read_size)
|
116
|
-
sock.write s
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
|
124
|
-
#-- Net::HTTP --
|
125
|
-
|
126
|
-
class HTTP
|
127
|
-
def request(req, body = nil, &block) # :yield: +response+
|
128
|
-
unless started?
|
129
|
-
start {
|
130
|
-
req['connection'] ||= 'close'
|
131
|
-
return request(req, body, &block)
|
132
|
-
}
|
133
|
-
end
|
134
|
-
if proxy_user()
|
135
|
-
unless use_ssl?
|
136
|
-
req.proxy_basic_auth proxy_user(), proxy_pass()
|
137
|
-
end
|
138
|
-
end
|
139
|
-
# set body
|
140
|
-
req.set_body_internal body
|
141
|
-
begin_transport req
|
142
|
-
# if we expect 100-continue then send a header first
|
143
|
-
send_only = ((req.is_a?(Post)||req.is_a?(Put)) && (req['expect']=='100-continue')) ? :header : nil
|
144
|
-
req.exec @socket, @curr_http_version, edit_path(req.path), send_only
|
145
|
-
begin
|
146
|
-
res = HTTPResponse.read_new(@socket)
|
147
|
-
# if we expected 100-continue then send a body
|
148
|
-
if res.is_a?(HTTPContinue) && send_only && req['content-length'].to_i > 0
|
149
|
-
req.exec @socket, @curr_http_version, edit_path(req.path), :body
|
150
|
-
end
|
151
|
-
end while res.kind_of?(HTTPContinue)
|
152
|
-
res.reading_body(@socket, req.response_body_permitted?) {
|
153
|
-
yield res if block_given?
|
154
|
-
}
|
155
|
-
end_transport req, res
|
156
|
-
res
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
end
|