How to do this

I don’t know how to explain so I will just code:

template = ‘some text #{variable}’ # single quotes for reason
variable = ‘filled’
res = some_method(template)

Here, res should have value ‘some text filled’.

Is there an easy way doing this in ruby. Hard way is of course parsing
and inserting text with my own method.

by
TheR

On Tue, Oct 12, 2010 at 8:02 AM, Damjan R. [email protected] wrote:

by
TheR


Posted via http://www.ruby-forum.com/.

Using ERB, here is a pretty straight forward cheatsheet/examples for
you:
http://github.com/JoshCheek/JoshsRubyKickstart/blob/master/cheatsheets/erb-embedded_ruby.rb

require ‘erb’

def some_method(template)
ERB.new( template , 0 , ‘>’ ).result
end

template = ‘some text <%= variable %>’
variable = ‘filled’
res = some_method(template)

res # => “some text filled”

On Tue, Oct 12, 2010 at 3:02 PM, Damjan R. [email protected] wrote:

I don’t know how to explain so I will just code:

template = ‘some text #{variable}’ # single quotes for reason
variable = ‘filled’
res = some_method(template)

Here, res should have value ‘some text filled’.

Is there an easy way doing this in ruby. Hard way is of course parsing
and inserting text with my own method.

I would consider using double quotes an “easy way”. Either way, some
piece of code needs to to the parsing. If you only ever want to fill
in a single value you could as well use (s)printf.

Btw, parsing can be as easy as

def replace(template, values)
template.gsub /(?<!\)#{([^}]*)}/ do
values[$1]
end
end

template = ‘foo \#{bar}-#{bingo}-#{bongo}’
x = replace template, “bar” => “1”, “bongo” => “2”
p template, x

Cheers

robert

On Tuesday 12 October 2010, Damjan R. wrote:

|
|by
|TheR

You could do this:

#note the double quotes inside the single ones
template = ‘“some text #{variable}”’
variable = ‘filled’
res = eval template

A better way could be to use ERB (included in the standard library):
require ‘erb’
template = ERB.new “some text <%= variable %>”
variable = ‘filled’
res = template.result

I hope this helps

Stefano

Robert K. wrote in post #949495:

Btw, parsing can be as easy as

def replace(template, values)
template.gsub /(?<!\)#{([^}]*)}/ do
values[$1]
end
end

template = ‘foo \#{bar}-#{bingo}-#{bongo}’
x = replace template, “bar” => “1”, “bongo” => “2”
p template, x

Robert thank you for this.

Ruby really is an amazing language. And after five years I still get
puzzled how some things can be so simple.

by
TheR