Refactor ActionController to use find_template and template_exists?

This commit is contained in:
Yehuda Katz + Carl Lerche 2009-09-03 12:41:28 -07:00
parent 4b6321efa9
commit e3744166ec
5 changed files with 14 additions and 10 deletions

@ -119,17 +119,17 @@ def _layout(details)
when true
raise ArgumentError, "Layouts must be specified as a String, Symbol, false, or nil"
when nil
self.class_eval <<-ruby_eval, __FILE__, __LINE__ + 1
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
def _layout(details)
self.class.cache_layout(details) do
if view_paths.exists?("#{_implied_layout_name}", details, "layouts")
if template_exists?("#{_implied_layout_name}", details, :_prefix => "layouts")
"#{_implied_layout_name}"
else
super
end
end
end
ruby_eval
RUBY
end
self.class_eval { private :_layout }
end
@ -167,7 +167,7 @@ def _layout(details) end
# details<Hash{Symbol => Object}>:: A list of details to restrict
# the lookup to. By default, layout lookup is limited to the
# formats specified for the current request.
def _layout_for_name(name, details = {:formats => formats})
def _layout_for_name(name, details)
name && _find_layout(name, details)
end
@ -183,7 +183,7 @@ def _layout_for_name(name, details = {:formats => formats})
def _find_layout(name, details)
# TODO: Make prefix actually part of details in ViewPath#find_by_parts
prefix = details.key?(:prefix) ? details.delete(:prefix) : "layouts"
view_paths.find(name, details, prefix)
find_template(name, details, :_prefix => prefix)
end
# Returns the default layout for this controller and a given set of details.

@ -119,7 +119,11 @@ def _determine_template(options)
def find_template(name, details, options)
view_paths.find(name, details, options[:_prefix], options[:_partial])
end
def template_exists?(name, details, options)
view_paths.exists?(name, details, options[:_prefix], options[:_partial])
end
def with_template_cache(name)
yield
end

@ -51,7 +51,7 @@ def default_render
def method_for_action(action_name)
super || begin
if view_paths.exists?(action_name.to_s, {:formats => formats, :locales => [I18n.locale]}, controller_path)
if template_exists?(action_name.to_s, {:formats => formats}, :_prefix => controller_path)
"default_render"
end
end

@ -191,7 +191,7 @@ def default_layout(*args)
def memoized_find_layout(layout, formats) #:nodoc:
return layout if layout.nil? || layout.respond_to?(:render)
prefix = layout.to_s =~ /layouts\// ? nil : "layouts"
view_paths.find(layout.to_s, {:formats => formats}, prefix)
find_template(layout.to_s, {:formats => formats}, :_prefix => prefix)
end
def find_layout(*args)

@ -148,10 +148,10 @@ class WithLayouts < PrefixedViews
private
def self.layout(formats)
begin
view_paths.find(name.underscore, {:formats => formats}, "layouts")
find_template(name.underscore, {:formats => formats}, :_prefix => "layouts")
rescue ActionView::MissingTemplate
begin
view_paths.find("application", {:formats => formats}, "layouts")
find_template("application", {:formats => formats}, :_prefix => "layouts")
rescue ActionView::MissingTemplate
end
end