28 lines
820 B
Ruby
28 lines
820 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
# The 'factory' that constructs the constructors for our various database managers
|
||
|
class DatabaseManagerFactory
|
||
|
def self.create(db_type, username: nil, password: nil)
|
||
|
db_manager = Object.new
|
||
|
case db_type
|
||
|
when 'sqlite_memory'
|
||
|
db_manager.extend(SQLiteMemoryManager)
|
||
|
when 'sqlite_flatfile'
|
||
|
db_manager.extend(SQLiteFlatFileManager)
|
||
|
when 'mysql'
|
||
|
db_manager.extend(MySQLManager)
|
||
|
when 'postgres'
|
||
|
db_manager.extend(PostgresManager)
|
||
|
when 'mongodb'
|
||
|
db_manager.extend(MongoDBManager)
|
||
|
else
|
||
|
raise "Unknown database type: #{db_type}"
|
||
|
end
|
||
|
|
||
|
# Initialize the database manager with username and password if they exist
|
||
|
db_manager.initialize(username, password) if db_manager.respond_to?(:initialize)
|
||
|
|
||
|
db_manager
|
||
|
end
|
||
|
end
|