Henrik <henrik / nyh.se> wrote:
> This is a Rails example, but I think the problem is a general Ruby
> matter.
> 
> I am using class_eval within a class method, foobar(), to have it
> create an instance method, get_foobar(). I am passing a value
> ("testing testing 123") to foobar() that I want to make part of
> get_foobar(). However, I can't seem to include this value in the
> output of get_foobar(). 
> 
> Where I want the "render" line to output "A start testing testing 123
> end O", it only outputs "A start end O". Extremely grateful for any
> help. Code:
> 
> class HelpController < ApplicationController
> 
>   def self.foobar(v)
> 
>     class_eval %q{
>       def get_foobar()
>         "start #{v} end"
>       end
>     }
> 
>   end
> 
>   foobar "testing testing 123"
> 
>    def index
>     render :text => "A "+get_foobar+" O"
>   end
> 
> end
> 
> Or syntax highlighted here:
> http://rafb.net/paste/results/igothN18.html 

You don't even need class_eval - a simple closure is sufficient:

class X
  def self.foobar(x)
    define_method(:get_foobar) { x }
  end
  
  foobar "testing testing 123"
end

>> x=X.new
=> #<X:0x101c1198>
>> x.get_foobar
=> "testing testing 123"
>> X.foobar "qwert"
=> #<Proc:0x101c8530@(irb):3>
>> x.get_foobar
=> "qwert"

Kind regards

    robert