Skip to content

Commit

Permalink
Extract collation tasks to database tasks.
Browse files Browse the repository at this point in the history
  • Loading branch information
kennyj committed Jun 30, 2012
1 parent 05c7e0a commit bece59e
Show file tree
Hide file tree
Showing 8 changed files with 88 additions and 8 deletions.
11 changes: 3 additions & 8 deletions activerecord/lib/active_record/railties/databases.rake
Original file line number Diff line number Diff line change
Expand Up @@ -148,14 +148,9 @@ db_namespace = namespace :db do

# desc "Retrieves the collation for the current environment's database"
task :collation => [:environment, :load_config] do
config = ActiveRecord::Base.configurations[Rails.env || 'development']
case config['adapter']
when /mysql/
ActiveRecord::Base.establish_connection(config)
puts ActiveRecord::Base.connection.collation
else
$stderr.puts 'sorry, your database adapter is not supported yet, feel free to submit a patch'
end
puts ActiveRecord::Tasks::DatabaseTasks.collation_current
ensure NoMethodError
$stderr.puts 'sorry, your database adapter is not supported yet, feel free to submit a patch'
end

desc 'Retrieves the current schema version number'
Expand Down
9 changes: 9 additions & 0 deletions activerecord/lib/active_record/tasks/database_tasks.rb
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,15 @@ def charset(*arguments)
class_for_adapter(configuration['adapter']).new(*arguments).charset
end

def collation_current(environment = Rails.env)
collation ActiveRecord::Base.configurations[environment]
end

def collation(*arguments)
configuration = arguments.first
class_for_adapter(configuration['adapter']).new(*arguments).collation
end

def purge(configuration)
class_for_adapter(configuration['adapter']).new(configuration).purge
end
Expand Down
4 changes: 4 additions & 0 deletions activerecord/lib/active_record/tasks/mysql_database_tasks.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ def charset
connection.charset
end

def collation
connection.collation
end

def structure_dump(filename)
establish_connection configuration
File.open(filename, "w:utf-8") { |f| f << ActiveRecord::Base.connection.structure_dump }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ def charset
connection.encoding
end

def collation
connection.collate
end

def purge
clear_active_connections!
drop
Expand Down
11 changes: 11 additions & 0 deletions activerecord/test/cases/tasks/database_tasks_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,17 @@ class DatabaseTasksCharsetTest < ActiveRecord::TestCase
end
end

class DatabaseTasksCollationTest < ActiveRecord::TestCase
include DatabaseTasksSetupper

ADAPTERS_TASKS.each do |k, v|
define_method("test_#{k}_collation") do
eval("@#{v}").expects(:collation)
ActiveRecord::Tasks::DatabaseTasks.collation 'adapter' => k
end
end
end

class DatabaseTasksStructureDumpTest < ActiveRecord::TestCase
include DatabaseTasksSetupper

Expand Down
18 changes: 18 additions & 0 deletions activerecord/test/cases/tasks/mysql_rake_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,24 @@ def test_db_retrieves_charset
end
end

class MysqlDBCollationTest < 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_collation
@connection.expects(:collation)
ActiveRecord::Tasks::DatabaseTasks.collation @configuration
end
end

class MySQLStructureDumpTest < ActiveRecord::TestCase
def setup
@connection = stub(:structure_dump => true)
Expand Down
18 changes: 18 additions & 0 deletions activerecord/test/cases/tasks/postgresql_rake_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,24 @@ def test_db_retrieves_charset
end
end

class PostgreSQLDBCollationTest < 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_collation
@connection.expects(:collate)
ActiveRecord::Tasks::DatabaseTasks.collation @configuration
end
end

class PostgreSQLStructureDumpTest < ActiveRecord::TestCase
def setup
@connection = stub(:structure_dump => true)
Expand Down
21 changes: 21 additions & 0 deletions activerecord/test/cases/tasks/sqlite_rake_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,27 @@ def test_db_retrieves_charset
end
end

class SqliteDBCollationTest < 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_collation
assert_raise NoMethodError do
ActiveRecord::Tasks::DatabaseTasks.collation @configuration, '/rails/root'
end
end
end

class SqliteStructureDumpTest < ActiveRecord::TestCase
def setup
@database = "db_create.sqlite3"
Expand Down

0 comments on commit bece59e

Please sign in to comment.