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
This commit is contained in:
Aaron Patterson 2015-08-25 16:34:06 -07:00
parent 67b2841fbe
commit d1b9a134cf
2 changed files with 22 additions and 8 deletions

@ -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 @@ def response_body=(body)
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

@ -12,6 +12,12 @@ module ClassMethods
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 @@ def reset_session
private
def set_response!(request)
@_response = ActionDispatch::Response.new
@_response.request = request
@_response = self.class.make_response! request
end
end
end