module ActionView::Helpers::CaptureHelper

def capture(*args, &block)


@greeting # => "Welcome to my shiny new web page! The date and time is 2018-09-06 11:09:16 -0500"

The return of capture is the string generated by the block. For Example:



<%= @greeting %>

<%= @greeting %>


You can then use that variable anywhere else. For example:

end
"The current timestamp is #{Time.now}."
@timestamp = capture do

...and Builder (RXML) templates.

<% end %>
<%= Time.now %>
Welcome to my shiny new web page! The date and time is
<% @greeting = capture do %>

The capture method can be used in \ERB templates...

You can then use this object anywhere in your templates, layout, or helpers.
The capture method extracts part of a template as a string object.
def capture(*args, &block)
  value = nil
  @output_buffer ||= ActionView::OutputBuffer.new
  buffer = @output_buffer.capture { value = yield(*args) }
  string = if @output_buffer.equal?(value)
    buffer
  else
    buffer.presence || value
  end
  case string
  when OutputBuffer
    string.to_s
  when ActiveSupport::SafeBuffer
    string
  when String
    ERB::Util.html_escape(string)
  end
end