提交 35ffc1af 编写于 作者: J Jeremy Kemper

Declare file extensions exempt from layouts. Closes #6219.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5126 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
上级 2271c17d
*SVN*
* Declare file extensions exempt from layouts. #6219 [brandon]
Example: ActionController::Base.exempt_from_layout 'rpdf'
* Add chained replace/update support for assert_select_rjs [Rick Olson]
Given RJS like...
......
......@@ -315,6 +315,9 @@ class Base
# Returns the name of the action this controller is processing.
attr_accessor :action_name
# Templates that are exempt from layouts
@@exempt_from_layout = Set.new([/\.rjs$/])
class << self
# Factory for the standard create, process loop where the controller is discarded after processing.
def process(request, response) #:nodoc:
......@@ -395,6 +398,14 @@ def filter_parameter_logging(*filter_words, &block)
filtered_parameters
end
end
# Don't render layouts for templates with the given extensions.
def exempt_from_layout(*extensions)
regexps = extensions.collect do |extension|
extension.is_a?(Regexp) ? extension : /\.#{Regexp.escape(extension.to_s)}$/
end
@@exempt_from_layout.merge regexps
end
end
public
......@@ -1094,7 +1105,10 @@ def template_public?(template_name = default_template_name)
end
def template_exempt_from_layout?(template_name = default_template_name)
template_name =~ /\.rjs$/ || (@template.pick_template_extension(template_name) == :rjs rescue false)
@@exempt_from_layout.any? { |ext| template_name =~ ext } or
@template.pick_template_extension(template_name) == :rjs
rescue
false
end
def assert_existence_of_template_file(template_name)
......
......@@ -72,6 +72,39 @@ def test_namespaced_controllers_auto_detect_layouts
end
end
class ExemptFromLayoutTest < Test::Unit::TestCase
def setup
@controller = LayoutTest.new
end
def test_rjs_exempt_from_layout
assert @controller.send(:template_exempt_from_layout?, 'test.rjs')
end
def test_rhtml_and_rxml_not_exempt_from_layout
assert !@controller.send(:template_exempt_from_layout?, 'test.rhtml')
assert !@controller.send(:template_exempt_from_layout?, 'test.rxml')
end
def test_other_extension_not_exempt_from_layout
assert !@controller.send(:template_exempt_from_layout?, 'test.random')
end
def test_add_extension_to_exempt_from_layout
['rpdf', :rpdf].each do |ext|
assert_nothing_raised do
ActionController::Base.exempt_from_layout ext
end
assert @controller.send(:template_exempt_from_layout?, "test.#{ext}")
end
end
def test_add_regexp_to_exempt_from_layout
ActionController::Base.exempt_from_layout /\.rdoc/
assert @controller.send(:template_exempt_from_layout?, 'test.rdoc')
end
end
class DefaultLayoutController < LayoutTest
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册