From d475de7e2573847bf4b13c291618053f30070a21 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Sun, 19 Sep 2010 17:21:16 +0200 Subject: [PATCH] Add helper for loading seed data for engine and application MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: José Valim --- .../lib/active_record/railties/databases.rake | 3 +-- railties/lib/rails/engine.rb | 9 +++++++++ railties/lib/rails/engine/configuration.rb | 1 + railties/test/railties/engine_test.rb | 19 +++++++++++++++++++ 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index 3c5981a120..ccaa1f01f6 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -299,8 +299,7 @@ namespace :db do desc 'Load the seed data from db/seeds.rb' task :seed => 'db:abort_if_pending_migrations' do - seed_file = File.join(Rails.root, 'db', 'seeds.rb') - load(seed_file) if File.exist?(seed_file) + Rails.application.load_seed end namespace :fixtures do diff --git a/railties/lib/rails/engine.rb b/railties/lib/rails/engine.rb index 10df9b3a6c..8387f277c9 100644 --- a/railties/lib/rails/engine.rb +++ b/railties/lib/rails/engine.rb @@ -380,6 +380,15 @@ module Rails @config ||= Engine::Configuration.new(find_root_with_flag("lib")) end + # Load data from db/seeds.rb file. It can be used in to load engines' + # seeds, e.g.: + # + # Blog::Engine.load_seed + def load_seed + seed_file = config.paths.db.seeds.to_a.first + load(seed_file) if File.exist?(seed_file) + end + # Add configured load paths to ruby load paths and remove duplicates. initializer :set_load_path, :before => :bootstrap_hook do _all_load_paths.reverse_each do |path| diff --git a/railties/lib/rails/engine/configuration.rb b/railties/lib/rails/engine/configuration.rb index 3ac8911ba8..d4d87be527 100644 --- a/railties/lib/rails/engine/configuration.rb +++ b/railties/lib/rails/engine/configuration.rb @@ -37,6 +37,7 @@ module Rails paths.vendor.plugins "vendor/plugins" paths.db "db" paths.db.migrate "db/migrate" + paths.db.seeds "db/seeds.rb" paths end end diff --git a/railties/test/railties/engine_test.rb b/railties/test/railties/engine_test.rb index 1d9587cadb..a9dd7d4c1b 100644 --- a/railties/test/railties/engine_test.rb +++ b/railties/test/railties/engine_test.rb @@ -624,5 +624,24 @@ module RailtiesTest assert !File.exist?(File.join(app_path, 'public/bukkits')) end end + + test "loading seed data" do + @plugin.write "db/seeds.rb", <<-RUBY + Bukkits::Engine.config.bukkits_seeds_loaded = true + RUBY + + app_file "db/seeds.rb", <<-RUBY + Rails.application.config.app_seeds_loaded = true + RUBY + + boot_rails + + Rails.application.load_seed + assert Rails.application.config.app_seeds_loaded + assert_raise(NoMethodError) do Bukkits::Engine.config.bukkits_seeds_loaded end + + Bukkits::Engine.load_seed + assert Bukkits::Engine.config.bukkits_seeds_loaded + end end end