Missing :js template falls back to :html, so you don't have to explicitly specify template format everywhere, breaking old code
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9119 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
6b5fe9c644
commit
6efee90bf2
@ -131,15 +131,20 @@ def extract_base_path_from(full_path)
|
||||
# # => "rhtml"
|
||||
#
|
||||
def pick_template_extension(template_path)
|
||||
find_template_extension_from_handler(template_path) || find_template_extension_from_first_render
|
||||
if extension = find_template_extension_from_handler(template_path, @template.template_format) || find_template_extension_from_first_render
|
||||
extension
|
||||
elsif @template.template_format == :js && extension = find_template_extension_from_handler(template_path, :html)
|
||||
@template.template_format = :html
|
||||
extension
|
||||
end
|
||||
end
|
||||
|
||||
def find_template_extension_from_handler(template_path)
|
||||
formatted_template_path = "#{template_path}.#{@template.template_format}"
|
||||
def find_template_extension_from_handler(template_path, template_format = @template.template_format)
|
||||
formatted_template_path = "#{template_path}.#{template_format}"
|
||||
|
||||
view_paths.each do |path|
|
||||
if (extensions = @@file_extension_cache[path][formatted_template_path]).any?
|
||||
return "#{@template.template_format}.#{extensions.first}"
|
||||
return "#{template_format}.#{extensions.first}"
|
||||
elsif (extensions = @@file_extension_cache[path][template_path]).any?
|
||||
return extensions.first.to_s
|
||||
end
|
||||
|
@ -59,4 +59,32 @@ def test_should_prepare_on_initialization
|
||||
end
|
||||
end
|
||||
|
||||
class PartialTemplateFallbackTest < Test::Unit::TestCase
|
||||
def setup
|
||||
@view = ActionView::Base.new(LOAD_PATH_ROOT)
|
||||
@path = 'test/layout_for_partial'
|
||||
end
|
||||
|
||||
def test_default
|
||||
template = ActionView::PartialTemplate.new(@view, @path, nil)
|
||||
assert_equal 'test/_layout_for_partial', template.path
|
||||
assert_equal 'erb', template.extension
|
||||
assert_equal :html, @view.template_format
|
||||
end
|
||||
|
||||
def test_js
|
||||
@view.template_format = :js
|
||||
template = ActionView::PartialTemplate.new(@view, @path, nil)
|
||||
assert_equal 'test/_layout_for_partial', template.path
|
||||
assert_equal 'erb', template.extension
|
||||
assert_equal :html, @view.template_format
|
||||
end
|
||||
|
||||
def test_xml
|
||||
@view.template_format = :xml
|
||||
assert_raise ActionView::ActionViewError do
|
||||
ActionView::PartialTemplate.new(@view, @path, nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user