Forum: Ruby ERB question, not seeing variables..

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Aaron S. (Guest)
on 2007-07-21 04:48
I'm trying to do some template parsing in a class.. here is my class:

require 'erb'
class TemplateParser
  def TemplateParser.parse(template, params)
    params.each do |k,v|
      self.instance_variable_set(:"@#{k}",v)
    end
    template_content = ''
    File.open(template, "r") do |f|
      while line = f.gets
        template_content << line
      end
    end
    e = ERB.new(template_content, 0, "%<>")
    e.result
  end
end

so in my template.. if I have a variable called "revisions". and it is
set in the params[:revisions] hash. It defines an instance on the class
called revisions, but ERB is not seeing that.. What can I do get around
this?

Thanks
Jesse Brown (Guest)
on 2007-07-21 05:33
(Received via mailing list)
>     e = ERB.new(template_content, 0, "%<>")
>     e.result

I'm not sure if it will be helpful in your situation, but e.result
will accept a binding parameter. That binding is used to resolve local
variables in the template.
Aaron S. (Guest)
on 2007-07-21 05:52
Jesse Brown wrote:
>>     e = ERB.new(template_content, 0, "%<>")
>>     e.result
>
> I'm not sure if it will be helpful in your situation, but e.result
> will accept a binding parameter. That binding is used to resolve local
> variables in the template.

yeah I got if figured out.. thanks..

require 'erb'
class TemplateParser
  def TemplateParser.parse(template, params)
    params.each do |k,v|
      self.instance_variable_set(:"@#{k}",v)
    end
    template_content = ''
    File.open(template, "r") do |f|
      while line = f.gets
        template_content << line
      end
    end
    e = ERB.new(template_content, 0, "%<>")
    e.result(self.send("binding"))
  end
end
This topic is locked and can not be replied to.