From 38a3fed404e5e4f5c03be6f5288848d6d4f5d98c Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Mon, 13 Aug 2012 14:20:04 -0400 Subject: [PATCH] push header merge down to a private method so that live responses can have their own header object --- actionpack/lib/action_controller/metal/live.rb | 9 ++++----- actionpack/lib/action_dispatch/http/response.rb | 10 +++++++--- actionpack/test/dispatch/live_response_test.rb | 11 +++++++++++ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/actionpack/lib/action_controller/metal/live.rb b/actionpack/lib/action_controller/metal/live.rb index bba75b22fd3e9..32e5afa3351db 100644 --- a/actionpack/lib/action_controller/metal/live.rb +++ b/actionpack/lib/action_controller/metal/live.rb @@ -81,11 +81,6 @@ def to_hash end end - def initialize(status = 200, header = {}, body = []) - header = Header.new self, header - super(status, header, body) - end - def commit! headers.freeze super @@ -98,6 +93,10 @@ def build_buffer(response, body) body.each { |part| buf.write part } buf end + + def merge_default_headers(original, default) + Header.new self, super + end end def process(name) diff --git a/actionpack/lib/action_dispatch/http/response.rb b/actionpack/lib/action_dispatch/http/response.rb index 5014ad80aade9..11b7534ea4f94 100644 --- a/actionpack/lib/action_dispatch/http/response.rb +++ b/actionpack/lib/action_dispatch/http/response.rb @@ -97,9 +97,7 @@ def closed? def initialize(status = 200, header = {}, body = []) super() - if self.class.default_headers.respond_to?(:merge) - header = self.class.default_headers.merge(header) - end + header = merge_default_headers(header, self.class.default_headers) self.body, self.header, self.status = body, header, status @@ -243,6 +241,12 @@ def cookies private + def merge_default_headers(original, default) + return original unless default.respond_to?(:merge) + + default.merge(original) + end + def build_buffer(response, body) Buffer.new response, body end diff --git a/actionpack/test/dispatch/live_response_test.rb b/actionpack/test/dispatch/live_response_test.rb index 153f58c42c082..e16f23914b0db 100644 --- a/actionpack/test/dispatch/live_response_test.rb +++ b/actionpack/test/dispatch/live_response_test.rb @@ -14,6 +14,17 @@ def test_header_merge refute_equal header, @response.header end + def test_initialize_with_default_headers + r = Class.new(Live::Response) do + def self.default_headers + { 'omg' => 'g' } + end + end + + header = r.new.header + assert_kind_of(ActionController::Live::Response::Header, header) + end + def test_parallel latch = ActiveSupport::Concurrency::Latch.new