From 13df194c002f362556560303da9c73a24ebb189e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sun, 1 May 2011 19:39:57 +0200 Subject: Tidy up pending TODOs after discussion with Mr. Gatoz (@wycats). --- actionpack/lib/action_view/context.rb | 76 ++++++++--------------------------- 1 file changed, 16 insertions(+), 60 deletions(-) (limited to 'actionpack/lib/action_view/context.rb') diff --git a/actionpack/lib/action_view/context.rb b/actionpack/lib/action_view/context.rb index d501a6eaf9..083856b2ca 100644 --- a/actionpack/lib/action_view/context.rb +++ b/actionpack/lib/action_view/context.rb @@ -10,71 +10,27 @@ module ActionView # # In order to work with ActionController, a Context must just include this module. # The initialization of the variables used by the context (@output_buffer, @view_flow, - # and @virtual_path) is responsibility of the object that includes this module. + # and @virtual_path) is responsibility of the object that includes this module + # (although you can call _prepare_context defined below). module Context include CompiledTemplates attr_accessor :output_buffer, :view_flow - # TODO Provide an easy method that initializes all variables? - - # Returns the contents that are yielded to a layout, given a name or a block. - # - # You can think of a layout as a method that is called with a block. If the user calls - # yield :some_name, the block, by default, returns content_for(:some_name). - # If the user calls simply +yield+, the default block returns content_for(:layout). - # - # The user can override this default by passing a block to the layout: - # - # # The template - # <%= render :layout => "my_layout" do %> - # Content - # <% end %> - # - # # The layout - # - # <%= yield %> - # - # - # In this case, instead of the default block, which would return content_for(:layout), - # this method returns the block that was passed in to render :layout, and the response - # would be - # - # - # Content - # - # - # Finally, the block can take block arguments, which can be passed in by +yield+: - # - # # The template - # <%= render :layout => "my_layout" do |customer| %> - # Hello <%= customer.name %> - # <% end %> - # - # # The layout - # - # <%= yield Struct.new(:name).new("David") %> - # - # - # In this case, the layout would receive the block passed into render :layout, - # and the struct specified would be passed into the block as an argument. The result - # would be - # - # - # Hello David - # - # - def _layout_for(*args, &block) - name = args.first + # Prepares the context by setting the appropriate instance variables. + # :api: plugin + def _prepare_context + @view_flow = OutputFlow.new + @output_buffer = nil + @virtual_path = nil + end - if name.is_a?(Symbol) - view_flow.get(name).html_safe - elsif block - # TODO Import capture into AV::Context or - # leave it as implicit dependency? - capture(*args, &block) - else - view_flow.get(:layout).html_safe - end + # Encapsulates the interaction with the view flow so it + # returns the correct buffer on yield. This is usually + # overwriten by helpers to add more behavior. + # :api: plugin + def _layout_for(name=nil) + name ||= :layout + view_flow.get(name).html_safe end end end \ No newline at end of file -- cgit v1.2.3