Refactor ActionController to use find_template and template_exists?

上级 4b6321ef
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册