# 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