[Ironruby-core] ironruby hosting as scripting engine

Jimmy Schementi Jimmy.Schementi at microsoft.com
Fri Nov 6 16:16:37 EST 2009


Your solution sounds fine. To answer you first question though: engine.Execute("class Script; end") will always give you nil; classes return nil when defined:


>>> class Foo
... end
=> nil

You'll have to do this to get the actual class object:

engine.Execute("class Script; end; Script")

~Jimmy

From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Dotan N.
Sent: Friday, November 06, 2009 11:17 AM
To: ironruby-core at rubyforge.org
Subject: [Ironruby-core] ironruby hosting as scripting engine

Hi guys sorry for the lengthy mail but i believe this is interesting since i've found a solution that someone else could use.

just had a session of trying to embed IR in my application.
I'm defining a user script which contains some initialization code and a special worker function 'execute'

this is the "user script":

script1.s --------------------------------------------------------
$script.declare "version 1"

def execute
   $script.report "success"
end
--------------------------------------------------------


what i'm doing is setting "script" as a global variable that is a gateway to my application.
I've tried this way first:

wrapping script1.s with "class Script <scriopt1.s content> end"
and doing Engine.Execute on it.

I expected to get a RubyObject as a result, which is the Script class.

then with the RubyObject i would do ObjectOperations.Invoke("execute"); when ever i wish.

I had 2 problems:

1. the RubyObject was always null. any idea why?
2. I couldn't really define a global variable properly (i've used the $a = a trick from the forum)



eventually i've realized this solution:
1. set global variable via RubyContext.DefineGlobalVariable
2.  i run everything on my script scope and Execute script1.s directly given a ScriptScope
3. do InvokeMember on the ScriptScope itself


from googling i've noticed the solution changed a lot along time.
so what is the proper way to do it?


Thanks!


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20091106/9473dc49/attachment.html>


More information about the Ironruby-core mailing list