On Sun, Dec 18, 2011 at 06:29:11AM +0900, ANDREW BIZYAEV (GMAIL) wrote:
> 
> Then  I load this yaml into @options variable and define @template:
> @template = @options[:event][:template] #=> "bla bla #{name} bla bla" So the effect is the same as using single quotes. And it seems I cannot change the way Ruby reads yaml strings.
> Later in my program I want to use the @template to generate string with real value of name.
> I use Steve's approach and it works fine:
> a = eval "/"#{template}/""  # => "bla bla Andrew bla bla"
> 
> 
> 
> >  If you just want to avoid using
> > double quotes (perhaps because you want double quotes within the string),
> > you could use something like this instead:
> > 
> >    name = 'Andrew'
> >    puts %Q{blah blah #{name} blah blah}
> > 
> > If you want to be able to reuse the string, you could define a method:
> > 
> >    def a(name_input)
> >      %Q{blah blah #{name_input} blah blah}
> >    end
> > 
> >    name = 'Andrew'
> > 
> >    puts a(name)
> > 
> Thank you for advice. You see I have some other case.

Yeah, I see that now.  I think, for that use case, I'd probably do some
parse-and-replace on any strings loaded from the YAML, rather than eval
every string from YAML -- it's safer.  Any time you think eval is the
right answer to something, it pays to think three or four more times
before you decide you're sure, *especially* if there's any possibility of
arbitrary data getting into what you're going to eval.