diff options
author | Yehuda Katz <wycats@gmail.com> | 2009-08-11 23:43:15 -0700 |
---|---|---|
committer | Yehuda Katz <wycats@gmail.com> | 2009-08-15 12:32:01 -0700 |
commit | 9f5cd0156ab907d8097fc9c588823a9b09038b93 (patch) | |
tree | a240d8f10d15099a3b040a94b66f13d0f570e0ef /actionpack/lib/action_view | |
parent | 27adcd1c1a5cc566cfa8c5f8268b65ef01a7e865 (diff) | |
download | rails-9f5cd0156ab907d8097fc9c588823a9b09038b93.tar.gz rails-9f5cd0156ab907d8097fc9c588823a9b09038b93.tar.bz2 rails-9f5cd0156ab907d8097fc9c588823a9b09038b93.zip |
More cleanup of ActionView and reduction in need for blocks in some cases:
* only one of partial_name or :as will be available as a local
* `object` is removed
* Simplify _layout_for in most cases.
* Remove <% render :partial do |args| %>
* <% render :partial do %> still works fine
Diffstat (limited to 'actionpack/lib/action_view')
-rw-r--r-- | actionpack/lib/action_view/render/partials.rb | 13 | ||||
-rw-r--r-- | actionpack/lib/action_view/render/rendering.rb | 22 | ||||
-rw-r--r-- | actionpack/lib/action_view/template/handler.rb | 4 | ||||
-rw-r--r-- | actionpack/lib/action_view/template/template.rb | 1 |
4 files changed, 11 insertions, 29 deletions
diff --git a/actionpack/lib/action_view/render/partials.rb b/actionpack/lib/action_view/render/partials.rb index e287021eb1..188f0d0214 100644 --- a/actionpack/lib/action_view/render/partials.rb +++ b/actionpack/lib/action_view/render/partials.rb @@ -223,16 +223,14 @@ module ActionView def collection_with_template(template) options = @options - segments, locals, as = [], @locals, options[:as] || :object + segments, locals, as = [], @locals, options[:as] || template.variable_name - variable_name = template.variable_name counter_name = template.counter_name locals[counter_name] = -1 collection.each do |object| locals[counter_name] += 1 - locals[variable_name] = object - locals[as] = object if as + locals[as] = object segments << template.render(@view, locals) end @@ -242,14 +240,13 @@ module ActionView def collection_without_template options = @options - segments, locals, as = [], @locals, options[:as] || :object + segments, locals, as = [], @locals, options[:as] index, template = -1, nil collection.each do |object| template = find_template(partial_path(object)) locals[template.counter_name] = (index += 1) locals[template.variable_name] = object - locals[as] = object if as segments << template.render(@view, locals) end @@ -265,8 +262,8 @@ module ActionView @locals[:object] = @locals[template.variable_name] = object @locals[@options[:as]] = object if @options[:as] - content = template.render(@view, @locals) do |*names| - @view._layout_for(names, &@block) + content = template.render(@view, @locals) do |*name| + @view._layout_for(*name, &@block) end return content if @block || !@options[:layout] find_template(@options[:layout]).render(@view, @locals) { content } diff --git a/actionpack/lib/action_view/render/rendering.rb b/actionpack/lib/action_view/render/rendering.rb index e505fe6c8c..e04800e6e8 100644 --- a/actionpack/lib/action_view/render/rendering.rb +++ b/actionpack/lib/action_view/render/rendering.rb @@ -70,21 +70,11 @@ module ActionView # In this case, the layout would receive the block passed into <tt>render :layout</tt>, # and the Struct specified in the layout would be passed into the block. The result # would be <html>Hello David</html>. - def _layout_for(names, &block) + def _layout_for(name = nil) + return @_content_for[name || :layout] if !block_given? || name + with_output_buffer do - # This is due to the potentially ambiguous use of yield when - # a block is passed in to a template *and* there is a content_for() - # of the same name. Suggested solution: require explicit use of content_for - # in these ambiguous cases. - # - # We would be able to continue supporting yield in all non-ambiguous - # cases. Question: should we deprecate yield in favor of content_for - # and reserve yield for cases where there is a yield into a real block? - if @_content_for.key?(names.first) || !block_given? - return @_content_for[names.first || :layout] - else - return yield(names) - end + return yield end end @@ -93,7 +83,7 @@ module ActionView template = Template.new(options[:inline], "inline #{options[:inline].inspect}", handler, {}) locals = options[:locals] || {} content = template.render(self, locals) - content = layout.render(self, locals) { content } if layout + content = layout.render(self, locals) {|*name| _layout_for(*name) } if layout content end @@ -134,7 +124,7 @@ module ActionView if layout @_layout = layout.identifier logger.info("Rendering template within #{layout.identifier}") if logger - content = layout.render(self, locals) + content = layout.render(self, locals) {|*name| _layout_for(*name) } end content end diff --git a/actionpack/lib/action_view/template/handler.rb b/actionpack/lib/action_view/template/handler.rb index 7311e5e12f..4bf58b9fa8 100644 --- a/actionpack/lib/action_view/template/handler.rb +++ b/actionpack/lib/action_view/template/handler.rb @@ -29,10 +29,6 @@ module ActionView raise "Need to implement #{self.class.name}#call(template)" end - def initialize(view = nil) - @view = view - end - def render(template, local_assigns) raise "Need to implement #{self.class.name}#render(template, local_assigns)" end diff --git a/actionpack/lib/action_view/template/template.rb b/actionpack/lib/action_view/template/template.rb index f6270e5616..8f23f9b9e3 100644 --- a/actionpack/lib/action_view/template/template.rb +++ b/actionpack/lib/action_view/template/template.rb @@ -28,7 +28,6 @@ module ActionView def render(view, locals, &block) method_name = compile(locals, view) - block ||= proc {|*names| view._layout_for(names) } view.send(method_name, locals, &block) rescue Exception => e if e.is_a?(TemplateError) |