lib/rack/response.rb in rack-0.2.0 vs lib/rack/response.rb in rack-0.3.0
- old
+ new
@@ -53,12 +53,14 @@
def set_cookie(key, value)
case value
when Hash
domain = "; domain=" + value[:domain] if value[:domain]
path = "; path=" + value[:path] if value[:path]
+ # According to RFC 2109, we need dashes here.
+ # N.B.: cgi.rb uses spaces...
expires = "; expires=" + value[:expires].clone.gmtime.
- strftime("%a, %d %b %Y %H:%M:%S GMT") if value[:expires]
+ strftime("%a, %d-%b-%Y %H:%M:%S GMT") if value[:expires]
value = value[:value]
end
value = [value] unless Array === value
cookie = Utils.escape(key) + "=" +
value.map { |v| Utils.escape v }.join("&") +
@@ -74,11 +76,11 @@
end
end
def delete_cookie(key, value={})
unless Array === self["Set-Cookie"]
- self["Set-Cookie"] = [self["Set-Cookie"]]
+ self["Set-Cookie"] = [self["Set-Cookie"]].compact
end
self["Set-Cookie"].reject! { |cookie|
cookie =~ /\A#{Utils.escape(key)}=/
}
@@ -90,11 +92,11 @@
def finish(&block)
@block = block
- if [201, 204, 304].include?(status.to_i)
+ if [204, 304].include?(status.to_i)
header.delete "Content-Type"
[status.to_i, header.to_hash, []]
else
[status.to_i, header.to_hash, self]
end
@@ -108,9 +110,13 @@
end
def write(str)
@writer.call str.to_s
str
+ end
+
+ def close
+ body.close if body.respond_to?(:close)
end
def empty?
@block == nil && @body.empty?
end