From: Jan Svitok Date: 2006-12-07T21:11:57+09:00 Subject: Re: insert into erb binding On 12/7/06, Jeremy Wells wrote: > I have a class that takes a template, parses it through ERB, then takes > the output for some custom manipulation. When the class is created as an > object a binding is passed to it to be passed to the template. Is it > possible to get the class to insert a variable into the binding? Example: > > Template: > <%=@variable1%> <%=variable2%> > > class: > class Renderer > def initialize(template_file, apply_binding) > @file = template_file > @binding = apply_binding > end > > def render > @variable2 = "There" > > template = ERB.new(File.read(@file)) > template_results = template.result(@binding) > > # Perform on template results > end > end > > Program: > @variable1 = "Hello" > renderer = Renderer.new('template.xml', binding) > renderer.render > > current output: Hello > desired output: Hello There > > So I want the renderer class to add @variable2 to the binding before > calling the template. IIRC this is (more or less) from Rails code: def evaluate_locals(local_assigns = {}) b = binding local_assigns.each { |key, value| eval "#{key} = local_assigns[\"#{key}\"]", b } b end The trick is to use eval with binding as an additional argument.