class Hanami::View::ERB::Filters::Block
Implicitly captures and outputs the content inside blocks opened in ERB
expression tags, such as ‘<%= form_for(:post) do %>`.
Inspired by Slim’s Slim::Controls::Filter#on_slim_output.
@since 2.1.0 @api private
Constants
- END_LINE_RE
Public Instance Methods
on_erb_block(escape, code, content)
click to toggle source
# File lib/hanami/view/erb/filters/block.rb, line 17 def on_erb_block(escape, code, content) tmp = unique_name # Remove the last `end` :code sexp, since this is technically "outside" the block # contents, which we want to capture separately below. This `end` is added back after # capturing the content below. case content.last in [:code, c] if c =~ END_LINE_RE content.pop end [:multi, # Capture the result of the code in a variable. We can't do `[:dynamic, code]` because # it's probably not a complete expression (which is a requirement for Temple). [:code, "#{tmp} = #{code}"], # Capture the content of a block in a separate buffer. This means that `yield` will # not output the content to the current buffer, but rather return the output. [:capture, unique_name, compile(content)], [:code, "end"], # Output the content. [:escape, escape, [:dynamic, tmp]] ] end