From c989d1a87d4ed0d3f4fe425ce2207eec5a8d3154 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Thu, 24 Jun 2010 14:32:11 +0200 Subject: Engine sets routes as default rack endpoint if no endpoint was given --- railties/lib/rails/application.rb | 4 ---- railties/lib/rails/engine.rb | 7 +++++-- railties/test/railties/engine_test.rb | 26 +++++++++++++++++++++++++- 3 files changed, 30 insertions(+), 7 deletions(-) (limited to 'railties') diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb index a4cdc7306f..a21b560084 100644 --- a/railties/lib/rails/application.rb +++ b/railties/lib/rails/application.rb @@ -103,10 +103,6 @@ module Rails super end - def routes - @routes ||= ActionDispatch::Routing::RouteSet.new - end - def railties @railties ||= Railties.new(config) end diff --git a/railties/lib/rails/engine.rb b/railties/lib/rails/engine.rb index 9a8dd8e8d4..c0607950b5 100644 --- a/railties/lib/rails/engine.rb +++ b/railties/lib/rails/engine.rb @@ -152,18 +152,21 @@ module Rails end def app - raise "You can't use Engine as rack application without providing valid rack endpoint" unless endpoint @app ||= config.middleware.build(endpoint) end def endpoint - self.class.endpoint + self.class.endpoint || routes end def call(env) app.call(env) end + def routes + @routes ||= ActionDispatch::Routing::RouteSet.new + end + def initializers initializers = [] railties.all { |r| initializers += r.initializers } diff --git a/railties/test/railties/engine_test.rb b/railties/test/railties/engine_test.rb index a0028c1d70..a2d46f02e7 100644 --- a/railties/test/railties/engine_test.rb +++ b/railties/test/railties/engine_test.rb @@ -86,11 +86,35 @@ module RailtiesTest assert_equal "HELLO WORLD", response[2] end + test "it provides routes as default endpoint" do + @plugin.write "lib/bukkits.rb", <<-RUBY + class Bukkits + class Engine < ::Rails::Engine + end + end + RUBY + + boot_rails + + Bukkits::Engine.routes.draw do |map| + match "/foo" => lambda { |env| [200, {'Content-Type' => 'text/html'}, 'foo'] } + end + + Rails::Application.routes.draw do |map| + mount(Bukkits::Engine => "/bukkits") + end + + env = Rack::MockRequest.env_for("/bukkits/foo") + response = Rails::Application.call(env) + + assert_equal "foo", response[2] + end + test "engine can load its own plugins" do @plugin.write "lib/bukkits.rb", <<-RUBY class Bukkits class Engine < ::Rails::Engine - config.paths.vendor.plugins = "#{File.join(@plugin.path, "lib/bukkits/plugins")}" + paths.vendor.plugins = "#{File.join(@plugin.path, "lib/bukkits/plugins")}" end end RUBY -- cgit v1.2.3