Hoping you guys can help out here. Is there any way to interpolate a
string that is loaded dynamically?
I know that in Ruby I can do this:
my_message = 'Hello World'
my_template = "The message is #my_message"
puts my_template <== The message is Hello World
But what I want to do is
my_message = 'Hello World'
my_template =
File.readlines('my_template_file.txt').HOW-CAN-I-FORCE-INTERPOLATION???
puts my_template <== The message is Hello World
Anyone have any ideas? Or am I missing something blatantly obvious?
Hoping you guys can help out here. Is there any way to interpolate a
string that is loaded dynamically?
I know that in Ruby I can do this:
my_message = 'Hello World'
my_template = "The message is #my_message"
puts my_template <== The message is Hello World
Only if you replace #my_message with #{my_message}.
But what I want to do is
my_message = 'Hello World'
my_template =
File.readlines('my_template_file.txt').HOW-CAN-I-FORCE-INTERPOLATION???
puts my_template <== The message is Hello World
Anyone have any ideas? Or am I missing something blatantly obvious?
Well, there's always search and replace:
template.gsub(/#\{\s*(\w+)\s*\}/) { # do something with $1 here... }
I think that works pretty well with a Hash, keyed by the $1 values to interpolate.
Option two is to call eval(). This executes Ruby code and returns the results. This naturally has security concerns, if you aren't in control of the template.
Finally, you can make use of Ruby's standard template library, ERb:
"John Elrick" <john.elrick@gmail.com> schrieb im Newsbeitrag
news:1112801469.561320.13590@z14g2000cwz.googlegroups.com...
Hoping you guys can help out here. Is there any way to interpolate a
string that is loaded dynamically?
I know that in Ruby I can do this:
my_message = 'Hello World'
my_template = "The message is #my_message"
puts my_template <== The message is Hello World
But what I want to do is
my_message = 'Hello World'
my_template =
File.readlines('my_template_file.txt').HOW-CAN-I-FORCE-INTERPOLATION???
puts my_template <== The message is Hello World
Anyone have any ideas? Or am I missing something blatantly obvious?
This is my print help routine, the help file itself is almost book length, and contains a bunch of #{expressions} that retrieve information from the "deliverable_registry" object. (Basically the deliverable_registry object knows what can be done, what the command line options to select those actions, the descriptions of those actions etc...)
# Doesn't return.
# If STDOUT is a terminal pipe the help file through "less".
def print_help_and_exit(deliverable_registry, plaint = "")
# Pipe the output through less, unless we are within emacs...
outf = STDOUT
if STDOUT.stat.chardev?() && ENV['TERM'] != 'dumb' then
outf = open( "|less", "w")
outf = STDOUT if !outf
end
eval("
begin
outf.puts <<EOHELP
"+
File.read( "#{WORK_DIR}/Utilities/inc/build_help.txt")+
"
EOHELP # Catch an exit from less
rescue Errno::EPIPE => details
$log_file.print_to_screen = 0 # Don't gibber to the screen about the
# early exit from less
end
")
outf.close if outf != STDOUT
# Write the exit reason to the log file..
$log_file.history plaint
exit(1)
# Catch early exit from less
rescue Errno::EPIPE => details
$log_file.print_to_screen = 0
end
John Carter Phone : (64)(3) 358 6639
Tait Electronics Fax : (64)(3) 359 4632
PO Box 1645 Christchurch Email : john.carter@tait.co.nz
New Zealand
Refactorers do it a little better every time.
···
On Thu, 7 Apr 2005, John Elrick wrote:
Hoping you guys can help out here. Is there any way to interpolate a
string that is loaded dynamically?
ke, 2005-04-06 kello 18:49, Robert Klemme kirjoitti:
"John Elrick" <john.elrick@gmail.com> schrieb im Newsbeitrag
news:1112801469.561320.13590@z14g2000cwz.googlegroups.com...
> my_message = 'Hello World'
> my_template =
> File.readlines('my_template_file.txt').HOW-CAN-I-FORCE-INTERPOLATION???
> puts my_template <== The message is Hello World
>
>
> Anyone have any ideas? Or am I missing something blatantly obvious?
> > puts my_template <== The message is Hello World
> >
> >
> > Anyone have any ideas? Or am I missing something blatantly obvious?
>
> How about:
>
> eval "%Q{" + File.read('my_template_file.txt') + "}"
>
"Vraj Mohan" <vrajmohan@comcast.net> schrieb im Newsbeitrag
news:42540521.7030801@comcast.net...
Will using Kernel#sprintf work achieve the same thing?
--Vraj Mohan
No.
Problem is that interpolation is done at the time the String
is first encountered, which may complicate things since the
variable used for substitution may not be available, if I am
understanding correctly.