Engine sets routes as default rack endpoint if no endpoint was given

This commit is contained in:
Piotr Sarnacki
2010-06-24 14:32:11 +02:00
parent b5975a4a30
commit c989d1a87d
3 changed files with 30 additions and 7 deletions

View File

@@ -103,10 +103,6 @@ module Rails
super
end
def routes
@routes ||= ActionDispatch::Routing::RouteSet.new
end
def railties
@railties ||= Railties.new(config)
end

View File

@@ -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 }

View File

@@ -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