Skip to content

Commit

Permalink
A beginning of sorts.
Browse files Browse the repository at this point in the history
Minimal implementation that supports db:create SQLite replacement
  • Loading branch information
pat committed Jun 16, 2012
1 parent 08477a6 commit 619453d
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 12 deletions.
6 changes: 6 additions & 0 deletions activerecord/lib/active_record.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -137,6 +137,12 @@ module Scoping
end end
end end


module Tasks
extend ActiveSupport::Autoload

autoload :DatabaseTasks
end

autoload :TestCase autoload :TestCase
autoload :TestFixtures, 'active_record/fixtures' autoload :TestFixtures, 'active_record/fixtures'
end end
Expand Down
13 changes: 1 addition & 12 deletions activerecord/lib/active_record/railties/databases.rake
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -50,18 +50,7 @@ db_namespace = namespace :db do
def create_database(config) def create_database(config)
begin begin
if config['adapter'] =~ /sqlite/ if config['adapter'] =~ /sqlite/
if File.exist?(config['database']) ActiveRecord::Tasks::DatabaseTasks.create config
$stderr.puts "#{config['database']} already exists"
else
begin
# Create the SQLite database
ActiveRecord::Base.establish_connection(config)
ActiveRecord::Base.connection
rescue Exception => e
$stderr.puts e, *(e.backtrace)
$stderr.puts "Couldn't create database for #{config.inspect}"
end
end
return # Skip the else clause of begin/rescue return # Skip the else clause of begin/rescue
else else
ActiveRecord::Base.establish_connection(config) ActiveRecord::Base.establish_connection(config)
Expand Down
14 changes: 14 additions & 0 deletions activerecord/lib/active_record/tasks/database_tasks.rb
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,14 @@
class ActiveRecord::Tasks::DatabaseTasks
def self.create(configuration)
if File.exist?(configuration['database'])
$stderr.puts "#{configuration['database']} already exists"
return
end

ActiveRecord::Base.establish_connection(configuration)
ActiveRecord::Base.connection
rescue Exception => e
$stderr.puts e, *(e.backtrace)
$stderr.puts "Couldn't create database for #{configuration.inspect}"
end
end
53 changes: 53 additions & 0 deletions activerecord/test/cases/sqlite_rake_test.rb
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,53 @@
require 'cases/helper'

module ActiveRecord
class SqliteRakeTest < 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_checks_database_exists
File.expects(:exist?).with(@database).returns(false)

ActiveRecord::Tasks::DatabaseTasks.create @configuration
end

def test_db_create_when_file_exists
File.stubs(:exist?).returns(true)

$stderr.expects(:puts).with("#{@database} already exists")

ActiveRecord::Tasks::DatabaseTasks.create @configuration
end

def test_db_create_establishes_a_connection
ActiveRecord::Base.expects(:establish_connection).with(@configuration)

ActiveRecord::Tasks::DatabaseTasks.create @configuration
end

def test_db_create_returns_the_connection
assert_equal ActiveRecord::Tasks::DatabaseTasks.create(@configuration),
@connection
end

def test_db_create_with_error_prints_message
ActiveRecord::Base.stubs(:establish_connection).raises(Exception)

$stderr.stubs(:puts).returns(true)
$stderr.expects(:puts).
with("Couldn't create database for #{@configuration.inspect}")

ActiveRecord::Tasks::DatabaseTasks.create(@configuration)
end
end
end

0 comments on commit 619453d

Please sign in to comment.