提交 4ba334c0 编写于 作者: J José Valim

Ensure controller filters are executed before stuff starts to happen.

上级 ee4c8962
...@@ -2,7 +2,6 @@ module ActionController ...@@ -2,7 +2,6 @@ module ActionController
class Base < Metal class Base < Metal
abstract! abstract!
include AbstractController::Callbacks
include AbstractController::Layouts include AbstractController::Layouts
include AbstractController::Translation include AbstractController::Translation
...@@ -23,6 +22,7 @@ class Base < Metal ...@@ -23,6 +22,7 @@ class Base < Metal
# Rails 2.x compatibility # Rails 2.x compatibility
include ActionController::Compatibility include ActionController::Compatibility
include ActionController::ImplicitRender
include ActionController::Cookies include ActionController::Cookies
include ActionController::Flash include ActionController::Flash
...@@ -36,8 +36,12 @@ class Base < Metal ...@@ -36,8 +36,12 @@ class Base < Metal
# Add instrumentations hooks at the bottom, to ensure they instrument # Add instrumentations hooks at the bottom, to ensure they instrument
# all the methods properly. # all the methods properly.
include ActionController::Instrumentation include ActionController::Instrumentation
include ImplicitRender
# Before callbacks should also be executed the earliest as possible, so
# also include them at the bottom.
include AbstractController::Callbacks
# The same with rescue, append it at the end to wrap as much as possible.
include ActionController::Rescue include ActionController::Rescue
def self.inherited(klass) def self.inherited(klass)
......
...@@ -6,7 +6,7 @@ module Rendering ...@@ -6,7 +6,7 @@ module Rendering
include AbstractController::Rendering include AbstractController::Rendering
# Before processing, set the request formats in current controller formats. # Before processing, set the request formats in current controller formats.
def process(*) #:nodoc: def process_action(*) #:nodoc:
self.formats = request.formats.map { |x| x.to_sym } self.formats = request.formats.map { |x| x.to_sym }
super super
end end
......
...@@ -617,6 +617,15 @@ def rescue_action(e) ...@@ -617,6 +617,15 @@ def rescue_action(e)
raise raise
end end
before_filter :only => :render_with_filters do
request.format = :xml
end
# Ensure that the before filter is executed *before* self.formats is set.
def render_with_filters
render :action => :formatted_xml_erb
end
private private
def determine_layout def determine_layout
...@@ -1034,6 +1043,11 @@ def test_render_with_explicit_string_template ...@@ -1034,6 +1043,11 @@ def test_render_with_explicit_string_template
assert_equal "<html>Hello world!</html>", @response.body assert_equal "<html>Hello world!</html>", @response.body
end end
def test_render_with_filters
get :render_with_filters
assert_equal "<test>passed formatted xml erb</test>", @response.body
end
# :ported: # :ported:
def test_double_render def test_double_render
assert_raise(ActionController::DoubleRenderError) { get :double_render } assert_raise(ActionController::DoubleRenderError) { get :double_render }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册