Skip to content

Commit

Permalink
Update bundled Rack for Ruby 1.9 spec changes
Browse files Browse the repository at this point in the history
  • Loading branch information
josh committed Feb 7, 2009
1 parent 0edb0a4 commit 524d8ed
Show file tree
Hide file tree
Showing 19 changed files with 51 additions and 51 deletions.
2 changes: 1 addition & 1 deletion actionpack/lib/action_controller/integration.rb
Expand Up @@ -327,7 +327,7 @@ def process(method, path, parameters = nil, headers = nil)

@headers = Rack::Utils::HeaderHash.new(headers)

(@headers['Set-Cookie'] || []).each do |cookie|
(@headers['Set-Cookie'] || "").split("\n").each do |cookie|
name, value = cookie.match(/^([^=]*)=([^;]*);/)[1,2]
@cookies[name] = value
end
Expand Down
2 changes: 1 addition & 1 deletion actionpack/lib/action_controller/response.rb
Expand Up @@ -41,7 +41,7 @@ class Response < Rack::Response

def initialize
@status = 200
@header = DEFAULT_HEADERS.dup
@header = Rack::Utils::HeaderHash.new(DEFAULT_HEADERS)

@writer = lambda { |x| @body << x }
@block = nil
Expand Down
9 changes: 3 additions & 6 deletions actionpack/lib/action_controller/session/abstract_store.rb
Expand Up @@ -139,12 +139,9 @@ def call(env)
cookie << "; HttpOnly" if options[:httponly]

headers = response[1]
case a = headers[SET_COOKIE]
when Array
a << cookie
when String
headers[SET_COOKIE] = [a, cookie]
when nil
unless headers[SET_COOKIE].blank?
headers[SET_COOKIE] << "\n#{cookie}"
else
headers[SET_COOKIE] = cookie
end
end
Expand Down
9 changes: 3 additions & 6 deletions actionpack/lib/action_controller/session/cookie_store.rb
Expand Up @@ -108,12 +108,9 @@ def call(env)
end

cookie = build_cookie(@key, cookie.merge(options))
case headers[HTTP_SET_COOKIE]
when Array
headers[HTTP_SET_COOKIE] << cookie
when String
headers[HTTP_SET_COOKIE] = [headers[HTTP_SET_COOKIE], cookie]
when nil
unless headers[HTTP_SET_COOKIE].blank?
headers[HTTP_SET_COOKIE] << "\n#{cookie}"
else
headers[HTTP_SET_COOKIE] = cookie
end
end
Expand Down
2 changes: 1 addition & 1 deletion actionpack/lib/action_controller/streaming.rb
Expand Up @@ -152,7 +152,7 @@ def send_file_headers!(options)
end
content_type = content_type.to_s.strip # fixes a problem with extra '\r' with some browsers

