diff options
author | Jon Leighton <j@jonathanleighton.com> | 2014-01-02 10:05:46 -0800 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2014-01-02 10:05:46 -0800 |
commit | d74043885a8e7436091cca13e694fc255cb375b6 (patch) | |
tree | 5ad6aed8ee454c320967d767229debde268da2e2 /activerecord/lib/active_record/tasks | |
parent | a1d0c0fa3d8ca97edc8f2a1d6ba96af19221dbad (diff) | |
parent | ff7ab3bc78abc3e8439a57ef7d755c5aa5b069f4 (diff) | |
download | rails-d74043885a8e7436091cca13e694fc255cb375b6.tar.gz rails-d74043885a8e7436091cca13e694fc255cb375b6.tar.bz2 rails-d74043885a8e7436091cca13e694fc255cb375b6.zip |
Merge pull request #13528 from jonleighton/maintain_test_schema
Automatically maintain test database schema
Diffstat (limited to 'activerecord/lib/active_record/tasks')
-rw-r--r-- | activerecord/lib/active_record/tasks/database_tasks.rb | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/tasks/database_tasks.rb b/activerecord/lib/active_record/tasks/database_tasks.rb index acb7c65af5..afd493011e 100644 --- a/activerecord/lib/active_record/tasks/database_tasks.rb +++ b/activerecord/lib/active_record/tasks/database_tasks.rb @@ -36,9 +36,8 @@ module ActiveRecord module DatabaseTasks extend self - attr_writer :current_config - attr_accessor :database_configuration, :migrations_paths, :seed_loader, :db_dir, - :fixtures_path, :env, :root + attr_writer :current_config, :db_dir, :migrations_paths, :fixtures_path, :root, :env, :seed_loader + attr_accessor :database_configuration LOCAL_HOSTS = ['127.0.0.1', 'localhost'] @@ -51,6 +50,30 @@ module ActiveRecord register_task(/postgresql/, ActiveRecord::Tasks::PostgreSQLDatabaseTasks) register_task(/sqlite/, ActiveRecord::Tasks::SQLiteDatabaseTasks) + def db_dir + @db_dir ||= Rails.application.config.paths["db"].first + end + + def migrations_paths + @migrations_paths ||= Rails.application.paths['db/migrate'].to_a + end + + def fixtures_path + @fixtures_path ||= File.join(root, 'test', 'fixtures') + end + + def root + @root ||= Rails.root + end + + def env + @env ||= Rails.env + end + + def seed_loader + @seed_loader ||= Rails.application + end + def current_config(options = {}) options.reverse_merge! :env => env if options.has_key?(:config) @@ -133,6 +156,21 @@ module ActiveRecord class_for_adapter(configuration['adapter']).new(*arguments).structure_load(filename) end + def load_schema(format = ActiveRecord::Base.schema_format, file = nil) + case format + when :ruby + file ||= File.join(db_dir, "schema.rb") + check_schema_file(file) + load(file) + when :sql + file ||= File.join(db_dir, "structure.sql") + check_schema_file(file) + structure_load(current_config, file) + else + raise ArgumentError, "unknown format #{format.inspect}" + end + end + def check_schema_file(filename) unless File.exist?(filename) message = %{#{filename} doesn't exist yet. Run `rake db:migrate` to create it, then try again.} |