提交 1aa052c6 编写于 作者: C Carlos Antonio da Silva

Merge pull request #6779 from simonjefford/db-rake-charset

Refactor db:charset task
...@@ -143,20 +143,7 @@ db_namespace = namespace :db do ...@@ -143,20 +143,7 @@ db_namespace = namespace :db do
# desc "Retrieves the charset for the current environment's database" # desc "Retrieves the charset for the current environment's database"
task :charset => [:environment, :load_config] do task :charset => [:environment, :load_config] do
config = ActiveRecord::Base.configurations[Rails.env || 'development'] puts ActiveRecord::Tasks::DatabaseTasks.charset_current
case config['adapter']
when /mysql/
ActiveRecord::Base.establish_connection(config)
puts ActiveRecord::Base.connection.charset
when /postgresql/
ActiveRecord::Base.establish_connection(config)
puts ActiveRecord::Base.connection.encoding
when /sqlite/
ActiveRecord::Base.establish_connection(config)
puts ActiveRecord::Base.connection.encoding
else
$stderr.puts 'sorry, your database adapter is not supported yet, feel free to submit a patch'
end
end end
# desc "Retrieves the collation for the current environment's database" # desc "Retrieves the collation for the current environment's database"
......
...@@ -47,6 +47,15 @@ def drop_current(environment = Rails.env) ...@@ -47,6 +47,15 @@ def drop_current(environment = Rails.env)
} }
end end
def charset_current(environment = Rails.env)
charset ActiveRecord::Base.configurations[environment]
end
def charset(*arguments)
configuration = arguments.first
class_for_adapter(configuration['adapter']).new(*arguments).charset
end
def purge(configuration) def purge(configuration)
class_for_adapter(configuration['adapter']).new(configuration).purge class_for_adapter(configuration['adapter']).new(configuration).purge
end end
......
...@@ -40,6 +40,10 @@ def purge ...@@ -40,6 +40,10 @@ def purge
connection.recreate_database configuration['database'], creation_options connection.recreate_database configuration['database'], creation_options
end end
def charset
connection.charset
end
private private
def configuration def configuration
...@@ -90,4 +94,4 @@ def root_password ...@@ -90,4 +94,4 @@ def root_password
end end
end end
end end
end end
\ No newline at end of file
...@@ -23,6 +23,10 @@ def drop ...@@ -23,6 +23,10 @@ def drop
connection.drop_database configuration['database'] connection.drop_database configuration['database']
end end
def charset
connection.encoding
end
def purge def purge
clear_active_connections! clear_active_connections!
drop drop
...@@ -47,4 +51,4 @@ def establish_master_connection ...@@ -47,4 +51,4 @@ def establish_master_connection
end end
end end
end end
end end
\ No newline at end of file
...@@ -27,6 +27,10 @@ def drop ...@@ -27,6 +27,10 @@ def drop
end end
alias :purge :drop alias :purge :drop
def charset
connection.encoding
end
private private
def configuration def configuration
...@@ -38,4 +42,4 @@ def root ...@@ -38,4 +42,4 @@ def root
end end
end end
end end
end end
\ No newline at end of file
...@@ -294,4 +294,38 @@ def test_sqlite_create ...@@ -294,4 +294,38 @@ def test_sqlite_create
ActiveRecord::Tasks::DatabaseTasks.purge 'adapter' => 'sqlite3' ActiveRecord::Tasks::DatabaseTasks.purge 'adapter' => 'sqlite3'
end end
end end
class DatabaseTasksCharsetTest < ActiveRecord::TestCase
def setup
@mysql_tasks, @postgresql_tasks, @sqlite_tasks = stub, stub, stub
ActiveRecord::Tasks::MySQLDatabaseTasks.stubs(:new).returns @mysql_tasks
ActiveRecord::Tasks::PostgreSQLDatabaseTasks.stubs(:new).
returns @postgresql_tasks
ActiveRecord::Tasks::SQLiteDatabaseTasks.stubs(:new).returns @sqlite_tasks
end
def test_mysql_charset
@mysql_tasks.expects(:charset)
ActiveRecord::Tasks::DatabaseTasks.charset 'adapter' => 'mysql'
end
def test_mysql2_charset
@mysql_tasks.expects(:charset)
ActiveRecord::Tasks::DatabaseTasks.charset 'adapter' => 'mysql2'
end
def test_postgresql_charset
@postgresql_tasks.expects(:charset)
ActiveRecord::Tasks::DatabaseTasks.charset 'adapter' => 'postgresql'
end
def test_sqlite_charset
@sqlite_tasks.expects(:charset)
ActiveRecord::Tasks::DatabaseTasks.charset 'adapter' => 'sqlite3'
end
end
end end
...@@ -176,4 +176,22 @@ def test_recreates_database_with_the_given_options ...@@ -176,4 +176,22 @@ def test_recreates_database_with_the_given_options
) )
end end
end end
end
\ No newline at end of file class MysqlDBCharsetTest < ActiveRecord::TestCase
def setup
@connection = stub(:create_database => true)
@configuration = {
'adapter' => 'mysql',
'database' => 'my-app-db'
}
ActiveRecord::Base.stubs(:connection).returns(@connection)
ActiveRecord::Base.stubs(:establish_connection).returns(true)
end
def test_db_retrieves_charset
@connection.expects(:charset)
ActiveRecord::Tasks::DatabaseTasks.charset @configuration
end
end
end
...@@ -132,4 +132,22 @@ def test_establishes_connection ...@@ -132,4 +132,22 @@ def test_establishes_connection
ActiveRecord::Tasks::DatabaseTasks.purge @configuration ActiveRecord::Tasks::DatabaseTasks.purge @configuration
end end
end end
end
\ No newline at end of file class PostgreSQLDBCharsetTest < ActiveRecord::TestCase
def setup
@connection = stub(:create_database => true)
@configuration = {
'adapter' => 'postgresql',
'database' => 'my-app-db'
}
ActiveRecord::Base.stubs(:connection).returns(@connection)
ActiveRecord::Base.stubs(:establish_connection).returns(true)
end
def test_db_retrieves_charset
@connection.expects(:encoding)
ActiveRecord::Tasks::DatabaseTasks.charset @configuration
end
end
end
...@@ -103,4 +103,24 @@ def test_removes_file_with_relative_path ...@@ -103,4 +103,24 @@ def test_removes_file_with_relative_path
ActiveRecord::Tasks::DatabaseTasks.drop @configuration, '/rails/root' ActiveRecord::Tasks::DatabaseTasks.drop @configuration, '/rails/root'
end end
end end
end
\ No newline at end of file class SqliteDBCharsetTest < ActiveRecord::TestCase
def setup
@database = 'db_create.sqlite3'
@connection = stub :connection
@configuration = {
'adapter' => 'sqlite3',
'database' => @database
}
File.stubs(:exist?).returns(false)
ActiveRecord::Base.stubs(:connection).returns(@connection)
ActiveRecord::Base.stubs(:establish_connection).returns(true)
end
def test_db_retrieves_charset
@connection.expects(:encoding)
ActiveRecord::Tasks::DatabaseTasks.charset @configuration, '/rails/root'
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册