diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2012-07-29 17:55:39 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2012-07-29 21:43:05 -0700 |
commit | 06c9e176ca1b74e99bc258295bfbd8d2f2f33563 (patch) | |
tree | 91e30b7d53d158e43a0f444bf52cd8688d85516d /actionpack/lib/action_controller | |
parent | 01b812672a3ef6f1032bfff5e818f1ad8957e378 (diff) | |
download | rails-06c9e176ca1b74e99bc258295bfbd8d2f2f33563.tar.gz rails-06c9e176ca1b74e99bc258295bfbd8d2f2f33563.tar.bz2 rails-06c9e176ca1b74e99bc258295bfbd8d2f2f33563.zip |
raise exceptions on header set after response committed
Diffstat (limited to 'actionpack/lib/action_controller')
-rw-r--r-- | actionpack/lib/action_controller/metal/live.rb | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/metal/live.rb b/actionpack/lib/action_controller/metal/live.rb index aea00849d3..efeeefda9d 100644 --- a/actionpack/lib/action_controller/metal/live.rb +++ b/actionpack/lib/action_controller/metal/live.rb @@ -1,4 +1,5 @@ require 'action_dispatch/http/response' +require 'delegate' module ActionController module Live @@ -30,6 +31,26 @@ module ActionController end end + class Header < DelegateClass(Hash) + def initialize(response, header) + @response = response + super(header) + end + + def []=(k,v) + if @response.committed? + raise ActionDispatch::IllegalStateError, 'header already sent' + end + + super + end + end + + def initialize(status = 200, header = {}, body = []) + header = Header.new self, header + super(status, header, body) + end + private def build_buffer(response, body) |