aboutsummaryrefslogtreecommitdiffstats
path: root/railties
diff options
context:
space:
mode:
authorArun Agrawal <arunagw@gmail.com>2014-05-23 14:34:05 +0200
committerArun Agrawal <arunagw@gmail.com>2014-05-27 16:12:36 +0200
commit50de394cc863acac9400e955cb93ed81b45e9eac (patch)
treec71c24462442de63e3f1427c68c2a4a2845cb62f /railties
parent0cc7f02b890d33a4e3d2a7e09f66781745e33820 (diff)
downloadrails-50de394cc863acac9400e955cb93ed81b45e9eac.tar.gz
rails-50de394cc863acac9400e955cb93ed81b45e9eac.tar.bz2
rails-50de394cc863acac9400e955cb93ed81b45e9eac.zip
rake railties:install:migrations respects the order of railties
This PR fixes #8930 and some stuff from #8985
Diffstat (limited to 'railties')
-rw-r--r--railties/lib/rails/application.rb9
-rw-r--r--railties/test/railties/engine_test.rb32
2 files changed, 41 insertions, 0 deletions
diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb
index 2fde974732..362713eb75 100644
--- a/railties/lib/rails/application.rb
+++ b/railties/lib/rails/application.rb
@@ -364,6 +364,10 @@ module Rails
end
end
+ def migration_railties # :nodoc:
+ (ordered_railties & railties_without_main_app).reverse
+ end
+
protected
alias :build_middleware_stack :app
@@ -394,6 +398,11 @@ module Rails
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
diff --git a/railties/test/railties/engine_test.rb b/railties/test/railties/engine_test.rb
index 6240dc04ec..ec64ce5941 100644
--- a/railties/test/railties/engine_test.rb
+++ b/railties/test/railties/engine_test.rb
@@ -112,6 +112,38 @@ module RailtiesTest
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