aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--railties/lib/rails/application.rb4
-rw-r--r--railties/lib/rails/engine.rb7
-rw-r--r--railties/test/railties/engine_test.rb26
3 files changed, 30 insertions, 7 deletions
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