module ActionView::Layouts

def _layout_for(*args, &block) #:nodoc:

:nodoc:


Hello David


would be
and the struct specified would be passed into the block as an argument. The result
In this case, the layout would receive the block passed into render :layout,


<%= yield Struct.new(:name).new("David") %>

# The layout

<% end %>
Hello <%= customer.name %>
<%= render :layout => "my_layout" do |customer| %>
# The template

Finally, the block can take block arguments, which can be passed in by +yield+:


Content


would be
this method returns the block that was passed in to render :layout, and the response
In this case, instead of the default block, which would return content_for(:layout),


<%= yield %>

# The layout

<% end %>
Content
<%= render :layout => "my_layout" do %>
# The template

The user can override this default by passing a block to the layout:

If the user calls simply +yield+, the default block returns content_for(:layout).
yield :some_name, the block, by default, returns content_for(:some_name).
You can think of a layout as a method that is called with a block. If the user calls

Returns the contents that are yielded to a layout, given a name or a block.
def _layout_for(*args, &block) #:nodoc:
  name = args.first
  if name.is_a?(Symbol)
    @_content_for[name].html_safe
  elsif block
    capture(*args, &block)
  else
    @_content_for[:layout].html_safe
  end
end

def _render_layout(layout, locals, &block) #:nodoc:

:nodoc:
Contains the logic that actually renders the layout.
def _render_layout(layout, locals, &block) #:nodoc:
  layout.render(self, locals){ |*name| _layout_for(*name, &block) }
end

def find_layout(layout)

the given name exists across all details before raising the error.
context object. If no layout is found, it checks if at least a layout with
This is the method which actually finds the layout using details in the lookup
def find_layout(layout)
  begin
    with_layout_format do
      layout =~ /^\// ?
        with_fallbacks { find_template(layout) } : find_template(layout)
    end
  rescue ActionView::MissingTemplate => e
    update_details(:formats => nil) do
      raise unless template_exists?(layout)
    end
  end
end