Making ERB behave like PHP
I was surprised to find that ERB’s code embedding tags <% ... %>
produce
a newline character by default. This was causing many formatting problems in
the generated output, so I hacked ERB to not
produce any output for its code embedding tags, just like PHP:
require 'erb'
# A version of ERB whose embedding tags behave like those
# of PHP. That is, only <%= ... %> tags produce output,
# whereas <% ... %> tags do *not* produce any output.
class ERB
alias original_initialize initialize
def initialize aInput, *aArgs
# ensure that only <%= ... %> tags generate output
input = aInput.gsub %r{<%=.*?%>}m do |s|
if ($' =~ /\r?\n/) == 0
s << $&
else
s
end
end
aArgs[1] = '>'
original_initialize input, *aArgs
end
end
The hack involves setting ERB’s tag trimming mode to ">"
, which supresses
the generation of a newline character after a tag’s closing delimiter, and
appending an extra newline to ERB’s value embedding tags <%= ... %>
which
happen to be at the end of a line.