module Apartment::Tenant

JDBC helper to decide wether to use JDBC Postgresql Adapter or JDBC Postgresql Adapter with Schemas

Helper module to decide wether to use mysql2 adapter or mysql2 adapter with schemas

The main entry point to Apartment functions

Attributes

config[W]

Public Class Methods

jdbc_mysql_adapter(config) click to toggle source
# File lib/apartment/adapters/jdbc_mysql_adapter.rb, line 7
def self.jdbc_mysql_adapter(config)
  Adapters::JDBCMysqlAdapter.new config
end
jdbc_postgresql_adapter(config) click to toggle source
# File lib/apartment/adapters/jdbc_postgresql_adapter.rb, line 8
def self.jdbc_postgresql_adapter(config)
  if Apartment.use_schemas
    Adapters::JDBCPostgresqlSchemaAdapter.new(config)
  else
    Adapters::JDBCPostgresqlAdapter.new(config)
  end
end
mysql2_adapter(config) click to toggle source
# File lib/apartment/adapters/mysql2_adapter.rb, line 8
def self.mysql2_adapter(config)
  if Apartment.use_schemas
    Adapters::Mysql2SchemaAdapter.new(config)
  else
    Adapters::Mysql2Adapter.new(config)
  end
end
postgis_adapter(config) click to toggle source
# File lib/apartment/adapters/postgis_adapter.rb, line 9
def self.postgis_adapter(config)
  postgresql_adapter(config)
end
postgresql_adapter(config) click to toggle source
# File lib/apartment/adapters/postgresql_adapter.rb, line 7
def self.postgresql_adapter(config)
  adapter = Adapters::PostgresqlAdapter
  adapter = Adapters::PostgresqlSchemaAdapter if Apartment.use_schemas
  adapter = Adapters::PostgresqlSchemaFromSqlAdapter if Apartment.use_sql && Apartment.use_schemas
  adapter.new(config)
end
sqlite3_adapter(config) click to toggle source
# File lib/apartment/adapters/sqlite3_adapter.rb, line 7
def self.sqlite3_adapter(config)
  Adapters::Sqlite3Adapter.new(config)
end

Public Instance Methods

adapter() click to toggle source

Fetch the proper multi-tenant adapter based on Rails config

@return {subclass of Apartment::AbstractAdapter}

# File lib/apartment/tenant.rb, line 21
def adapter
  Thread.current[:apartment_adapter] ||= begin
    adapter_method = "#{config[:adapter]}_adapter"

    if defined?(JRUBY_VERSION)
      case config[:adapter]
      when /mysql/
        adapter_method = 'jdbc_mysql_adapter'
      when /postgresql/
        adapter_method = 'jdbc_postgresql_adapter'
      end
    end

    begin
      require "apartment/adapters/#{adapter_method}"
    rescue LoadError
      raise "The adapter `#{adapter_method}` is not yet supported"
    end

    unless respond_to?(adapter_method)
      raise AdapterNotFound, "database configuration specifies nonexistent #{config[:adapter]} adapter"
    end

    send(adapter_method, config)
  end
end
reload!(config = nil) click to toggle source

Reset config and adapter so they are regenerated

# File lib/apartment/tenant.rb, line 50
def reload!(config = nil)
  Thread.current[:apartment_adapter] = nil
  @config = config
end

Private Instance Methods

config() click to toggle source

Fetch the rails database configuration

# File lib/apartment/tenant.rb, line 59
def config
  @config ||= Apartment.connection_config
end