yield in ERB without rails

Check out Tilt (http://github.com/rtomayko/tilt/). It's the gem that handles templating in Sinatra and it provides ERB yields along with many other nice features.


You can use Tilt but if you don't want to add an extra dependency, here's a better example on how you can yield in erb:

require "erb"

class Controller
  TEMPLATE = ERB.new("Hello <%= @someone %>\n\n<%= yield %>")

  def initialize(someone)
    @someone = someone
  end

  def render
    TEMPLATE.result(self.get_binding { yield })
  end

  def get_binding
    binding
  end
end

puts Controller.new("World").render { "I'm Jack" }
# =>
Hello World

I'm Jack

I found the answer here.


def a
  ERB.new('<%= yield %>').result(binding)
end
a{123}
#=> "123"

It's important that the call to Kernel#binding be inside a method, that way the context includes the block (ERB#result won't take a block).


I don't think you can - Rails provides that infrastructure as part of actionpack.

What you may be able to do is take actionpack and add it into your script.

Alternatively you could roll a lightweight templating system yourself.

Alternatively alternatively use Rails or Merb or Sinatra.