The Terminal Programmer

Defining methods for ERB templates

Suraj N. Kurapati

(ruby, template, embedding)

While converting ruby-vpi documentation from DocBook-XML to RedCloth, I wanted an easy way to pass a bunch of text to my own methods, in a fashion similar to if-statements and iterators. This would allow me to make admonitions easily by writing code like the following in my ERB template.

<% caution do %>
Nothing is as it seems!
<% end %>

At first glance, it seems that the content between the do and end keywords is just passed as a string inside the block argument to the method. However, in truth, the block argument contains an expression that appends the content between do and end to the _erbout variable, like this:

_erbout << "Nothing is as it seems!"

ERB allows us to specify an alternate name for _erbout (its evaluation buffer) in its constructor. We can use this ability to capture the content passed from an ERB template to a Ruby method as follows.

TODO: finish this article!

Updates