1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

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

View file

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

View file

@ -120,6 +120,10 @@ module AbstractController
view_paths.find(name, details, options[:_prefix], options[:_partial]) view_paths.find(name, details, options[:_prefix], options[:_partial])
end end
def template_exists?(name, details, options)
view_paths.exists?(name, details, options[:_prefix], options[:_partial])
end
def with_template_cache(name) def with_template_cache(name)
yield yield
end end

View file

@ -51,7 +51,7 @@ module ActionController
def method_for_action(action_name) def method_for_action(action_name)
super || begin 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" "default_render"
end end
end end

View file

@ -191,7 +191,7 @@ module ActionController #:nodoc:
def memoized_find_layout(layout, formats) #:nodoc: def memoized_find_layout(layout, formats) #:nodoc:
return layout if layout.nil? || layout.respond_to?(:render) return layout if layout.nil? || layout.respond_to?(:render)
prefix = layout.to_s =~ /layouts\// ? nil : "layouts" 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 end
def find_layout(*args) def find_layout(*args)

View file

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