43 lines
955 B
Ruby
43 lines
955 B
Ruby
# patch https://github.com/rack/rack/pull/600
|
|
#
|
|
class Rack::ETag
|
|
private
|
|
|
|
def digest_body(body)
|
|
parts = []
|
|
has_body = false
|
|
|
|
body.each do |part|
|
|
parts << part
|
|
has_body ||= part.length > 0
|
|
end
|
|
|
|
hexdigest =
|
|
if has_body
|
|
digest = Digest::MD5.new
|
|
parts.each { |part| digest << part }
|
|
digest.hexdigest
|
|
end
|
|
|
|
[hexdigest, parts]
|
|
end
|
|
end
|
|
|
|
# patch https://github.com/rack/rack/pull/596
|
|
#
|
|
class Rack::ConditionalGet
|
|
private
|
|
def to_rfc2822(since)
|
|
# shortest possible valid date is the obsolete: 1 Nov 97 09:55 A
|
|
# anything shorter is invalid, this avoids exceptions for common cases
|
|
# most common being the empty string
|
|
if since && since.length >= 16
|
|
# NOTE: there is no trivial way to write this in a non execption way
|
|
# _rfc2822 returns a hash but is not that usable
|
|
Time.rfc2822(since) rescue nil
|
|
else
|
|
nil
|
|
end
|
|
end
|
|
end
|