Erubis 1.1.0 - an implementation of eRuby

I have released Erubis 1.1.0.
http://rubyforge.org/projects/erubis/

Erubis is an implementation of eRuby.
It has the following features:

  • Auto sanitizing support
  • Embedded pattern changeable (default ‘<% %>’)
  • Auto trimming spaces around ‘<% %>’
  • Context object available
  • Print statement available
  • Faster mode support
  • Easy to expand in subclass

Erubis is implemented in pure Ruby. It requires Ruby 1.8 or higher.

Sample code (example.rb):

eRuby script

(‘<%= %>’ is escaped and ‘<%== %>’ is not escaped when XmlEruby)

input = <<END

    <% for item in list %>
  • <%= item %> <%== item %>
  • <% end %>
END

create Eruby object

require ‘erubis’
eruby = Erubis::XmlEruby.new(input) # or Erubis::Eruby.new(input)

get result

list = [‘’, ‘b&b’, ‘“ccc”’]
puts eruby.result(binding())

result:

$ ruby example.rb

  • <aaa>
  • b&b b&b
  • "ccc" "ccc"
====================

See doc/users-guide.html in archive for details.

: Enhancement from 1.0.1

  • ‘<%# … %>’ supported. Erubis ignores ‘<%# %>’.

  • New class PrintEruby and PrintXmlEruby available.
    These class enables you to embed print statement in eRuby
    (this feature is not supported in ERB).

    ex. example.eb

    data and context

    list = [‘aaa’, ‘bbb’, ‘ccc’]
    context = { :list => list }

    eRuby script

    (use print statement instead of <%= item %>)

    input = <<-END

      <% for item in list %>
    • <% print item %>
    • <% end %>
    END

    create eruby and get result as string

    require ‘erubis’
    eruby = Erubis::PrintEruby.new(input)
    str = eruby.evaluate(context) # don’t use result()!
    print str

    result:

    $ ruby example.rb

    • aaa
    • bbb
    • ccc
    ====================

Have fun!

On 3/6/06, kwatch [email protected] wrote:

  • Print statement available
  <aaa></li>

: Enhancement from 1.0.1
list = [‘aaa’, ‘bbb’, ‘ccc’]
END
$ ruby example.rb
regards,
kwatch

Nice work, very cool features.
But can we replace current erb usage in Rails without any problem?
I’ve used some hackish ‘concat string, binding’.