> > I'm trying to do some metaprogramming and I need to apply some
> > operation to all the strings that are interpolated. But I can't change
> > the interpolation. In the example, I would like that "hi, #{name}" to
> > evaluate to "hi, AURE" instead of "hi, Aure". I know that inside the
> > #{} "operator" I can put any ruby code, so "hi, #{name.capitalize}"
> > would evaluate to what I want.
> >
> > But I want it to execute code that I DON'T write there. Ideally, there
> > should be a method hook or something to change the way the
> > interpolation works. But I couldn't find it :(.  May be a different
> > example may be more clear. How can I do to write to a file all the
> > strings generated via interpolations (id est, all the strings that are
> > generated evaluating the different #{} "operators" in a program)?
>
> Frankly, it has not become clear to me what you are up to.  Can you
> maybe just state which problem you are trying to solve?

NDAs are a bitch. I can't state the exact problem (bah! I can, but I
could be fired, in a trial, and I also might inhibit my coworkers to
publish a paper with their findings). I'm working in a research
project and I need to do some "clever stuff" (that's the thing I can't
disclose) to all the Strings. This thing is "different" depending on
how strings are composed. All the ways I know for string composition
but string interpolation (<<, +, concat, gsub, etc.) can be overridden
redefining methods in the string class. I'm looking for a way to
intercept the string expansion to do my thing. Does ruby internally
call some overridable method to compose the strings used in a
interpolation?

Now I see that if I can transform all the <"a#{expression}c"> in <"a"
+ (expression) + "c"> in a ruby source code string, I could change
expression with "a#{expression}c" in "a" + clever_stuff(expression) +
"c" and use my changed + method in Strings. Is there an easy way to
manipulate ruby code in ruby to do this?

Thanks for your time,
Aureliano.