headers.update(
headers.merge!(
'Content-Length' => options[:length],
'Content-Type' => content_type,
'Content-Disposition' => disposition,
Expand Down
Expand Up @@ -36,17 +36,19 @@ def call(env)
mtime = headers.key?("Last-Modified") ?
Time.httpdate(headers["Last-Modified"]) : Time.now
body = self.class.gzip(body, mtime)
headers = headers.merge("Content-Encoding" => "gzip", "Content-Length" => body.length.to_s)
size = body.respond_to?(:bytesize) ? body.bytesize : body.size
headers = headers.merge("Content-Encoding" => "gzip", "Content-Length" => size.to_s)
[status, headers, [body]]
when "deflate"
body = self.class.deflate(body)
headers = headers.merge("Content-Encoding" => "deflate", "Content-Length" => body.length.to_s)
size = body.respond_to?(:bytesize) ? body.bytesize : body.size
headers = headers.merge("Content-Encoding" => "deflate", "Content-Length" => size.to_s)
[status, headers, [body]]
when "identity"
[status, headers, body]
when nil
message = ["An acceptable encoding for the requested resource #{request.fullpath} could not be found."]
[406, {"Content-Type" => "text/plain", "Content-Length" => message[0].length.to_s}, message]
message = "An acceptable encoding for the requested resource #{request.fullpath} could not be found."
[406, {"Content-Type" => "text/plain", "Content-Length" => message.length.to_s}, [message]]
end
end

Expand Down
Expand Up @@ -38,7 +38,7 @@ def self.serve(app)
def self.send_headers(status, headers)
STDOUT.print "Status: #{status}\r\n"
headers.each { |k, vs|
vs.each { |v|
vs.split("\n").each { |v|
STDOUT.print "#{k}: #{v}\r\n"
}
}
Expand Down
Expand Up @@ -67,7 +67,7 @@ def self.serve(request, app)
def self.send_headers(out, status, headers)
out.print "Status: #{status}\r\n"
headers.each { |k, vs|
vs.each { |v|
vs.split("\n").each { |v|
out.print "#{k}: #{v}\r\n"
}
}
Expand Down
Expand Up @@ -34,7 +34,7 @@ def self.serve(app)
def self.send_headers(status, headers)
print "Status: #{status}\r\n"
headers.each { |k, vs|
vs.each { |v|
vs.split("\n").each { |v|
print "#{k}: #{v}\r\n"
}
}
Expand Down
Expand Up @@ -63,7 +63,7 @@ def process(request, response)
response.send_status(nil)

headers.each { |k, vs|
vs.each { |v|
vs.split("\n").each { |v|
response.header[k] = v
}
}
Expand Down
Expand Up @@ -44,7 +44,7 @@ def process_request(request, input_body, socket)
begin
socket.write("Status: #{status}\r\n")
headers.each do |k, vs|
vs.each {|v| socket.write("#{k}: #{v}\r\n")}
vs.split("\n").each { |v| socket.write("#{k}: #{v}\r\n")}
end
socket.write("\r\n")
body.each {|s| socket.write(s)}
Expand Down
Expand Up @@ -42,9 +42,9 @@ def service(req, res)
res.status = status.to_i
headers.each { |k, vs|
if k.downcase == "set-cookie"
res.cookies.concat Array(vs)
res.cookies.concat vs.split("\n")
else
vs.each { |v|
vs.split("\n").each { |v|
res[k] = v
}
end
Expand Down
17 changes: 7 additions & 10 deletions actionpack/lib/action_controller/vendor/rack-1.0/rack/lint.rb
Expand Up @@ -338,16 +338,13 @@ def check_headers(header)
## but only contain keys that consist of
## letters, digits, <tt>_</tt> or <tt>-</tt> and start with a letter.
assert("invalid header name: #{key}") { key =~ /\A[a-zA-Z][a-zA-Z0-9_-]*\z/ }
##
## The values of the header must respond to #each.
assert("header values must respond to #each, but the value of " +
"'#{key}' doesn't (is #{value.class})") { value.respond_to? :each }
value.each { |item|
## The values passed on #each must be Strings
assert("header values must consist of Strings, but '#{key}' also contains a #{item.class}") {
item.instance_of?(String)
}
## and not contain characters below 037.

## The values of the header must be Strings,
assert("a header value must be a String, but the value of " +
"'#{key}' is a #{value.class}") { value.kind_of? String }
## consisting of lines (for multiple header values) seperated by "\n".
value.split("\n").each { |item|
## The lines must not contain characters below 037.
assert("invalid header value #{key}: #{item.inspect}") {
item !~ /[\000-\037]/
}
Expand Down
Expand Up @@ -118,9 +118,7 @@ def initialize(status, headers, body, errors=StringIO.new(""))
@original_headers = headers
@headers = Rack::Utils::HeaderHash.new
headers.each { |field, values|
values.each { |value|
@headers[field] = value
}
@headers[field] = values
@headers[field] = "" if values.empty?
}

Expand Down
Expand Up @@ -167,7 +167,14 @@ def initialize(hash={})
end

def to_hash
{}.replace(self)
inject({}) do |hash, (k,v)|
if v.respond_to? :to_ary
hash[k] = v.to_ary.join("\n")
else
hash[k] = v
end
hash
end
end

def [](k)
Expand Down
2 changes: 1 addition & 1 deletion actionpack/lib/action_controller/verification.rb
Expand Up @@ -90,7 +90,7 @@ def verify(options={})
def verify_action(options) #:nodoc:
if prereqs_invalid?(options)
flash.update(options[:add_flash]) if options[:add_flash]
response.headers.update(options[:add_headers]) if options[:add_headers]
response.headers.merge!(options[:add_headers]) if options[:add_headers]
apply_remaining_actions(options) unless performed?
end
end
Expand Down
2 changes: 1 addition & 1 deletion actionpack/test/controller/integration_test.rb
Expand Up @@ -296,7 +296,7 @@ def test_cookie_monster
assert_equal "Gone", status_message
assert_response 410
assert_response :gone
assert_equal ["cookie_1=; path=/", "cookie_3=chocolate; path=/"], headers["Set-Cookie"]
assert_equal "cookie_1=; path=/\ncookie_3=chocolate; path=/", headers["Set-Cookie"]
assert_equal({"cookie_1"=>"", "cookie_2"=>"oatmeal", "cookie_3"=>"chocolate"}, cookies)
assert_equal "Gone", response.body
end
Expand Down
6 changes: 3 additions & 3 deletions actionpack/test/controller/rack_test.rb
Expand Up @@ -219,7 +219,7 @@ def test_simple_output
"Content-Type" => "text/html; charset=utf-8",
"Cache-Control" => "private, max-age=0, must-revalidate",
"ETag" => '"65a8e27d8879283831b664bd8b7f0ad4"',
"Set-Cookie" => [],
"Set-Cookie" => "",
"Content-Length" => "13"
}, headers)

Expand All @@ -238,7 +238,7 @@ def test_utf8_output
"Content-Type" => "text/html; charset=utf-8",
"Cache-Control" => "private, max-age=0, must-revalidate",
"ETag" => '"ebb5e89e8a94e9dd22abf5d915d112b2"',
"Set-Cookie" => [],
"Set-Cookie" => "",
"Content-Length" => "8"
}, headers)
end
Expand All @@ -254,7 +254,7 @@ def test_streaming_block
assert_equal({
"Content-Type" => "text/html; charset=utf-8",
"Cache-Control" => "no-cache",
"Set-Cookie" => []
"Set-Cookie" => ""
}, headers)

parts = []
Expand Down
14 changes: 8 additions & 6 deletions actionpack/test/controller/session/cookie_store_test.rb
Expand Up @@ -96,7 +96,7 @@ def test_setting_session_value
with_test_route_set do
get '/set_session_value'
assert_response :success
assert_equal ["_myapp_session=#{response.body}; path=/; HttpOnly"],
assert_equal "_myapp_session=#{response.body}; path=/; HttpOnly",
headers['Set-Cookie']
end
end
Expand Down Expand Up @@ -145,7 +145,7 @@ def test_doesnt_write_session_cookie_if_session_is_not_accessed
with_test_route_set do
get '/no_session_access'
assert_response :success
assert_equal [], headers['Set-Cookie']
assert_equal "", headers['Set-Cookie']
end
end

Expand All @@ -155,7 +155,7 @@ def test_doesnt_write_session_cookie_if_session_is_unchanged
"fef868465920f415f2c0652d6910d3af288a0367"
get '/no_session_access'
assert_response :success
assert_equal [], headers['Set-Cookie']
assert_equal "", headers['Set-Cookie']
end
end

Expand All @@ -164,7 +164,7 @@ def test_setting_session_value_after_session_reset
get '/set_session_value'
assert_response :success
session_payload = response.body
assert_equal ["_myapp_session=#{response.body}; path=/; HttpOnly"],
assert_equal "_myapp_session=#{response.body}; path=/; HttpOnly",
headers['Set-Cookie']

get '/call_reset_session'
Expand Down Expand Up @@ -209,7 +209,8 @@ def test_session_store_with_expire_after
assert_response :success

cookie_body = response.body
assert_equal ["_myapp_session=#{cookie_body}; path=/; expires=#{expected_expiry}; HttpOnly"], headers['Set-Cookie']
assert_equal "_myapp_session=#{cookie_body}; path=/; expires=#{expected_expiry}; HttpOnly",
headers['Set-Cookie']

# Second request does not access the session
time = Time.local(2008, 4, 25)
Expand All @@ -219,7 +220,8 @@ def test_session_store_with_expire_after
get '/no_session_access'
assert_response :success

assert_equal ["_myapp_session=#{cookie_body}; path=/; expires=#{expected_expiry}; HttpOnly"], headers['Set-Cookie']
assert_equal "_myapp_session=#{cookie_body}; path=/; expires=#{expected_expiry}; HttpOnly",
headers['Set-Cookie']
end
end

Expand Down

0 comments on commit 524d8ed

Please sign in to comment.