diff options
Diffstat (limited to 'actionpack/lib/action_controller')
-rw-r--r-- | actionpack/lib/action_controller/metal.rb | 37 | ||||
-rw-r--r-- | actionpack/lib/action_controller/metal/head.rb | 5 | ||||
-rw-r--r-- | actionpack/lib/action_controller/metal/rack_delegation.rb | 17 |
3 files changed, 29 insertions, 30 deletions
diff --git a/actionpack/lib/action_controller/metal.rb b/actionpack/lib/action_controller/metal.rb index 54980aa453..129e0bbd3c 100644 --- a/actionpack/lib/action_controller/metal.rb +++ b/actionpack/lib/action_controller/metal.rb @@ -132,6 +132,12 @@ module ActionController @controller_name ||= name.demodulize.sub(/Controller$/, '').underscore end + def self.make_response!(request) + ActionDispatch::Response.new.tap do |res| + res.request = request + end + end + # Delegates to the class' <tt>controller_name</tt> def controller_name self.class.controller_name @@ -143,11 +149,10 @@ module ActionController # and response object available. You might wish to control the # environment and response manually for performance reasons. - attr_internal :headers, :response, :request - delegate :session, :to => "@_request" + attr_internal :response, :request + delegate :session, :headers, :to => "@_request" def initialize - @_headers = {"Content-Type" => "text/html"} @_status = 200 @_request = nil @_response = nil @@ -168,7 +173,7 @@ module ActionController # in Renderer and Redirector. def content_type=(type) - headers["Content-Type"] = type.to_s + response.content_type = type end def content_type @@ -199,6 +204,7 @@ module ActionController def response_body=(body) body = [body] unless body.nil? || body.respond_to?(:each) + response.body = body super end @@ -207,12 +213,17 @@ module ActionController response_body || (response && response.committed?) end - def dispatch(name, request) #:nodoc: + def dispatch(name, request, response) #:nodoc: set_request!(request) + set_response!(response) process(name) to_a end + def set_response!(response) # :nodoc: + @_response = response + end + def set_request!(request) #:nodoc: @_request = request @_request.controller_instance = self @@ -253,20 +264,26 @@ module ActionController def self.action(name) if middleware_stack.any? middleware_stack.build(name) do |env| - new.dispatch(name, ActionDispatch::Request.new(env)) + req = ActionDispatch::Request.new(env) + res = make_response! req + new.dispatch(name, req, res) end else - lambda { |env| new.dispatch(name, ActionDispatch::Request.new(env)) } + lambda { |env| + req = ActionDispatch::Request.new(env) + res = make_response! req + new.dispatch(name, req, res) + } end end # Direct dispatch to the controller. Instantiates the controller, then # executes the action named +name+. - def self.dispatch(name, req) + def self.dispatch(name, req, res) if middleware_stack.any? - middleware_stack.build(name) { |env| new.dispatch(name, req) }.call req.env + middleware_stack.build(name) { |env| new.dispatch(name, req, res) }.call req.env else - new.dispatch(name, req) + new.dispatch(name, req, res) end end end diff --git a/actionpack/lib/action_controller/metal/head.rb b/actionpack/lib/action_controller/metal/head.rb index 056962b38c..7dbd5ef328 100644 --- a/actionpack/lib/action_controller/metal/head.rb +++ b/actionpack/lib/action_controller/metal/head.rb @@ -36,6 +36,8 @@ module ActionController headers[key.to_s.dasherize.split('-').each { |v| v[0] = v[0].chr.upcase }.join('-')] = value.to_s end + response.status = Rack::Utils.status_code(status) + self.status = status self.location = url_for(location) if location @@ -44,9 +46,6 @@ module ActionController if include_content?(self.response_code) self.content_type = content_type || (Mime[formats.first] if formats) self.response.charset = false if self.response - else - headers.delete('Content-Type') - headers.delete('Content-Length') end true diff --git a/actionpack/lib/action_controller/metal/rack_delegation.rb b/actionpack/lib/action_controller/metal/rack_delegation.rb index eb8bca1d92..5ba9a47d63 100644 --- a/actionpack/lib/action_controller/metal/rack_delegation.rb +++ b/actionpack/lib/action_controller/metal/rack_delegation.rb @@ -12,17 +12,6 @@ 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: - super - set_response!(request) end def response_body=(body) @@ -33,11 +22,5 @@ module ActionController def reset_session @_request.reset_session end - - private - - def set_response!(request) - @_response = self.class.make_response! request - end end end |