diff options
Diffstat (limited to 'activerecord/lib/active_record/tasks')
4 files changed, 226 insertions, 208 deletions
diff --git a/activerecord/lib/active_record/tasks/database_tasks.rb b/activerecord/lib/active_record/tasks/database_tasks.rb index 10cc679a05..8e05c1a439 100644 --- a/activerecord/lib/active_record/tasks/database_tasks.rb +++ b/activerecord/lib/active_record/tasks/database_tasks.rb @@ -1,82 +1,87 @@ -class ActiveRecord::Tasks::DatabaseTasks - TASKS_PATTERNS = { - /mysql/ => ActiveRecord::Tasks::MySQLDatabaseTasks, - /postgresql/ => ActiveRecord::Tasks::PostgreSQLDatabaseTasks, - /sqlite/ => ActiveRecord::Tasks::SQLiteDatabaseTasks - } - LOCAL_HOSTS = ['127.0.0.1', 'localhost'] +module ActiveRecord + module Tasks # :nodoc: + class DatabaseTasks # :nodoc: - def self.create(*arguments) - configuration = arguments.first - class_for_adapter(configuration['adapter']).new(*arguments).create - rescue Exception => error - $stderr.puts error, *(error.backtrace) - $stderr.puts "Couldn't create database for #{configuration.inspect}" - end + TASKS_PATTERNS = { + /mysql/ => ActiveRecord::Tasks::MySQLDatabaseTasks, + /postgresql/ => ActiveRecord::Tasks::PostgreSQLDatabaseTasks, + /sqlite/ => ActiveRecord::Tasks::SQLiteDatabaseTasks + } + LOCAL_HOSTS = ['127.0.0.1', 'localhost'] - def self.create_all - each_local_configuration { |configuration| create configuration } - end + def self.create(*arguments) + configuration = arguments.first + class_for_adapter(configuration['adapter']).new(*arguments).create + rescue Exception => error + $stderr.puts error, *(error.backtrace) + $stderr.puts "Couldn't create database for #{configuration.inspect}" + end - def self.create_current(environment = Rails.env) - each_current_configuration(environment) { |configuration| - create configuration - } - ActiveRecord::Base.establish_connection environment - end + def self.create_all + each_local_configuration { |configuration| create configuration } + end - def self.drop(*arguments) - configuration = arguments.first - class_for_adapter(configuration['adapter']).new(*arguments).drop - rescue Exception => error - $stderr.puts error, *(error.backtrace) - $stderr.puts "Couldn't drop #{configuration['database']}" - end + def self.create_current(environment = Rails.env) + each_current_configuration(environment) { |configuration| + create configuration + } + ActiveRecord::Base.establish_connection environment + end - def self.drop_all - each_local_configuration { |configuration| drop configuration } - end + def self.drop(*arguments) + configuration = arguments.first + class_for_adapter(configuration['adapter']).new(*arguments).drop + rescue Exception => error + $stderr.puts error, *(error.backtrace) + $stderr.puts "Couldn't drop #{configuration['database']}" + end - def self.drop_current(environment = Rails.env) - each_current_configuration(environment) { |configuration| - drop configuration - } - end + def self.drop_all + each_local_configuration { |configuration| drop configuration } + end - def self.purge(configuration) - class_for_adapter(configuration['adapter']).new(configuration).purge - end + def self.drop_current(environment = Rails.env) + each_current_configuration(environment) { |configuration| + drop configuration + } + end - private + def self.purge(configuration) + class_for_adapter(configuration['adapter']).new(configuration).purge + end - def self.class_for_adapter(adapter) - key = TASKS_PATTERNS.keys.detect { |pattern| adapter[pattern] } - TASKS_PATTERNS[key] - end + private - def self.each_current_configuration(environment) - environments = [environment] - environments << 'test' if environment.development? + def self.class_for_adapter(adapter) + key = TASKS_PATTERNS.keys.detect { |pattern| adapter[pattern] } + TASKS_PATTERNS[key] + end - configurations = ActiveRecord::Base.configurations.values_at(*environments) - configurations.compact.each do |configuration| - yield configuration unless configuration['database'].blank? - end - end + def self.each_current_configuration(environment) + environments = [environment] + environments << 'test' if environment.development? - def self.each_local_configuration - ActiveRecord::Base.configurations.each_value do |configuration| - next unless configuration['database'] + configurations = ActiveRecord::Base.configurations.values_at(*environments) + configurations.compact.each do |configuration| + yield configuration unless configuration['database'].blank? + end + end + + def self.each_local_configuration + ActiveRecord::Base.configurations.each_value do |configuration| + next unless configuration['database'] - if local_database?(configuration) - yield configuration - else - $stderr.puts "This task only modifies local databases. #{configuration['database']} is on a remote host." + if local_database?(configuration) + yield configuration + else + $stderr.puts "This task only modifies local databases. #{configuration['database']} is on a remote host." + end + end end - end - end - def self.local_database?(configuration) - configuration['host'].in?(LOCAL_HOSTS) || configuration['host'].blank? + def self.local_database?(configuration) + configuration['host'].in?(LOCAL_HOSTS) || configuration['host'].blank? + end + end end -end +end
\ No newline at end of file diff --git a/activerecord/lib/active_record/tasks/mysql_database_tasks.rb b/activerecord/lib/active_record/tasks/mysql_database_tasks.rb index eb598629fa..646034f313 100644 --- a/activerecord/lib/active_record/tasks/mysql_database_tasks.rb +++ b/activerecord/lib/active_record/tasks/mysql_database_tasks.rb @@ -1,88 +1,93 @@ -class ActiveRecord::Tasks::MySQLDatabaseTasks - DEFAULT_CHARSET = ENV['CHARSET'] || 'utf8' - DEFAULT_COLLATION = ENV['COLLATION'] || 'utf8_unicode_ci' - ACCESS_DENIED_ERROR = 1045 +module ActiveRecord + module Tasks # :nodoc: + class MySQLDatabaseTasks # :nodoc: - delegate :connection, :establish_connection, :to => ActiveRecord::Base + DEFAULT_CHARSET = ENV['CHARSET'] || 'utf8' + DEFAULT_COLLATION = ENV['COLLATION'] || 'utf8_unicode_ci' + ACCESS_DENIED_ERROR = 1045 - def initialize(configuration) - @configuration = configuration - end + delegate :connection, :establish_connection, to: ActiveRecord::Base - def create - establish_connection configuration_without_database - connection.create_database configuration['database'], creation_options - establish_connection configuration - rescue error_class => error - raise error unless error.errno == ACCESS_DENIED_ERROR + def initialize(configuration) + @configuration = configuration + end - $stdout.print error.error - establish_connection root_configuration_without_database - connection.create_database configuration['database'], creation_options - connection.execute grant_statement.gsub(/\s+/, ' ').strip - establish_connection configuration - rescue error_class => error - $stderr.puts error.error - $stderr.puts "Couldn't create database for #{configuration.inspect}, #{creation_options.inspect}" - $stderr.puts "(If you set the charset manually, make sure you have a matching collation)" if configuration['charset'] - end + def create + establish_connection configuration_without_database + connection.create_database configuration['database'], creation_options + establish_connection configuration + rescue error_class => error + raise error unless error.errno == ACCESS_DENIED_ERROR - def drop - establish_connection configuration - connection.drop_database configuration['database'] - end + $stdout.print error.error + establish_connection root_configuration_without_database + connection.create_database configuration['database'], creation_options + connection.execute grant_statement.gsub(/\s+/, ' ').strip + establish_connection configuration + rescue error_class => error + $stderr.puts error.error + $stderr.puts "Couldn't create database for #{configuration.inspect}, #{creation_options.inspect}" + $stderr.puts "(If you set the charset manually, make sure you have a matching collation)" if configuration['charset'] + end - def purge - establish_connection :test - connection.recreate_database configuration['database'], creation_options - end + def drop + establish_connection configuration + connection.drop_database configuration['database'] + end - private + def purge + establish_connection :test + connection.recreate_database configuration['database'], creation_options + end - def configuration - @configuration - end + private - def configuration_without_database - configuration.merge('database' => nil) - end + def configuration + @configuration + end - def creation_options - { - :charset => (configuration['charset'] || DEFAULT_CHARSET), - :collation => (configuration['collation'] || DEFAULT_COLLATION) - } - end + def configuration_without_database + configuration.merge('database' => nil) + end - def error_class - case configuration['adapter'] - when /jdbc/ - require 'active_record/railties/jdbcmysql_error' - ArJdbcMySQL::Error - when /mysql2/ - Mysql2::Error - else - Mysql::Error - end - end + def creation_options + { + charset: (configuration['charset'] || DEFAULT_CHARSET), + collation: (configuration['collation'] || DEFAULT_COLLATION) + } + end + + def error_class + case configuration['adapter'] + when /jdbc/ + require 'active_record/railties/jdbcmysql_error' + ArJdbcMySQL::Error + when /mysql2/ + Mysql2::Error + else + Mysql::Error + end + end - def grant_statement - <<-SQL + def grant_statement + <<-SQL GRANT ALL PRIVILEGES ON #{configuration['database']}.* TO '#{configuration['username']}'@'localhost' IDENTIFIED BY '#{configuration['password']}' WITH GRANT OPTION; - SQL - end + SQL + end - def root_configuration_without_database - configuration_without_database.merge( - 'username' => 'root', - 'password' => root_password - ) - end + def root_configuration_without_database + configuration_without_database.merge( + 'username' => 'root', + 'password' => root_password + ) + end - def root_password - $stdout.print "Please provide the root password for your mysql installation\n>" - $stdin.gets.strip + def root_password + $stdout.print "Please provide the root password for your mysql installation\n>" + $stdin.gets.strip + end + end end -end +end
\ No newline at end of file diff --git a/activerecord/lib/active_record/tasks/postgresql_database_tasks.rb b/activerecord/lib/active_record/tasks/postgresql_database_tasks.rb index 331825d3ec..ddc5b9fc5c 100644 --- a/activerecord/lib/active_record/tasks/postgresql_database_tasks.rb +++ b/activerecord/lib/active_record/tasks/postgresql_database_tasks.rb @@ -1,45 +1,50 @@ -class ActiveRecord::Tasks::PostgreSQLDatabaseTasks - DEFAULT_ENCODING = ENV['CHARSET'] || 'utf8' - - delegate :connection, :establish_connection, :clear_active_connections!, - :to => ActiveRecord::Base - - def initialize(configuration) - @configuration = configuration - end - - def create(master_established = false) - establish_master_connection unless master_established - connection.create_database configuration['database'], - configuration.merge('encoding' => encoding) - establish_connection configuration - end - - def drop - establish_master_connection - connection.drop_database configuration['database'] - end - - def purge - clear_active_connections! - drop - create true - end - - private - - def configuration - @configuration - end - - def encoding - configuration['encoding'] || DEFAULT_ENCODING - end - - def establish_master_connection - establish_connection configuration.merge( - 'database' => 'postgres', - 'schema_search_path' => 'public' - ) +module ActiveRecord + module Tasks # :nodoc: + class PostgreSQLDatabaseTasks # :nodoc: + + DEFAULT_ENCODING = ENV['CHARSET'] || 'utf8' + + delegate :connection, :establish_connection, :clear_active_connections!, + to: ActiveRecord::Base + + def initialize(configuration) + @configuration = configuration + end + + def create(master_established = false) + establish_master_connection unless master_established + connection.create_database configuration['database'], + configuration.merge('encoding' => encoding) + establish_connection configuration + end + + def drop + establish_master_connection + connection.drop_database configuration['database'] + end + + def purge + clear_active_connections! + drop + create true + end + + private + + def configuration + @configuration + end + + def encoding + configuration['encoding'] || DEFAULT_ENCODING + end + + def establish_master_connection + establish_connection configuration.merge( + 'database' => 'postgres', + 'schema_search_path' => 'public' + ) + end + end end -end +end
\ No newline at end of file diff --git a/activerecord/lib/active_record/tasks/sqlite_database_tasks.rb b/activerecord/lib/active_record/tasks/sqlite_database_tasks.rb index d337b95a2a..aea364ecbb 100644 --- a/activerecord/lib/active_record/tasks/sqlite_database_tasks.rb +++ b/activerecord/lib/active_record/tasks/sqlite_database_tasks.rb @@ -1,37 +1,40 @@ -class ActiveRecord::Tasks::SQLiteDatabaseTasks - delegate :connection, :establish_connection, to: ActiveRecord::Base +module ActiveRecord + module Tasks # :nodoc: + class SQLiteDatabaseTasks # :nodoc: - def initialize(configuration, root = Rails.root) - @configuration, @root = configuration, root - end + delegate :connection, :establish_connection, to: ActiveRecord::Base - def create - if File.exist?(configuration['database']) - $stderr.puts "#{configuration['database']} already exists" - return - end + def initialize(configuration, root = Rails.root) + @configuration, @root = configuration, root + end - establish_connection configuration - connection - end + def create + if File.exist?(configuration['database']) + $stderr.puts "#{configuration['database']} already exists" + return + end - def drop - require 'pathname' - path = Pathname.new configuration['database'] - file = path.absolute? ? path.to_s : File.join(root, path) + establish_connection configuration + connection + end - FileUtils.rm(file) if File.exist?(file) - end + def drop + require 'pathname' + path = Pathname.new configuration['database'] + file = path.absolute? ? path.to_s : File.join(root, path) - alias :purge :drop + FileUtils.rm(file) if File.exist?(file) + end - private + alias :purge :drop - def configuration - @configuration - end + private - def root - @root - end -end + def configuration + @configuration + end + + def root + @root + end + end
\ No newline at end of file |