From: Jeremy Wells Date: 2006-12-08T19:25:32+09:00 Subject: Re: insert into erb binding surely this won't work as the binding in my case is coming from an external source, so the ruby in the eval won't have access to the variable in the render method? Jan Svitok wrote: > 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. > -- *Jeremy Wells* Serval Systems Ltd. www.servalsystems.co.uk Tel: 01342 331940 Fax: 01342 331950