class Apartment::Adapters::AbstractAdapter

def connect_to_new(database)

def connect_to_new(database)
  ActiveRecord::Base.establish_connection multi_tenantify(database)
d

def create(database)

Parameters:
  • database (String) -- Database name
def create(database)
    # TODO create_database unless using_schemas?
	process(database) do
			import_database_schema
			# Manually init schema migrations table (apparently there were issues with Postgres when this isn't done)
			ActiveRecord::Base.connection.initialize_schema_migrations_table
			
      # Seed data if appropriate
      seed_data if Apartment.seed_after_create
	end
end

def create_schema

def create_schema
  # noop
end

def current_database

Return the current database name
def current_database
  ActiveRecord::Base.connection.current_database
end

def import_database_schema

def import_database_schema
  load_or_abort("#{Rails.root}/db/schema.rb")
end

def initialize(config, defaults)

Parameters:
  • defaults (Hash) -- Some default options
  • config (Hash) -- Database config
def initialize(config, defaults)
  @config = config
  @defaults = defaults
end

def load_or_abort(file)

def load_or_abort(file)
  if File.exists?(file)
    load(file)
  else
    abort %{#{file} doesn't exist yet}
  end
end

def multi_tenantify(database)

Return a new config that is multi-tenanted
def multi_tenantify(database)
config.clone.tap do |config|
 config['database'].gsub!(Rails.env.to_s, "#{database}_#{Rails.env}")
nd
d

def process(database = nil)

Parameters:
  • database (String?) -- Database or schema to connect to, will reset if no database passed in
def process(database = nil)
  current_db = current_database
switch(database)
yield if block_given?
sure
switch(current_db)
nd

def reset

Reset the base connection
def reset
  ActiveRecord::Base.establish_connection @config
end

def sanitize(database)

Remove all non-alphanumeric characters
def sanitize(database)
  database.gsub(/[\W]/,'')
 end

def seed_data

def seed_data
   load_or_abort("#{Rails.root}/db/seeds.rb")
  end

def switch(database = nil)

Switch to new connection (or schema if appopriate)
def switch(database = nil)
  # Just connect to default db and return
eturn reset if database.nil?
  connect_to_new(database)
d

def using_schemas?

Whether or not to use postgresql schemas
def using_schemas?
  false
end