From 18542c9e00209679bdaacf64075819fb887ec856 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 21 Oct 2008 16:58:12 +0200 Subject: =?UTF-8?q?Dont=20try=20to=20auto-set=20the=20etag=20based=20on=20?= =?UTF-8?q?the=20body=20if=20any=20freshness=20headers=20have=20already=20?= =?UTF-8?q?been=20set=20[DHH/Jos=C3=A9=20Valim]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- actionpack/lib/action_controller/response.rb | 33 +++++++++++++++--------- actionpack/lib/action_controller/test_process.rb | 6 +++++ 2 files changed, 27 insertions(+), 12 deletions(-) (limited to 'actionpack/lib') diff --git a/actionpack/lib/action_controller/response.rb b/actionpack/lib/action_controller/response.rb index b440065482..559c38efd0 100644 --- a/actionpack/lib/action_controller/response.rb +++ b/actionpack/lib/action_controller/response.rb @@ -106,8 +106,14 @@ module ActionController # :nodoc: headers['Last-Modified'] = utc_time.httpdate end - def etag; headers['ETag'] end - def etag?; headers.include?('ETag') end + def etag + headers['ETag'] + end + + def etag? + headers.include?('ETag') + end + def etag=(etag) headers['ETag'] = %("#{Digest::MD5.hexdigest(ActiveSupport::Cache.expand_cache_key(etag))}") end @@ -135,16 +141,19 @@ module ActionController # :nodoc: end private - def handle_conditional_get! - if nonempty_ok_response? - self.etag ||= body - if request && request.etag_matches?(etag) - self.status = '304 Not Modified' - self.body = '' - end - end - - set_conditional_cache_control! if etag? || last_modified? + def handle_conditional_get! + if etag? || last_modified? + set_conditional_cache_control! + elsif nonempty_ok_response? + self.etag = body + + if request && request.etag_matches?(etag) + self.status = '304 Not Modified' + self.body = '' + end + + set_conditional_cache_control! + end end def nonempty_ok_response? diff --git a/actionpack/lib/action_controller/test_process.rb b/actionpack/lib/action_controller/test_process.rb index cde1f2052b..f84c48f102 100644 --- a/actionpack/lib/action_controller/test_process.rb +++ b/actionpack/lib/action_controller/test_process.rb @@ -284,6 +284,11 @@ module ActionController #:nodoc: # See AbstractResponse for more information on controller response objects. class TestResponse < AbstractResponse include TestResponseBehavior + + def recycle! + headers.delete('ETag') + headers.delete('Last-Modified') + end end class TestSession #:nodoc: @@ -386,6 +391,7 @@ module ActionController #:nodoc: end @request.recycle! + @response.recycle! @html_document = nil @request.env['REQUEST_METHOD'] ||= "GET" -- cgit v1.2.3