Merge pull request #15269 from arunagw/aa-fixes-8930

rake railties:install:migrations respects the order of railties
This commit is contained in:
Rafael Mendonça França 2014-05-27 19:27:40 -03:00
commit be4b3df8bb
3 changed files with 42 additions and 1 deletions

@ -366,7 +366,7 @@ namespace :railties do
task :migrations => :'db:load_config' do
to_load = ENV['FROM'].blank? ? :all : ENV['FROM'].split(",").map {|n| n.strip }
railties = {}
Rails.application.railties.each do |railtie|
Rails.application.migration_railties.each do |railtie|
next unless to_load == :all || to_load.include?(railtie.railtie_name)
if railtie.respond_to?(:paths) && (path = railtie.paths['db/migrate'].first)

@ -364,6 +364,10 @@ def y(*objects)
end
end
def migration_railties # :nodoc:
(ordered_railties & railties_without_main_app).reverse
end
protected
alias :build_middleware_stack :app
@ -394,6 +398,11 @@ 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

@ -112,6 +112,38 @@ def up
end
end
test 'respects the order of railties when installing migrations' do
@blog = engine "blog" do |plugin|
plugin.write "lib/blog.rb", <<-RUBY
module Blog
class Engine < ::Rails::Engine
end
end
RUBY
end
@plugin.write "db/migrate/1_create_users.rb", <<-RUBY
class CreateUsers < ActiveRecord::Migration
end
RUBY
@blog.write "db/migrate/2_create_blogs.rb", <<-RUBY
class CreateBlogs < ActiveRecord::Migration
end
RUBY
add_to_config("config.railties_order = [Bukkits::Engine, Blog::Engine, :all, :main_app]")
boot_rails
Dir.chdir(app_path) do
output = `bundle exec rake railties:install:migrations`.split("\n")
assert_match(/Copied migration \d+_create_users.bukkits.rb from bukkits/, output.first)
assert_match(/Copied migration \d+_create_blogs.blog_engine.rb from blog_engine/, output.last)
end
end
test "mountable engine should copy migrations within engine_path" do
@plugin.write "lib/bukkits.rb", <<-RUBY
module Bukkits