From: Josh Cheek Date: 2011-12-18T07:13:17+09:00 Subject: Re: Single quoted string to become double quoted - is it possible? --0016e6d97708110c2f04b451061d Content-Type: text/plain; charset=ISO-8859-1 On Sat, Dec 17, 2011 at 3:29 PM, ANDREW BIZYAEV (GMAIL) < andrew.bizyaev@gmail.com> wrote: > > On 18.12.2011, at 0:03, Chad Perrin wrote: > > > On Sun, Dec 18, 2011 at 05:20:19AM +0900, ANDREW BIZYAEV (GMAIL) wrote: > >> Hello, Ruby experts. > >> Imagine I have single quoted string: > >> a = 'bla bla #{name} bla bla' > >> name = 'Andrew' > >> Is it possible to make a act as double quoted string: puts a => 'bla > >> bla Andrew bla bla' instead of' bla bla #{name} bla bla'? > > > > Why do you need to use single quotes? > I use yaml configuration file. in this file I set string template like > this: > :event: > :template: "bla bla #{name} bla bla" #in order to be flexible > > 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" > > Use a templating language instead: data = ' :event: :template: "bla bla <%= name %> bla bla" #in order to be flexible ' require 'yaml' yaml = YAML.load data yaml # => {:event=>{:template=>"bla bla <%= name %> bla bla"}} to_parse = yaml[:event][:template] # => "bla bla <%= name %> bla bla" require 'erb' name = "Jefferson" ERB.new(to_parse).result # => "bla bla Jefferson bla bla" # note that you may have to pass a binding depending on how you want to use it. --0016e6d97708110c2f04b451061d--