提交 74598fe7 编写于 作者: P Piotr Sarnacki

Do not overwrite _railtie method on namespace while creating isolated engine or application.

In order to run Engine as standalone application, you will need
Rails::Application instance in the same namespace that engine
one. It's very important to leave _railtie bound to whatever
used "namespace" method first.
上级 69f97f46
......@@ -333,21 +333,22 @@ def endpoint(endpoint = nil)
def namespace(mod)
engine_name(generate_railtie_name(mod))
_railtie = self
name = engine_name
mod.singleton_class.instance_eval do
define_method(:_railtie) do
_railtie
end
define_method(:table_name_prefix) do
"#{name}_"
end
end
self.routes.default_scope = {:module => name}
self.namespaced = true
unless mod.respond_to?(:_railtie)
_railtie = self
mod.singleton_class.instance_eval do
define_method(:_railtie) do
_railtie
end
define_method(:table_name_prefix) do
"#{name}_"
end
end
end
end
def namespaced?
......
......@@ -643,5 +643,25 @@ class Engine < ::Rails::Engine
Bukkits::Engine.load_seed
assert Bukkits::Engine.config.bukkits_seeds_loaded
end
test "using namespace more than once on one module should not overwrite _railtie method" do
@plugin.write "lib/bukkits.rb", <<-RUBY
module AppTemplate
class Engine < ::Rails::Engine
namespace(AppTemplate)
end
end
RUBY
add_to_config "namespace AppTemplate"
app_file "config/routes.rb", <<-RUBY
AppTemplate::Application.routes.draw do end
RUBY
boot_rails
assert_equal AppTemplate._railtie, AppTemplate::Engine
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册