提交 435e8d71 编写于 作者: W Washington Luiz

Dont mess with default order engines load

When copying migrations some engines might depend on schema from other
engine so we can't blindly reverse all railties collection as that would
affect the order they were originally loaded. This patch helps to only
apply the order from engines specified in `railties_order`
上级 d233d6e2
......@@ -414,8 +414,14 @@ def y(*objects)
end
end
# Return an array of railties respecting the order they're loaded
# and the order specified by the +railties_order+ config.
#
# While when running initializers we need engines in reverse
# order here when copying migrations from railties we need then in the same
# order as given by +railties_order+
def migration_railties # :nodoc:
(ordered_railties & railties_without_main_app).reverse
ordered_railties.flatten - [self]
end
protected
......@@ -448,11 +454,6 @@ def run_console_blocks(app) #:nodoc:
super
end
def railties_without_main_app # :nodoc:
@railties_without_main_app ||= Rails::Railtie.subclasses.map(&:instance) +
Rails::Engine.subclasses.map(&:instance)
end
# Returns the ordered railties for this application considering railties_order.
def ordered_railties #:nodoc:
@ordered_railties ||= begin
......@@ -472,13 +473,13 @@ def ordered_railties #:nodoc:
index = order.index(:all)
order[index] = all
order.reverse.flatten
order
end
end
def railties_initializers(current) #:nodoc:
initializers = []
ordered_railties.each do |r|
ordered_railties.reverse.flatten.each do |r|
if r == self
initializers += current
else
......
......@@ -144,6 +144,42 @@ class CreateBlogs < ActiveRecord::Migration
end
end
test "dont reverse default railties order" do
@api = engine "api" do |plugin|
plugin.write "lib/api.rb", <<-RUBY
module Api
class Engine < ::Rails::Engine; end
end
RUBY
end
# added last but here is loaded before api engine
@core = engine "core" do |plugin|
plugin.write "lib/core.rb", <<-RUBY
module Core
class Engine < ::Rails::Engine; end
end
RUBY
end
@core.write "db/migrate/1_create_users.rb", <<-RUBY
class CreateUsers < ActiveRecord::Migration; end
RUBY
@api.write "db/migrate/2_create_keys.rb", <<-RUBY
class CreateKeys < ActiveRecord::Migration; end
RUBY
boot_rails
Dir.chdir(app_path) do
output = `bundle exec rake railties:install:migrations`.split("\n")
assert_match(/Copied migration \d+_create_users.core_engine.rb from core_engine/, output.first)
assert_match(/Copied migration \d+_create_keys.api_engine.rb from api_engine/, output.last)
end
end
test "mountable engine should copy migrations within engine_path" do
@plugin.write "lib/bukkits.rb", <<-RUBY
module Bukkits
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册