Skip to content

Commit 363ab88

Browse files
committed
Refactor db:charset task
In a similar vein to Pat's work on create, drop etc, the db:charset task is now a one liner in databases.rake
1 parent 4d69cdb commit 363ab88

File tree

9 files changed

+118
-20
lines changed

9 files changed

+118
-20
lines changed

activerecord/lib/active_record/railties/databases.rake

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -143,20 +143,7 @@ db_namespace = namespace :db do
143143

144144
# desc "Retrieves the charset for the current environment's database"
145145
task :charset => [:environment, :load_config] do
146-
config = ActiveRecord::Base.configurations[Rails.env || 'development']
147-
case config['adapter']
148-
when /mysql/
149-
ActiveRecord::Base.establish_connection(config)
150-
puts ActiveRecord::Base.connection.charset
151-
when /postgresql/
152-
ActiveRecord::Base.establish_connection(config)
153-
puts ActiveRecord::Base.connection.encoding
154-
when /sqlite/
155-
ActiveRecord::Base.establish_connection(config)
156-
puts ActiveRecord::Base.connection.encoding
157-
else
158-
$stderr.puts 'sorry, your database adapter is not supported yet, feel free to submit a patch'
159-
end
146+
puts ActiveRecord::Tasks::DatabaseTasks.charset_current
160147
end
161148

162149
# desc "Retrieves the collation for the current environment's database"

activerecord/lib/active_record/tasks/database_tasks.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,15 @@ def drop_current(environment = Rails.env)
4747
}
4848
end
4949

50+
def charset_current(environment = Rails.env)
51+
charset ActiveRecord::Base.configurations[environment]
52+
end
53+
54+
def charset(*arguments)
55+
configuration = arguments.first
56+
class_for_adapter(configuration['adapter']).new(*arguments).charset
57+
end
58+
5059
def purge(configuration)
5160
class_for_adapter(configuration['adapter']).new(configuration).purge
5261
end

activerecord/lib/active_record/tasks/mysql_database_tasks.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ def purge
4040
connection.recreate_database configuration['database'], creation_options
4141
end
4242

43+
def charset
44+
connection.charset
45+
end
46+
4347
private
4448

4549
def configuration
@@ -90,4 +94,4 @@ def root_password
9094
end
9195
end
9296
end
93-
end
97+
end

activerecord/lib/active_record/tasks/postgresql_database_tasks.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ def drop
2323
connection.drop_database configuration['database']
2424
end
2525

26+
def charset
27+
connection.encoding
28+
end
29+
2630
def purge
2731
clear_active_connections!
2832
drop
@@ -47,4 +51,4 @@ def establish_master_connection
4751
end
4852
end
4953
end
50-
end
54+
end

activerecord/lib/active_record/tasks/sqlite_database_tasks.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ def drop
2727
end
2828
alias :purge :drop
2929

30+
def charset
31+
connection.encoding
32+
end
33+
3034
private
3135

3236
def configuration
@@ -38,4 +42,4 @@ def root
3842
end
3943
end
4044
end
41-
end
45+
end

activerecord/test/cases/database_tasks_test.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,4 +294,38 @@ def test_sqlite_create
294294
ActiveRecord::Tasks::DatabaseTasks.purge 'adapter' => 'sqlite3'
295295
end
296296
end
297+
298+
class DatabaseTasksCharsetTest < ActiveRecord::TestCase
299+
def setup
300+
@mysql_tasks, @postgresql_tasks, @sqlite_tasks = stub, stub, stub
301+
ActiveRecord::Tasks::MySQLDatabaseTasks.stubs(:new).returns @mysql_tasks
302+
ActiveRecord::Tasks::PostgreSQLDatabaseTasks.stubs(:new).
303+
returns @postgresql_tasks
304+
ActiveRecord::Tasks::SQLiteDatabaseTasks.stubs(:new).returns @sqlite_tasks
305+
end
306+
307+
def test_mysql_charset
308+
@mysql_tasks.expects(:charset)
309+
310+
ActiveRecord::Tasks::DatabaseTasks.charset 'adapter' => 'mysql'
311+
end
312+
313+
def test_mysql2_charset
314+
@mysql_tasks.expects(:charset)
315+
316+
ActiveRecord::Tasks::DatabaseTasks.charset 'adapter' => 'mysql2'
317+
end
318+
319+
def test_postgresql_charset
320+
@postgresql_tasks.expects(:charset)
321+
322+
ActiveRecord::Tasks::DatabaseTasks.charset 'adapter' => 'postgresql'
323+
end
324+
325+
def test_sqlite_charset
326+
@sqlite_tasks.expects(:charset)
327+
328+
ActiveRecord::Tasks::DatabaseTasks.charset 'adapter' => 'sqlite3'
329+
end
330+
end
297331
end

activerecord/test/cases/mysql_rake_test.rb

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,4 +176,22 @@ def test_recreates_database_with_the_given_options
176176
)
177177
end
178178
end
179-
end
179+
180+
class MysqlDBCharsetTest < ActiveRecord::TestCase
181+
def setup
182+
@connection = stub(:create_database => true)
183+
@configuration = {
184+
'adapter' => 'mysql',
185+
'database' => 'my-app-db'
186+
}
187+
188+
ActiveRecord::Base.stubs(:connection).returns(@connection)
189+
ActiveRecord::Base.stubs(:establish_connection).returns(true)
190+
end
191+
192+
def test_db_retrieves_charset
193+
@connection.expects(:charset)
194+
ActiveRecord::Tasks::DatabaseTasks.charset @configuration
195+
end
196+
end
197+
end

activerecord/test/cases/postgresql_rake_test.rb

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,22 @@ def test_establishes_connection
132132
ActiveRecord::Tasks::DatabaseTasks.purge @configuration
133133
end
134134
end
135-
end
135+
136+
class PostgreSQLDBCharsetTest < ActiveRecord::TestCase
137+
def setup
138+
@connection = stub(:create_database => true)
139+
@configuration = {
140+
'adapter' => 'postgresql',
141+
'database' => 'my-app-db'
142+
}
143+
144+
ActiveRecord::Base.stubs(:connection).returns(@connection)
145+
ActiveRecord::Base.stubs(:establish_connection).returns(true)
146+
end
147+
148+
def test_db_retrieves_charset
149+
@connection.expects(:encoding)
150+
ActiveRecord::Tasks::DatabaseTasks.charset @configuration
151+
end
152+
end
153+
end

activerecord/test/cases/sqlite_rake_test.rb

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,24 @@ def test_removes_file_with_relative_path
103103
ActiveRecord::Tasks::DatabaseTasks.drop @configuration, '/rails/root'
104104
end
105105
end
106-
end
106+
107+
class SqliteDBCharsetTest < ActiveRecord::TestCase
108+
def setup
109+
@database = 'db_create.sqlite3'
110+
@connection = stub :connection
111+
@configuration = {
112+
'adapter' => 'sqlite3',
113+
'database' => @database
114+
}
115+
116+
File.stubs(:exist?).returns(false)
117+
ActiveRecord::Base.stubs(:connection).returns(@connection)
118+
ActiveRecord::Base.stubs(:establish_connection).returns(true)
119+
end
120+
121+
def test_db_retrieves_charset
122+
@connection.expects(:encoding)
123+
ActiveRecord::Tasks::DatabaseTasks.charset @configuration, '/rails/root'
124+
end
125+
end
126+
end

0 commit comments

Comments
 (0)