Skip to content

Commit

Permalink
Standardize Response Headers from all Adapters
Browse files Browse the repository at this point in the history
Now, all adapters returns Array when response have more than on header. Used
"Set-Cookie" for example on tests. This commit, fix issue #69 and closes pull
request #52.
  • Loading branch information
rogerleite authored and rubiii committed Jan 15, 2013
1 parent a0d8e1b commit 9cdbce2
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 2 deletions.
10 changes: 9 additions & 1 deletion lib/httpi/adapter/httpclient.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,15 @@ def setup_ssl_auth
end

def respond_with(response)
Response.new response.code, Hash[*response.header.all.flatten], response.content
headers = {}
response.header.all.each do |(header, value)|
if headers.key?(header)
headers[header] = Array(headers[header]) << value
else
headers[header] = value
end
end
Response.new response.code, headers, response.content
end

end
Expand Down
4 changes: 3 additions & 1 deletion lib/httpi/adapter/net_http.rb
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,9 @@ def request_client(type)

def respond_with(response)
headers = response.to_hash
headers.each { |key, value| headers[key] = value[0] }
headers.each do |key, value|
headers[key] = value[0] if value.size <= 1
end
Response.new response.code, headers, response.body
end

Expand Down
8 changes: 8 additions & 0 deletions spec/integration/curb_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@
response.body.should include("HTTPI")
end

it "it supports headers with multiple values" do
request = HTTPI::Request.new(@server.url + "cookies")

response = HTTPI.get(request, adapter)
cookies = ["cookie1=chip1; path=/", "cookie2=chip2; path=/"]
response.headers["Set-Cookie"].should eq(cookies)
end

it "executes GET requests" do
response = HTTPI.get(@server.url, adapter)
response.body.should eq("get")
Expand Down
8 changes: 8 additions & 0 deletions spec/integration/em_http_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,14 @@
response.body.should include("HTTPI")
end

it "it supports headers with multiple values" do
request = HTTPI::Request.new(@server.url + "cookies")

response = HTTPI.get(request, adapter)
cookies = ["cookie1=chip1; path=/", "cookie2=chip2; path=/"]
response.headers["Set-Cookie"].should eq(cookies)
end

it "executes GET requests" do
response = HTTPI.get(@server.url, adapter)
response.body.should eq("get")
Expand Down
8 changes: 8 additions & 0 deletions spec/integration/httpclient_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@
response.body.should include("HTTPI")
end

it "it supports headers with multiple values" do
request = HTTPI::Request.new(@server.url + "cookies")

response = HTTPI.get(request, adapter)
cookies = ["cookie1=chip1; path=/", "cookie2=chip2; path=/"]
response.headers["Set-Cookie"].should eq(cookies)
end

it "executes GET requests" do
response = HTTPI.get(@server.url, adapter)
response.body.should eq("get")
Expand Down
8 changes: 8 additions & 0 deletions spec/integration/net_http_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@
response.body.should include("HTTPI")
end

it "it supports headers with multiple values" do
request = HTTPI::Request.new(@server.url + "cookies")

response = HTTPI.get(request, adapter)
cookies = ["cookie1=chip1; path=/", "cookie2=chip2; path=/"]
response.headers["Set-Cookie"].should eq(cookies)
end

it "executes GET requests" do
response = HTTPI.get(@server.url, adapter)
response.body.should eq("get")
Expand Down
11 changes: 11 additions & 0 deletions spec/integration/support/application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,17 @@ def self.respond_with(body)
}
end

map "/cookies" do
run lambda { |env|
status, headers, body = IntegrationServer.respond_with("Many Cookies")
response = Rack::Response.new(body, status, headers)

response.set_cookie("cookie1", {:value => "chip1", :path => "/"})
response.set_cookie("cookie2", {:value => "chip2", :path => "/"})
response.finish
}
end

map "/basic-auth" do
use Rack::Auth::Basic, "basic-realm" do |username, password|
username == "admin" && password == "secret"
Expand Down

0 comments on commit 9cdbce2

Please sign in to comment.