aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-03-08 02:04:18 +0100
committerJosé Valim <jose.valim@gmail.com>2010-03-08 02:04:18 +0100
commitffd8d753f171a33cb0f8dadaff7fc5ba12b8f6b0 (patch)
treefca50e828f91520f2e99323eff90e1bbc81bea7d /actionpack/lib/action_view
parentc7564d74e8a9b451f9fc78566ab0c734671f9612 (diff)
downloadrails-ffd8d753f171a33cb0f8dadaff7fc5ba12b8f6b0.tar.gz
rails-ffd8d753f171a33cb0f8dadaff7fc5ba12b8f6b0.tar.bz2
rails-ffd8d753f171a33cb0f8dadaff7fc5ba12b8f6b0.zip
Move layout lookup to views.
Diffstat (limited to 'actionpack/lib/action_view')
-rw-r--r--actionpack/lib/action_view/base.rb6
-rw-r--r--actionpack/lib/action_view/render/partials.rb2
-rw-r--r--actionpack/lib/action_view/render/rendering.rb16
-rw-r--r--actionpack/lib/action_view/template/lookup.rb8
4 files changed, 25 insertions, 7 deletions
diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb
index 22bc390dc5..5acd2a8b82 100644
--- a/actionpack/lib/action_view/base.rb
+++ b/actionpack/lib/action_view/base.rb
@@ -263,11 +263,7 @@ module ActionView #:nodoc:
attr_internal :controller, :template, :config
attr_reader :template_lookup
- delegate :find, :view_paths, :view_paths=, :to => :template_lookup
-
- def formats=(formats)
- update_details(:formats => Array(formats))
- end
+ delegate :find, :formats, :formats=, :view_paths, :view_paths=, :to => :template_lookup
def update_details(details)
old_details = template_lookup.details
diff --git a/actionpack/lib/action_view/render/partials.rb b/actionpack/lib/action_view/render/partials.rb
index 74513935a7..52cb188508 100644
--- a/actionpack/lib/action_view/render/partials.rb
+++ b/actionpack/lib/action_view/render/partials.rb
@@ -330,7 +330,7 @@ module ActionView
details = options[:_details]
# TODO This should happen automatically as well
- self.formats = details[:formats] if details
+ self.formats = details[:formats] if details[:formats]
renderer = PartialRenderer.new(self, options, nil)
text = renderer.render
options[:_template] = renderer.template
diff --git a/actionpack/lib/action_view/render/rendering.rb b/actionpack/lib/action_view/render/rendering.rb
index 1be5675e37..b92a03ddbd 100644
--- a/actionpack/lib/action_view/render/rendering.rb
+++ b/actionpack/lib/action_view/render/rendering.rb
@@ -88,12 +88,26 @@ module ActionView
# _layout:: The layout, if any, to wrap the Template in
def render_template(options)
_evaluate_assigns_and_ivars
- template, layout = options.values_at(:_template, :_layout)
+ template, layout = options.values_at(:_template, :layout)
_render_template(template, layout, options)
end
+ def _find_layout(template, layout)
+ begin
+ prefix = "layouts" unless layout =~ /\blayouts/
+ layout = find(layout, prefix)
+ rescue ActionView::MissingTemplate => e
+ update_details(:formats => nil) do
+ raise unless template_lookup.exists?(layout, prefix)
+ end
+ end
+ end
+
def _render_template(template, layout = nil, options = {})
+ self.formats = template.details[:formats]
+
locals = options[:locals] || {}
+ layout = _find_layout(template, layout) if layout.is_a?(String)
ActiveSupport::Notifications.instrument("action_view.render_template",
:identifier => template.identifier, :layout => layout.try(:identifier)) do
diff --git a/actionpack/lib/action_view/template/lookup.rb b/actionpack/lib/action_view/template/lookup.rb
index ea3a12615b..30de093934 100644
--- a/actionpack/lib/action_view/template/lookup.rb
+++ b/actionpack/lib/action_view/template/lookup.rb
@@ -23,6 +23,14 @@ module ActionView
self.view_paths = view_paths
end
+ def formats
+ @details[:formats]
+ end
+
+ def formats=(value)
+ self.details = @details.merge(:formats => Array(value))
+ end
+
def view_paths=(paths)
@view_paths = ActionView::Base.process_view_paths(paths)
end