http 1.0.0.pre3 → 1.0.0.pre4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +7 -1
- data/lib/http/client.rb +15 -9
- data/lib/http/request.rb +23 -11
- data/lib/http/response.rb +7 -5
- data/lib/http/version.rb +1 -1
- data/spec/lib/http/client_spec.rb +20 -18
- data/spec/lib/http/redirector_spec.rb +35 -35
- data/spec/lib/http/request_spec.rb +41 -7
- data/spec/lib/http/response_spec.rb +3 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b68e3604886c916e6e4f1fd3607704c781d5895
|
4
|
+
data.tar.gz: e7ec1fece7b666199c2f5dab353530c0669a512a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 642f976768af7e7bbebf7e8a1639c539bd168001b0dd7b1bf0369fe310a0ba94a15a377a14ae7d9725c08c4d45af1e8d2fbaecb1fa72591718e740a455e47a3f
|
7
|
+
data.tar.gz: 299d773b6b6ca345116fa3c2d2f87d8e55fe2203af198fb7ab4af1c09d8c550a2cac88ba4fcc3ec59a86e32969cec41dfe91b7ae2383ae73ff8dbad0fe51b616
|
data/CHANGES.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
## 1.0.0.
|
1
|
+
## 1.0.0.pre4 (2015-12-18)
|
2
2
|
|
3
3
|
* [#265](https://github.com/httprb/http/pull/265/):
|
4
4
|
Remove deprecations ([@tarcieri]):
|
@@ -34,6 +34,11 @@
|
|
34
34
|
Use Encoding::BINARY as the default encoding for HTTP::Response::Body.
|
35
35
|
([@tarcieri])
|
36
36
|
|
37
|
+
* [#278](https://github.com/httprb/http/pull/278)
|
38
|
+
Use an options hash for HTTP::Request's initializer API.
|
39
|
+
([@ixti])
|
40
|
+
|
41
|
+
|
37
42
|
## 0.9.8 (2015-09-29)
|
38
43
|
|
39
44
|
* [#260](https://github.com/httprb/http/pull/258):
|
@@ -435,3 +440,4 @@ end
|
|
435
440
|
[@krainboltgreene]: https://github.com/krainboltgreene
|
436
441
|
[@hundredwatt]: https://github.com/hundredwatt
|
437
442
|
[@jwinter]: https://github.com/jwinter
|
443
|
+
[@nerdrew]: https://github.com/nerdrew
|
data/lib/http/client.rb
CHANGED
@@ -32,13 +32,19 @@ module HTTP
|
|
32
32
|
body = make_request_body(opts, headers)
|
33
33
|
proxy = opts.proxy
|
34
34
|
|
35
|
-
req = HTTP::Request.new(
|
36
|
-
|
35
|
+
req = HTTP::Request.new(
|
36
|
+
:verb => verb,
|
37
|
+
:uri => uri,
|
38
|
+
:headers => headers,
|
39
|
+
:proxy => proxy,
|
40
|
+
:body => body
|
41
|
+
)
|
37
42
|
|
43
|
+
res = perform(req, opts)
|
38
44
|
return res unless opts.follow
|
39
45
|
|
40
|
-
Redirector.new(opts.follow).perform
|
41
|
-
perform
|
46
|
+
Redirector.new(opts.follow).perform(req, res) do |request|
|
47
|
+
perform(request, opts)
|
42
48
|
end
|
43
49
|
end
|
44
50
|
|
@@ -61,12 +67,12 @@ module HTTP
|
|
61
67
|
end
|
62
68
|
|
63
69
|
res = Response.new(
|
64
|
-
:status
|
65
|
-
:version
|
66
|
-
:headers
|
70
|
+
:status => @connection.status_code,
|
71
|
+
:version => @connection.http_version,
|
72
|
+
:headers => @connection.headers,
|
67
73
|
:connection => @connection,
|
68
|
-
:encoding
|
69
|
-
:uri
|
74
|
+
:encoding => options.encoding,
|
75
|
+
:uri => req.uri
|
70
76
|
)
|
71
77
|
|
72
78
|
@connection.finish_response if req.verb == :head
|
data/lib/http/request.rb
CHANGED
@@ -63,20 +63,24 @@ module HTTP
|
|
63
63
|
attr_reader :uri
|
64
64
|
attr_reader :proxy, :body, :version
|
65
65
|
|
66
|
-
# :
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
66
|
+
# @option opts [String] :version
|
67
|
+
# @option opts [#to_s] :verb HTTP request method
|
68
|
+
# @option opts [HTTP::URI, #to_s] :uri
|
69
|
+
# @option opts [Hash] :headers
|
70
|
+
# @option opts [Hash] :proxy
|
71
|
+
# @option opts [String] :body
|
72
|
+
def initialize(opts)
|
73
|
+
@verb = opts.fetch(:verb).to_s.downcase.to_sym
|
74
|
+
@uri = normalize_uri(opts.fetch :uri)
|
75
|
+
@scheme = @uri.scheme.to_s.downcase.to_sym if @uri.scheme
|
71
76
|
|
72
77
|
fail(UnsupportedMethodError, "unknown method: #{verb}") unless METHODS.include?(@verb)
|
73
78
|
fail(UnsupportedSchemeError, "unknown scheme: #{scheme}") unless SCHEMES.include?(@scheme)
|
74
79
|
|
75
|
-
@proxy = proxy
|
76
|
-
@body = body
|
77
|
-
@version = version
|
78
|
-
|
79
|
-
@headers = HTTP::Headers.coerce(headers || {})
|
80
|
+
@proxy = opts[:proxy] || {}
|
81
|
+
@body = opts[:body]
|
82
|
+
@version = opts[:version] || "1.1"
|
83
|
+
@headers = HTTP::Headers.coerce(opts[:headers] || {})
|
80
84
|
|
81
85
|
@headers[Headers::HOST] ||= default_host_header_value
|
82
86
|
@headers[Headers::USER_AGENT] ||= USER_AGENT
|
@@ -84,7 +88,15 @@ module HTTP
|
|
84
88
|
|
85
89
|
# Returns new Request with updated uri
|
86
90
|
def redirect(uri, verb = @verb)
|
87
|
-
req = self.class.new(
|
91
|
+
req = self.class.new(
|
92
|
+
:verb => verb,
|
93
|
+
:uri => @uri.join(uri),
|
94
|
+
:headers => headers,
|
95
|
+
:proxy => proxy,
|
96
|
+
:body => body,
|
97
|
+
:version => version
|
98
|
+
)
|
99
|
+
|
88
100
|
req[Headers::HOST] = req.uri.host
|
89
101
|
req
|
90
102
|
end
|
data/lib/http/response.rb
CHANGED
@@ -34,13 +34,15 @@ module HTTP
|
|
34
34
|
# @option opts [String] :uri
|
35
35
|
def initialize(opts)
|
36
36
|
@version = opts.fetch(:version)
|
37
|
-
@uri =
|
38
|
-
@status = HTTP::Response::Status.new
|
39
|
-
@headers = HTTP::Headers.coerce(opts
|
37
|
+
@uri = HTTP::URI.parse(opts.fetch :uri) if opts.include? :uri
|
38
|
+
@status = HTTP::Response::Status.new(opts.fetch :status)
|
39
|
+
@headers = HTTP::Headers.coerce(opts[:headers] || {})
|
40
40
|
|
41
41
|
if opts.include?(:connection)
|
42
|
-
|
43
|
-
|
42
|
+
connection = opts.fetch(:connection)
|
43
|
+
encoding = opts[:encoding] || charset || Encoding::BINARY
|
44
|
+
|
45
|
+
@body = Response::Body.new(connection, encoding)
|
44
46
|
else
|
45
47
|
@body = opts.fetch(:body)
|
46
48
|
end
|
data/lib/http/version.rb
CHANGED
@@ -27,17 +27,19 @@ RSpec.describe HTTP::Client do
|
|
27
27
|
|
28
28
|
def redirect_response(location, status = 302)
|
29
29
|
HTTP::Response.new(
|
30
|
-
:status
|
30
|
+
:status => status,
|
31
31
|
:version => "1.1",
|
32
32
|
:headers => {"Location" => location},
|
33
|
-
:body
|
33
|
+
:body => ""
|
34
|
+
)
|
34
35
|
end
|
35
36
|
|
36
37
|
def simple_response(body, status = 200)
|
37
38
|
HTTP::Response.new(
|
38
|
-
:status
|
39
|
+
:status => status,
|
39
40
|
:version => "1.1",
|
40
|
-
:body
|
41
|
+
:body => body
|
42
|
+
)
|
41
43
|
end
|
42
44
|
|
43
45
|
describe "following redirects" do
|
@@ -107,48 +109,48 @@ RSpec.describe HTTP::Client do
|
|
107
109
|
before { allow(client).to receive :perform }
|
108
110
|
|
109
111
|
it "accepts params within the provided URL" do
|
110
|
-
expect(HTTP::Request).to receive(:new) do |
|
111
|
-
expect(CGI.parse uri.query).to eq("foo" => %w(bar))
|
112
|
+
expect(HTTP::Request).to receive(:new) do |opts|
|
113
|
+
expect(CGI.parse opts[:uri].query).to eq("foo" => %w(bar))
|
112
114
|
end
|
113
115
|
|
114
116
|
client.get("http://example.com/?foo=bar")
|
115
117
|
end
|
116
118
|
|
117
119
|
it "combines GET params from the URI with the passed in params" do
|
118
|
-
expect(HTTP::Request).to receive(:new) do |
|
119
|
-
expect(CGI.parse uri.query).to eq("foo" => %w(bar), "baz" => %w(quux))
|
120
|
+
expect(HTTP::Request).to receive(:new) do |opts|
|
121
|
+
expect(CGI.parse opts[:uri].query).to eq("foo" => %w(bar), "baz" => %w(quux))
|
120
122
|
end
|
121
123
|
|
122
124
|
client.get("http://example.com/?foo=bar", :params => {:baz => "quux"})
|
123
125
|
end
|
124
126
|
|
125
127
|
it "merges duplicate values" do
|
126
|
-
expect(HTTP::Request).to receive(:new) do |
|
127
|
-
expect(uri.query).to match(/^(a=1&a=2|a=2&a=1)$/)
|
128
|
+
expect(HTTP::Request).to receive(:new) do |opts|
|
129
|
+
expect(opts[:uri].query).to match(/^(a=1&a=2|a=2&a=1)$/)
|
128
130
|
end
|
129
131
|
|
130
132
|
client.get("http://example.com/?a=1", :params => {:a => 2})
|
131
133
|
end
|
132
134
|
|
133
135
|
it "does not modifies query part if no params were given" do
|
134
|
-
expect(HTTP::Request).to receive(:new) do |
|
135
|
-
expect(uri.query).to eq "deadbeef"
|
136
|
+
expect(HTTP::Request).to receive(:new) do |opts|
|
137
|
+
expect(opts[:uri].query).to eq "deadbeef"
|
136
138
|
end
|
137
139
|
|
138
140
|
client.get("http://example.com/?deadbeef")
|
139
141
|
end
|
140
142
|
|
141
143
|
it "does not corrupts index-less arrays" do
|
142
|
-
expect(HTTP::Request).to receive(:new) do |
|
143
|
-
expect(CGI.parse uri.query).to eq "a[]" => %w(b c), "d" => %w(e)
|
144
|
+
expect(HTTP::Request).to receive(:new) do |opts|
|
145
|
+
expect(CGI.parse opts[:uri].query).to eq "a[]" => %w(b c), "d" => %w(e)
|
144
146
|
end
|
145
147
|
|
146
148
|
client.get("http://example.com/?a[]=b&a[]=c", :params => {:d => "e"})
|
147
149
|
end
|
148
150
|
|
149
151
|
it "properly encodes colons" do
|
150
|
-
expect(HTTP::Request).to receive(:new) do |
|
151
|
-
expect(uri.query).to eq "t=1970-01-01T00%3A00%3A00Z"
|
152
|
+
expect(HTTP::Request).to receive(:new) do |opts|
|
153
|
+
expect(opts[:uri].query).to eq "t=1970-01-01T00%3A00%3A00Z"
|
152
154
|
end
|
153
155
|
|
154
156
|
client.get("http://example.com/", :params => {:t => "1970-01-01T00:00:00Z"})
|
@@ -160,8 +162,8 @@ RSpec.describe HTTP::Client do
|
|
160
162
|
client = HTTP::Client.new
|
161
163
|
allow(client).to receive(:perform)
|
162
164
|
|
163
|
-
expect(HTTP::Request).to receive(:new) do
|
164
|
-
expect(
|
165
|
+
expect(HTTP::Request).to receive(:new) do |opts|
|
166
|
+
expect(opts[:body]).to eq '{"foo":"bar"}'
|
165
167
|
end
|
166
168
|
|
167
169
|
client.get("http://example.com/", :json => {:foo => :bar})
|
@@ -1,10 +1,10 @@
|
|
1
1
|
RSpec.describe HTTP::Redirector do
|
2
2
|
def simple_response(status, body = "", headers = {})
|
3
3
|
HTTP::Response.new(
|
4
|
-
:status
|
4
|
+
:status => status,
|
5
5
|
:version => "1.1",
|
6
6
|
:headers => headers,
|
7
|
-
:body
|
7
|
+
:body => body
|
8
8
|
)
|
9
9
|
end
|
10
10
|
|
@@ -35,7 +35,7 @@ RSpec.describe HTTP::Redirector do
|
|
35
35
|
let(:redirector) { described_class.new options }
|
36
36
|
|
37
37
|
it "fails with TooManyRedirectsError if max hops reached" do
|
38
|
-
req = HTTP::Request.new :head, "http://example.com"
|
38
|
+
req = HTTP::Request.new :verb => :head, :uri => "http://example.com"
|
39
39
|
res = proc { |prev_req| redirect_response(301, "#{prev_req.uri}/1") }
|
40
40
|
|
41
41
|
expect { redirector.perform(req, res.call(req), &res) }.
|
@@ -43,7 +43,7 @@ RSpec.describe HTTP::Redirector do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
it "fails with EndlessRedirectError if endless loop detected" do
|
46
|
-
req = HTTP::Request.new :head, "http://example.com"
|
46
|
+
req = HTTP::Request.new :verb => :head, :uri => "http://example.com"
|
47
47
|
res = redirect_response(301, req.uri)
|
48
48
|
|
49
49
|
expect { redirector.perform(req, res) { res } }.
|
@@ -51,7 +51,7 @@ RSpec.describe HTTP::Redirector do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
it "fails with StateError if there were no Location header" do
|
54
|
-
req = HTTP::Request.new :head, "http://example.com"
|
54
|
+
req = HTTP::Request.new :verb => :head, :uri => "http://example.com"
|
55
55
|
res = simple_response(301)
|
56
56
|
|
57
57
|
expect { |b| redirector.perform(req, res, &b) }.
|
@@ -59,7 +59,7 @@ RSpec.describe HTTP::Redirector do
|
|
59
59
|
end
|
60
60
|
|
61
61
|
it "returns first non-redirect response" do
|
62
|
-
req = HTTP::Request.new :head, "http://example.com"
|
62
|
+
req = HTTP::Request.new :verb => :head, :uri => "http://example.com"
|
63
63
|
hops = [
|
64
64
|
redirect_response(301, "http://example.com/1"),
|
65
65
|
redirect_response(301, "http://example.com/2"),
|
@@ -78,7 +78,7 @@ RSpec.describe HTTP::Redirector do
|
|
78
78
|
let(:options) { {:strict => true} }
|
79
79
|
|
80
80
|
it "it follows with original verb if it's safe" do
|
81
|
-
req = HTTP::Request.new :head, "http://example.com"
|
81
|
+
req = HTTP::Request.new :verb => :head, :uri => "http://example.com"
|
82
82
|
res = redirect_response 300, "http://example.com/1"
|
83
83
|
|
84
84
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -88,7 +88,7 @@ RSpec.describe HTTP::Redirector do
|
|
88
88
|
end
|
89
89
|
|
90
90
|
it "raises StateError if original request was PUT" do
|
91
|
-
req = HTTP::Request.new :put, "http://example.com"
|
91
|
+
req = HTTP::Request.new :verb => :put, :uri => "http://example.com"
|
92
92
|
res = redirect_response 300, "http://example.com/1"
|
93
93
|
|
94
94
|
expect { redirector.perform(req, res) { simple_response 200 } }.
|
@@ -96,7 +96,7 @@ RSpec.describe HTTP::Redirector do
|
|
96
96
|
end
|
97
97
|
|
98
98
|
it "raises StateError if original request was POST" do
|
99
|
-
req = HTTP::Request.new :post, "http://example.com"
|
99
|
+
req = HTTP::Request.new :verb => :post, :uri => "http://example.com"
|
100
100
|
res = redirect_response 300, "http://example.com/1"
|
101
101
|
|
102
102
|
expect { redirector.perform(req, res) { simple_response 200 } }.
|
@@ -104,7 +104,7 @@ RSpec.describe HTTP::Redirector do
|
|
104
104
|
end
|
105
105
|
|
106
106
|
it "raises StateError if original request was DELETE" do
|
107
|
-
req = HTTP::Request.new :delete, "http://example.com"
|
107
|
+
req = HTTP::Request.new :verb => :delete, :uri => "http://example.com"
|
108
108
|
res = redirect_response 300, "http://example.com/1"
|
109
109
|
|
110
110
|
expect { redirector.perform(req, res) { simple_response 200 } }.
|
@@ -116,7 +116,7 @@ RSpec.describe HTTP::Redirector do
|
|
116
116
|
let(:options) { {:strict => false} }
|
117
117
|
|
118
118
|
it "it follows with original verb if it's safe" do
|
119
|
-
req = HTTP::Request.new :head, "http://example.com"
|
119
|
+
req = HTTP::Request.new :verb => :head, :uri => "http://example.com"
|
120
120
|
res = redirect_response 300, "http://example.com/1"
|
121
121
|
|
122
122
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -126,7 +126,7 @@ RSpec.describe HTTP::Redirector do
|
|
126
126
|
end
|
127
127
|
|
128
128
|
it "it follows with GET if original request was PUT" do
|
129
|
-
req = HTTP::Request.new :put, "http://example.com"
|
129
|
+
req = HTTP::Request.new :verb => :put, :uri => "http://example.com"
|
130
130
|
res = redirect_response 300, "http://example.com/1"
|
131
131
|
|
132
132
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -136,7 +136,7 @@ RSpec.describe HTTP::Redirector do
|
|
136
136
|
end
|
137
137
|
|
138
138
|
it "it follows with GET if original request was POST" do
|
139
|
-
req = HTTP::Request.new :post, "http://example.com"
|
139
|
+
req = HTTP::Request.new :verb => :post, :uri => "http://example.com"
|
140
140
|
res = redirect_response 300, "http://example.com/1"
|
141
141
|
|
142
142
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -146,7 +146,7 @@ RSpec.describe HTTP::Redirector do
|
|
146
146
|
end
|
147
147
|
|
148
148
|
it "it follows with GET if original request was DELETE" do
|
149
|
-
req = HTTP::Request.new :delete, "http://example.com"
|
149
|
+
req = HTTP::Request.new :verb => :delete, :uri => "http://example.com"
|
150
150
|
res = redirect_response 300, "http://example.com/1"
|
151
151
|
|
152
152
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -162,7 +162,7 @@ RSpec.describe HTTP::Redirector do
|
|
162
162
|
let(:options) { {:strict => true} }
|
163
163
|
|
164
164
|
it "it follows with original verb if it's safe" do
|
165
|
-
req = HTTP::Request.new :head, "http://example.com"
|
165
|
+
req = HTTP::Request.new :verb => :head, :uri => "http://example.com"
|
166
166
|
res = redirect_response 301, "http://example.com/1"
|
167
167
|
|
168
168
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -172,7 +172,7 @@ RSpec.describe HTTP::Redirector do
|
|
172
172
|
end
|
173
173
|
|
174
174
|
it "raises StateError if original request was PUT" do
|
175
|
-
req = HTTP::Request.new :put, "http://example.com"
|
175
|
+
req = HTTP::Request.new :verb => :put, :uri => "http://example.com"
|
176
176
|
res = redirect_response 301, "http://example.com/1"
|
177
177
|
|
178
178
|
expect { redirector.perform(req, res) { simple_response 200 } }.
|
@@ -180,7 +180,7 @@ RSpec.describe HTTP::Redirector do
|
|
180
180
|
end
|
181
181
|
|
182
182
|
it "raises StateError if original request was POST" do
|
183
|
-
req = HTTP::Request.new :post, "http://example.com"
|
183
|
+
req = HTTP::Request.new :verb => :post, :uri => "http://example.com"
|
184
184
|
res = redirect_response 301, "http://example.com/1"
|
185
185
|
|
186
186
|
expect { redirector.perform(req, res) { simple_response 200 } }.
|
@@ -188,7 +188,7 @@ RSpec.describe HTTP::Redirector do
|
|
188
188
|
end
|
189
189
|
|
190
190
|
it "raises StateError if original request was DELETE" do
|
191
|
-
req = HTTP::Request.new :delete, "http://example.com"
|
191
|
+
req = HTTP::Request.new :verb => :delete, :uri => "http://example.com"
|
192
192
|
res = redirect_response 301, "http://example.com/1"
|
193
193
|
|
194
194
|
expect { redirector.perform(req, res) { simple_response 200 } }.
|
@@ -200,7 +200,7 @@ RSpec.describe HTTP::Redirector do
|
|
200
200
|
let(:options) { {:strict => false} }
|
201
201
|
|
202
202
|
it "it follows with original verb if it's safe" do
|
203
|
-
req = HTTP::Request.new :head, "http://example.com"
|
203
|
+
req = HTTP::Request.new :verb => :head, :uri => "http://example.com"
|
204
204
|
res = redirect_response 301, "http://example.com/1"
|
205
205
|
|
206
206
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -210,7 +210,7 @@ RSpec.describe HTTP::Redirector do
|
|
210
210
|
end
|
211
211
|
|
212
212
|
it "it follows with GET if original request was PUT" do
|
213
|
-
req = HTTP::Request.new :put, "http://example.com"
|
213
|
+
req = HTTP::Request.new :verb => :put, :uri => "http://example.com"
|
214
214
|
res = redirect_response 301, "http://example.com/1"
|
215
215
|
|
216
216
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -220,7 +220,7 @@ RSpec.describe HTTP::Redirector do
|
|
220
220
|
end
|
221
221
|
|
222
222
|
it "it follows with GET if original request was POST" do
|
223
|
-
req = HTTP::Request.new :post, "http://example.com"
|
223
|
+
req = HTTP::Request.new :verb => :post, :uri => "http://example.com"
|
224
224
|
res = redirect_response 301, "http://example.com/1"
|
225
225
|
|
226
226
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -230,7 +230,7 @@ RSpec.describe HTTP::Redirector do
|
|
230
230
|
end
|
231
231
|
|
232
232
|
it "it follows with GET if original request was DELETE" do
|
233
|
-
req = HTTP::Request.new :delete, "http://example.com"
|
233
|
+
req = HTTP::Request.new :verb => :delete, :uri => "http://example.com"
|
234
234
|
res = redirect_response 301, "http://example.com/1"
|
235
235
|
|
236
236
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -246,7 +246,7 @@ RSpec.describe HTTP::Redirector do
|
|
246
246
|
let(:options) { {:strict => true} }
|
247
247
|
|
248
248
|
it "it follows with original verb if it's safe" do
|
249
|
-
req = HTTP::Request.new :head, "http://example.com"
|
249
|
+
req = HTTP::Request.new :verb => :head, :uri => "http://example.com"
|
250
250
|
res = redirect_response 302, "http://example.com/1"
|
251
251
|
|
252
252
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -256,7 +256,7 @@ RSpec.describe HTTP::Redirector do
|
|
256
256
|
end
|
257
257
|
|
258
258
|
it "raises StateError if original request was PUT" do
|
259
|
-
req = HTTP::Request.new :put, "http://example.com"
|
259
|
+
req = HTTP::Request.new :verb => :put, :uri => "http://example.com"
|
260
260
|
res = redirect_response 302, "http://example.com/1"
|
261
261
|
|
262
262
|
expect { redirector.perform(req, res) { simple_response 200 } }.
|
@@ -264,7 +264,7 @@ RSpec.describe HTTP::Redirector do
|
|
264
264
|
end
|
265
265
|
|
266
266
|
it "raises StateError if original request was POST" do
|
267
|
-
req = HTTP::Request.new :post, "http://example.com"
|
267
|
+
req = HTTP::Request.new :verb => :post, :uri => "http://example.com"
|
268
268
|
res = redirect_response 302, "http://example.com/1"
|
269
269
|
|
270
270
|
expect { redirector.perform(req, res) { simple_response 200 } }.
|
@@ -272,7 +272,7 @@ RSpec.describe HTTP::Redirector do
|
|
272
272
|
end
|
273
273
|
|
274
274
|
it "raises StateError if original request was DELETE" do
|
275
|
-
req = HTTP::Request.new :delete, "http://example.com"
|
275
|
+
req = HTTP::Request.new :verb => :delete, :uri => "http://example.com"
|
276
276
|
res = redirect_response 302, "http://example.com/1"
|
277
277
|
|
278
278
|
expect { redirector.perform(req, res) { simple_response 200 } }.
|
@@ -284,7 +284,7 @@ RSpec.describe HTTP::Redirector do
|
|
284
284
|
let(:options) { {:strict => false} }
|
285
285
|
|
286
286
|
it "it follows with original verb if it's safe" do
|
287
|
-
req = HTTP::Request.new :head, "http://example.com"
|
287
|
+
req = HTTP::Request.new :verb => :head, :uri => "http://example.com"
|
288
288
|
res = redirect_response 302, "http://example.com/1"
|
289
289
|
|
290
290
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -294,7 +294,7 @@ RSpec.describe HTTP::Redirector do
|
|
294
294
|
end
|
295
295
|
|
296
296
|
it "it follows with GET if original request was PUT" do
|
297
|
-
req = HTTP::Request.new :put, "http://example.com"
|
297
|
+
req = HTTP::Request.new :verb => :put, :uri => "http://example.com"
|
298
298
|
res = redirect_response 302, "http://example.com/1"
|
299
299
|
|
300
300
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -304,7 +304,7 @@ RSpec.describe HTTP::Redirector do
|
|
304
304
|
end
|
305
305
|
|
306
306
|
it "it follows with GET if original request was POST" do
|
307
|
-
req = HTTP::Request.new :post, "http://example.com"
|
307
|
+
req = HTTP::Request.new :verb => :post, :uri => "http://example.com"
|
308
308
|
res = redirect_response 302, "http://example.com/1"
|
309
309
|
|
310
310
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -314,7 +314,7 @@ RSpec.describe HTTP::Redirector do
|
|
314
314
|
end
|
315
315
|
|
316
316
|
it "it follows with GET if original request was DELETE" do
|
317
|
-
req = HTTP::Request.new :delete, "http://example.com"
|
317
|
+
req = HTTP::Request.new :verb => :delete, :uri => "http://example.com"
|
318
318
|
res = redirect_response 302, "http://example.com/1"
|
319
319
|
|
320
320
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -327,7 +327,7 @@ RSpec.describe HTTP::Redirector do
|
|
327
327
|
|
328
328
|
context "following 303 redirect" do
|
329
329
|
it "follows with HEAD if original request was HEAD" do
|
330
|
-
req = HTTP::Request.new :head, "http://example.com"
|
330
|
+
req = HTTP::Request.new :verb => :head, :uri => "http://example.com"
|
331
331
|
res = redirect_response 303, "http://example.com/1"
|
332
332
|
|
333
333
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -337,7 +337,7 @@ RSpec.describe HTTP::Redirector do
|
|
337
337
|
end
|
338
338
|
|
339
339
|
it "follows with GET if original request was GET" do
|
340
|
-
req = HTTP::Request.new :get, "http://example.com"
|
340
|
+
req = HTTP::Request.new :verb => :get, :uri => "http://example.com"
|
341
341
|
res = redirect_response 303, "http://example.com/1"
|
342
342
|
|
343
343
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -347,7 +347,7 @@ RSpec.describe HTTP::Redirector do
|
|
347
347
|
end
|
348
348
|
|
349
349
|
it "follows with GET if original request was neither GET nor HEAD" do
|
350
|
-
req = HTTP::Request.new :post, "http://example.com"
|
350
|
+
req = HTTP::Request.new :verb => :post, :uri => "http://example.com"
|
351
351
|
res = redirect_response 303, "http://example.com/1"
|
352
352
|
|
353
353
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -359,7 +359,7 @@ RSpec.describe HTTP::Redirector do
|
|
359
359
|
|
360
360
|
context "following 307 redirect" do
|
361
361
|
it "follows with original request's verb" do
|
362
|
-
req = HTTP::Request.new :post, "http://example.com"
|
362
|
+
req = HTTP::Request.new :verb => :post, :uri => "http://example.com"
|
363
363
|
res = redirect_response 307, "http://example.com/1"
|
364
364
|
|
365
365
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -371,7 +371,7 @@ RSpec.describe HTTP::Redirector do
|
|
371
371
|
|
372
372
|
context "following 308 redirect" do
|
373
373
|
it "follows with original request's verb" do
|
374
|
-
req = HTTP::Request.new :post, "http://example.com"
|
374
|
+
req = HTTP::Request.new :verb => :post, :uri => "http://example.com"
|
375
375
|
res = redirect_response 308, "http://example.com/1"
|
376
376
|
|
377
377
|
redirector.perform(req, res) do |prev_req, _|
|
@@ -5,14 +5,21 @@ RSpec.describe HTTP::Request do
|
|
5
5
|
let(:headers) { {:accept => "text/html"} }
|
6
6
|
let(:request_uri) { "http://example.com/foo?bar=baz" }
|
7
7
|
|
8
|
-
subject
|
8
|
+
subject :request do
|
9
|
+
HTTP::Request.new(
|
10
|
+
:verb => :get,
|
11
|
+
:uri => request_uri,
|
12
|
+
:headers => headers,
|
13
|
+
:proxy => proxy
|
14
|
+
)
|
15
|
+
end
|
9
16
|
|
10
17
|
it "includes HTTP::Headers::Mixin" do
|
11
18
|
expect(described_class).to include HTTP::Headers::Mixin
|
12
19
|
end
|
13
20
|
|
14
21
|
it "requires URI to have scheme part" do
|
15
|
-
expect { HTTP::Request.new(:get, "example.com/") }.to \
|
22
|
+
expect { HTTP::Request.new(:verb => :get, :uri => "example.com/") }.to \
|
16
23
|
raise_error(HTTP::Request::UnsupportedSchemeError)
|
17
24
|
end
|
18
25
|
|
@@ -63,7 +70,16 @@ RSpec.describe HTTP::Request do
|
|
63
70
|
let(:headers) { {:accept => "text/html"} }
|
64
71
|
let(:proxy) { {:proxy_username => "douglas", :proxy_password => "adams"} }
|
65
72
|
let(:body) { "The Ultimate Question" }
|
66
|
-
|
73
|
+
|
74
|
+
let :request do
|
75
|
+
HTTP::Request.new(
|
76
|
+
:verb => :post,
|
77
|
+
:uri => "http://example.com/",
|
78
|
+
:headers => headers,
|
79
|
+
:proxy => proxy,
|
80
|
+
:body => body
|
81
|
+
)
|
82
|
+
end
|
67
83
|
|
68
84
|
subject(:redirected) { request.redirect "http://blog.example.com/" }
|
69
85
|
|
@@ -105,8 +121,17 @@ RSpec.describe HTTP::Request do
|
|
105
121
|
end
|
106
122
|
|
107
123
|
context "with original URI having non-standard port" do
|
108
|
-
let
|
109
|
-
|
124
|
+
let :request do
|
125
|
+
HTTP::Request.new(
|
126
|
+
:verb => :post,
|
127
|
+
:uri => "http://example.com:8080/",
|
128
|
+
:headers => headers,
|
129
|
+
:proxy => proxy,
|
130
|
+
:body => body
|
131
|
+
)
|
132
|
+
end
|
133
|
+
|
134
|
+
its(:uri) { is_expected.to eq HTTP::URI.parse "http://example.com:8080/blog" }
|
110
135
|
end
|
111
136
|
end
|
112
137
|
|
@@ -124,8 +149,17 @@ RSpec.describe HTTP::Request do
|
|
124
149
|
end
|
125
150
|
|
126
151
|
context "with original URI having non-standard port" do
|
127
|
-
let
|
128
|
-
|
152
|
+
let :request do
|
153
|
+
HTTP::Request.new(
|
154
|
+
:verb => :post,
|
155
|
+
:uri => "http://example.com:8080/",
|
156
|
+
:headers => headers,
|
157
|
+
:proxy => proxy,
|
158
|
+
:body => body
|
159
|
+
)
|
160
|
+
end
|
161
|
+
|
162
|
+
its(:uri) { is_expected.to eq HTTP::URI.parse "http://example.com:8080/blog" }
|
129
163
|
end
|
130
164
|
end
|
131
165
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.pre4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Arcieri
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2015-12-
|
14
|
+
date: 2015-12-19 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: http_parser.rb
|
@@ -183,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
183
|
version: 1.3.1
|
184
184
|
requirements: []
|
185
185
|
rubyforge_project:
|
186
|
-
rubygems_version: 2.4.
|
186
|
+
rubygems_version: 2.4.8
|
187
187
|
signing_key:
|
188
188
|
specification_version: 4
|
189
189
|
summary: HTTP should be easy
|