From d1b9a134cfc6ca543dab594f87e6b7c1ea0050f5 Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Tue, 25 Aug 2015 16:34:06 -0700 Subject: move response allocation to the class level we don't need an instance to figure out what type of response to allocate. Later we'll pull this up the stack and pass the response object down --- actionpack/lib/action_controller/metal/live.rb | 21 +++++++++++++++------ .../lib/action_controller/metal/rack_delegation.rb | 9 +++++++-- 2 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 58150cd9a9..69583f8ab4 100644 --- a/actionpack/lib/action_controller/metal/live.rb +++ b/actionpack/lib/action_controller/metal/live.rb @@ -33,6 +33,20 @@ module ActionController # the main thread. Make sure your actions are thread safe, and this shouldn't # be a problem (don't share state across threads, etc). module Live + extend ActiveSupport::Concern + + module ClassMethods + def make_response!(request) + if request.env["HTTP_VERSION"] == "HTTP/1.0" + super + else + Live::Response.new.tap do |res| + res.request = request + end + end + end + end + # This class provides the ability to write an SSE (Server Sent Event) # to an IO stream. The class is initialized with a stream and can be used # to either write a JSON string or an object which can be converted to JSON. @@ -311,12 +325,7 @@ module ActionController end def set_response!(request) - if request.env["HTTP_VERSION"] == "HTTP/1.0" - super - else - @_response = Live::Response.new - @_response.request = request - end + @_response = self.class.make_response! request end end end diff --git a/actionpack/lib/action_controller/metal/rack_delegation.rb b/actionpack/lib/action_controller/metal/rack_delegation.rb index ae9d89cc8c..eb8bca1d92 100644 --- a/actionpack/lib/action_controller/metal/rack_delegation.rb +++ b/actionpack/lib/action_controller/metal/rack_delegation.rb @@ -12,6 +12,12 @@ module ActionController def build_with_env(env = {}) #:nodoc: new.tap { |c| c.set_request! ActionDispatch::Request.new(env) } end + + def make_response!(request) + ActionDispatch::Response.new.tap do |res| + res.request = request + end + end end def set_request!(request) #:nodoc: @@ -31,8 +37,7 @@ module ActionController private def set_response!(request) - @_response = ActionDispatch::Response.new - @_response.request = request + @_response = self.class.make_response! request end end end -- cgit v1.2.3