http://github.com/jschementi/ironruby/tree/f57b6adec5fcb2896ed850683c0b1fd39ded23f0/Merlin/Main/Hosts/IronRuby.Rack
ironruby-rack: Run Rack-based web applications on IIS with IronRuby What it is: http://blog.jimmy.schementi.com/2009/05/ironruby-at-railsconf-2009.html#iis Uses ASP.NET's HttpHandlers to: · Registering IronRuby.Rack in the Rack-based application's Web.config<http://github.com/jschementi/ironruby/blob/92932a672921a03210c8aefe23ac0a7d6996ed2d/Merlin/Main/Hosts/IronRuby.Rack/IronRuby.Rack.Example/Web.config> · Load a Rack<http://rack.rubyforge.org/>-based application on startup (HttpHandlerFactory<http://github.com/jschementi/ironruby/blob/92932a672921a03210c8aefe23ac0a7d6996ed2d/Merlin/Main/Hosts/IronRuby.Rack/HttpHandlerFactory.cs> and Application<http://github.com/jschementi/ironruby/blob/92932a672921a03210c8aefe23ac0a7d6996ed2d/Merlin/Main/Hosts/IronRuby.Rack/Application.cs> constructor). o Initializes Rack and runs the application's config.ru<http://github.com/jschementi/ironruby/blob/92932a672921a03210c8aefe23ac0a7d6996ed2d/Merlin/Main/Hosts/IronRuby.Rack/IronRuby.Rack.Example/config.ru>, which tells Rack what application (any Ruby object that responds to "call") · Intercept web requests (HttpHandler.ProcessRequest<http://github.com/jschementi/ironruby/blob/92932a672921a03210c8aefe23ac0a7d6996ed2d/Merlin/Main/Hosts/IronRuby.Rack/HttpHandler.cs>) o Creates a Request<http://github.com/jschementi/ironruby/blob/92932a672921a03210c8aefe23ac0a7d6996ed2d/Merlin/Main/Hosts/IronRuby.Rack/Request.cs> and a Response<http://github.com/jschementi/ironruby/blob/92932a672921a03210c8aefe23ac0a7d6996ed2d/Merlin/Main/Hosts/IronRuby.Rack/Response.cs>, and passes it off to IIS.Handle<http://github.com/jschementi/ironruby/blob/92932a672921a03210c8aefe23ac0a7d6996ed2d/Merlin/Main/Hosts/IronRuby.Rack/IIS.cs#L31> which: § Set up the environment according to the Rack specification<http://rack.rubyforge.org/doc/SPEC.html> § Calls Application.Call<http://github.com/jschementi/ironruby/blob/92932a672921a03210c8aefe23ac0a7d6996ed2d/Merlin/Main/Hosts/IronRuby.Rack/Application.cs#L32> with the prepared environment, which delegates to the Rack application's "call" method (registered in the config.ru file). All C# <-> Ruby interaction happens in the RubyEngine<http://github.com/jschementi/ironruby/blob/92932a672921a03210c8aefe23ac0a7d6996ed2d/Merlin/Main/Hosts/IronRuby.Rack/RubyEngine.cs> § Rack application does its thing (process Rails/Sinatra request, or deal with things itself<http://github.com/jschementi/ironruby/blob/92932a672921a03210c8aefe23ac0a7d6996ed2d/Merlin/Main/Hosts/IronRuby.Rack/IronRuby.Rack.Example/app.rb>) and returns a response according to the Rack specification<http://rack.rubyforge.org/doc/SPEC.html> § Takes the Rack response and pass the appropriate data to the IIS response (response body, status, headers)
_______________________________________________ Ironruby-core mailing list [email protected] http://rubyforge.org/mailman/listinfo/ironruby-core
