Skip to content

Instantly share code, notes, and snippets.

@snusnu
Created April 22, 2010 03:27
Show Gist options
  • Save snusnu/374772 to your computer and use it in GitHub Desktop.
Save snusnu/374772 to your computer and use it in GitHub Desktop.
require 'active_support/inflector'
# dm-core/spec/adapter.rb
module DataMapper
module Spec
module Adapters
def self.setup(adapter_name)
SpecAdapter.new(adapter_name)
end
def self.adapter
SpecAdapter.adapter
end
class SpecAdapter
attr_accessor :adapter
attr_reader :name
class << self
def new(name)
klass = lookup(name)
equal?(klass) ? super(name) : klass.new(name)
end
attr_reader :adapter
private
def lookup(adapter)
klass_name = adapter.camelize
unless DataMapper::Spec::Adapters.const_defined?("#{klass_name}Adapter")
raise "Adapter #{adapter} not supported (#{klass_name}Adapter)"
end
const_get(klass_name)
end
def adapter=(adapter)
@adapter = adapter
end
end
def setup
begin
adapter = DataMapper.setup(name, connection_string)
test_connection
self.class.adapter = adapter
rescue Exception => e
puts "Could not connect to the database using '#{connection_string}' because of: #{e.inspect}"
end
end
def name
@name ||= (ENV['ADAPTER'] || 'in_memory')
end
def adapter_name
"dm-#{name}-adapter"
end
def connection_string
"#{name}://#{credentials}@localhost/datamapper_tests"
end
def credentials
"#{username}:#{password}"
end
def username
'datamapper'
end
def password
'datamapper'
end
def test_connection
if adapter.respond_to?(:select)
connection_test
end
end
# Test the connection
#
# Overwrite this method if you need to perform custom connection testing
#
# @raise [Exception]
def connection_test
adapter.select('SELECT 1')
end
def temp_db_dir
Dir.tmpdir
end
private
def initialize(name)
@name, @adapter = name.to_sym, nil
end
end
end
end
end
# ------------------------------------------------------------------------------------------------
# dm-core/spec/spec_helper.rb
require "dm-#{ENV['ADAPTER']}-adapter/spec/setup"
# ------------------------------------------------------------------------------------------------
# dm-sqlite-adapter/lib/dm-sqlite-adapter/spec/setup.rb
module DataMapper
module Spec
module Adapters
class SqliteAdapter < SpecAdapter
def connection_string
"sqlite3://#{temp_db_dir}/datamapper_tests.db"
end
end
setup ENV['ADAPTER'] || :sqlite
end
end
end
# ------------------------------------------------------------------------------------------------
# dm-mysql-adapter/lib/dm-mysql-adapter/spec/setup.rb
module DataMapper
module Spec
module Adapters
class MysqlAdapter < SpecAdapter
end
setup ENV['ADAPTER'] || :mysql
end
end
end
# ------------------------------------------------------------------------------------------------
# dm-postgres-adapter/lib/dm-postgres-adapter/spec/setup.rb
module DataMapper
module Spec
module Adapters
class PostgresAdapter < SpecAdapter
end
setup ENV['ADAPTER'] || :postgres
end
end
end
# ------------------------------------------------------------------------------------------------
# dm-oracle-adapter/lib/dm-oracle-adapter/spec/setup.rb
module DataMapper
module Spec
module Adapters
class OracleAdapter < SpecAdapter
def connection_test
adapter.select('SELECT 1 FROM dual')
end
end
setup ENV['ADAPTER'] || :oracle
end
end
end
# ------------------------------------------------------------------------------------------------
# dm-sqlserver-adapter/lib/dm-sqlserver-adapter/spec/setup.rb
module DataMapper
module Spec
module Adapters
class SqlserverAdapter < SpecAdapter
def connection_string
"#{super};instance=SQLEXPRESS"
end
end
setup ENV['ADAPTER'] || :sqlserver
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment