[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Executing ruby code stored as a string in a database

Etienne Van tonder

12/28/2007 9:25:00 AM

I'm trying to retrieve some ruby code from a database as a string, I
would then like to execute this code. So far I've tried many approaches
but my latest uses define_method.

I have a method defined to use define_method, i.e.

def define_validation_method(name, &block)
self.class.send(:define_method, name, &block)
end

What I would like to do is pass the code that I want executed to this
method as an example:

function_module = define_validation_method(
:validate_object)
"do |x, y, z|
if x > 1
x = y + z
else
x = y - z
end
end"

This of course does not work as the method expects a block not a string.
Can anyone suggest how to get this method to work, or suggest another
method. The code is being executed within a ruby class.

Thanks.
--
Posted via http://www.ruby-....

1 Answer

Tomaso Tosolini

12/28/2007 10:54:00 AM

0


Hi
have you tried with class_eval? when you have to execute ruby code contained
in a string it should be fine for you

def define_validation_method(name, method_body)
self.class.class_eval("

def #{name}
#{method_body}
end

")
end

Hope this helps
Tom


Etienne Van tonder wrote:

> I'm trying to retrieve some ruby code from a database as a string, I
> would then like to execute this code. So far I've tried many approaches
> but my latest uses define_method.
>
> I have a method defined to use define_method, i.e.
>
> def define_validation_method(name, &block)
> self.class.send(:define_method, name, &block)
> end
>
> What I would like to do is pass the code that I want executed to this
> method as an example:
>
> function_module = define_validation_method(
> :validate_object)
> "do |x, y, z|
> if x > 1
> x = y + z
> else
> x = y - z
> end
> end"
>
> This of course does not work as the method expects a block not a string.
> Can anyone suggest how to get this method to work, or suggest another
> method. The code is being executed within a ruby class.
>
> Thanks.