Here is some code that we put together for the ASP.NET MVC team. They used it to prototype their IronRuby integration that we showed at Tech Ed 2008. Here's how you can execute a simple file:
- using Microsoft.Scripting.Hosting;
- var runtime = ScriptRuntime.Create();
- runtime.ExecuteFile("MyController.rb")
Where MyController.rb contains:
- class MyController
- def do_foo a, b
- puts a, b
- end
- end
This will define the MyController class and the do_foo method. Here's some code that instantiates the controller and retrieves the action method:
- var engine = runtime.GetEngine("Ruby");
- // TODO: should check that the values are identifiers
- var code = String.Format("{0}.new.method :{1}", "MyController", "do_foo");
- var action = engine.CreateScriptSourceFromString(code).Execute();
The action variable now holds on do_foo method bound to the controller instance. You can invoke it by:
- var result = engine.Operations.Call(action, 1, 2);
The definitive reference is the DLR hosting specification.