aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorBernard Potocki <bernard.potocki@imanel.org>2013-03-14 09:13:10 +0100
committerBernard Potocki <bernard.potocki@imanel.org>2013-03-14 09:13:10 +0100
commit2651b597f2491303e143aa063f3f231bf751c382 (patch)
treecb94d5f2c7a8e5c83517c6b1481f7192057b14ff /actionpack
parent36f7732e820ce4d3c4a46bd0a1b15fd8902467b3 (diff)
downloadrails-2651b597f2491303e143aa063f3f231bf751c382.tar.gz
rails-2651b597f2491303e143aa063f3f231bf751c382.tar.bz2
rails-2651b597f2491303e143aa063f3f231bf751c382.zip
Handle conditional get in live requests - this will prevent error when using stale on live streams(issue #9636)
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_controller/metal/live.rb4
-rw-r--r--actionpack/test/controller/live_stream_test.rb15
2 files changed, 19 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/metal/live.rb b/actionpack/lib/action_controller/metal/live.rb
index 9d628c916f..fb664a69dd 100644
--- a/actionpack/lib/action_controller/metal/live.rb
+++ b/actionpack/lib/action_controller/metal/live.rb
@@ -98,6 +98,10 @@ module ActionController
def merge_default_headers(original, default)
Header.new self, super
end
+
+ def handle_conditional_get!
+ super unless committed?
+ end
end
def process(name)
diff --git a/actionpack/test/controller/live_stream_test.rb b/actionpack/test/controller/live_stream_test.rb
index 3b1a07d7af..5755444a65 100644
--- a/actionpack/test/controller/live_stream_test.rb
+++ b/actionpack/test/controller/live_stream_test.rb
@@ -48,6 +48,10 @@ module ActionController
end
response.stream.close
end
+
+ def with_stale
+ render :text => 'stale' if stale?(:etag => "123")
+ end
end
tests TestController
@@ -117,5 +121,16 @@ module ActionController
assert_equal 'zomg', response.body
assert response.stream.closed?, 'stream should be closed'
end
+
+ def test_stale_without_etag
+ get :with_stale
+ assert_equal 200, @response.status.to_i
+ end
+
+ def test_stale_with_etag
+ @request.if_none_match = Digest::MD5.hexdigest("123")
+ get :with_stale
+ assert_equal 304, @response.status.to_i
+ end
end
end