diff options
author | Konstantin Haase <konstantin.haase@gmail.com> | 2013-09-09 07:44:58 -0700 |
---|---|---|
committer | Konstantin Haase <konstantin.haase@gmail.com> | 2013-09-09 07:44:58 -0700 |
commit | bcd46f738c4333599dfa6730c52f991334cb8e9e (patch) | |
tree | cc3cf0615897d30720b40e536373cc08a366bba0 | |
parent | 0adc7ceb9359426fee21d5e554dd62ec7d535e34 (diff) | |
parent | 16a0033784a459563140e4f3df2c4973f105bbf9 (diff) | |
download | rack-bcd46f738c4333599dfa6730c52f991334cb8e9e.tar.gz |
Merge pull request #600 from SamSaffron/master
avoid copying entire payload twice just to hash it
-rw-r--r-- | lib/rack/etag.rb | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/rack/etag.rb b/lib/rack/etag.rb index 3f5006a6..5fa09abd 100644 --- a/lib/rack/etag.rb +++ b/lib/rack/etag.rb @@ -55,10 +55,14 @@ module Rack def digest_body(body) parts = [] - body.each { |part| parts << part } - string_body = parts.join - digest = Digest::MD5.hexdigest(string_body) unless string_body.empty? - [digest, parts] + digest = nil + + body.each do |part| + parts << part + (digest ||= Digest::MD5.new) << part unless part.empty? + end + + [digest && digest.hexdigest, parts] end end end |