class Erubi::CaptureBlockEngine

An engine class that supports capturing blocks via the <%= and <%== tags:

<%= upcase_form do %>
  <%= 'foo' %>
<% end %>

Where upcase_form is defined like:

def upcase_form(&block)
  "<form>#{@bufvar.capture(&block).upcase}</form>"
end

With output being:

<form>
  FOO
</form>

This requires using a string subclass as the buffer value, provided by the CaptureBlockEngine::Buffer class.

This engine does not support the :escapefunc option. To change the escaping function, use a subclass of CaptureBlockEngine::Buffer and override the #| method.

This engine does not support the :chain_appends option, and ignores it if present.

Public Class Methods

new(input, properties={}) click to toggle source
Calls superclass method Erubi::Engine::new
   # File lib/erubi/capture_block.rb
69 def initialize(input, properties={})
70   properties = Hash[properties]
71   properties[:bufval] ||= '::Erubi::CaptureBlockEngine::Buffer.new'
72   properties[:chain_appends] = false
73   super
74 end

Private Instance Methods

add_expression_op(op, code) click to toggle source
   # File lib/erubi/capture_block.rb
86 def add_expression_op(op, code)
87   check = /\A\s*\z/.send(MATCH_METHOD, code) ? "''" : ''
88   with_buffer{@src << op  << check << code}
89 end
add_expression_result(code) click to toggle source
   # File lib/erubi/capture_block.rb
78 def add_expression_result(code)
79   add_expression_op(' <<= ', code)
80 end
add_expression_result_escaped(code) click to toggle source
   # File lib/erubi/capture_block.rb
82 def add_expression_result_escaped(code)
83   add_expression_op(' |= ', code)
84 end