module Sinatra::ContentFor

Public Instance Methods

content_for(key, &block) click to toggle source

Capture a block of content to be rendered later. For example:

<% content_for :head do %>
  <script type="text/javascript" src="/foo.js"></script>
<% end %>

You can call content_for multiple times with the same key (in the example :head), and when you render the blocks for that key all of them will be rendered, in the same order you captured them.

Your blocks can also receive values, which are passed to them by yield_content

# File lib/mongodb_logger/server/helpers/content_for.rb, line 16
def content_for(key, &block)
  content_blocks[key.to_sym] << block
end
yield_content(key, *args) click to toggle source

Render the captured blocks for a given key. For example:

<head>
  <title>Example</title>
  <% yield_content :head %>
</head>

Would render everything you declared with content_for :head before closing the <head> tag.

You can also pass values to the content blocks by passing them as arguments after the key:

<% yield_content :head, 1, 2 %>

Would pass 1 and 2 to all the blocks registered for :head.

NOTICE that you call this without an = sign. IE, in a <% %> block, and not in a <%= %> block.

# File lib/mongodb_logger/server/helpers/content_for.rb, line 40
def yield_content(key, *args)
  content_blocks[key.to_sym].map do |content| 
    if respond_to?(:block_is_haml?) && block_is_haml?(content)
      capture_haml(*args, &content)
    else
      content.call(*args)
    end
  end.join
end

Private Instance Methods

content_blocks() click to toggle source
# File lib/mongodb_logger/server/helpers/content_for.rb, line 52
def content_blocks
  @content_blocks ||= Hash.new {|h,k| h[k] = [] }
end