Created
April 22, 2010 03:27
-
-
Save snusnu/374772 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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