From b61d5c409291ed8574a8ed8f9c3e1d1c9fe53b9f Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 9 Sep 2013 20:34:23 +1000 Subject: [PATCH] freedom patches for fixes submitted to rack --- lib/freedom_patches/rack_patches.rb | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 lib/freedom_patches/rack_patches.rb diff --git a/lib/freedom_patches/rack_patches.rb b/lib/freedom_patches/rack_patches.rb new file mode 100644 index 00000000000..e02aca52cf5 --- /dev/null +++ b/lib/freedom_patches/rack_patches.rb @@ -0,0 +1,42 @@ +# 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