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.