module Apartment::Tenant

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 6
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 6
def self.jdbc_postgresql_adapter(config)
  Apartment.use_schemas ?
    Adapters::JDBCPostgresqlSchemaAdapter.new(config) :
    Adapters::JDBCPostgresqlAdapter.new(config)
end
mysql2_adapter(config) click to toggle source
# File lib/apartment/adapters/mysql2_adapter.rb, line 6
def self.mysql2_adapter(config)
  Apartment.use_schemas ?
    Adapters::Mysql2SchemaAdapter.new(config) :
    Adapters::Mysql2Adapter.new(config)
end
postgis_adapter(config) click to toggle source
# File lib/apartment/adapters/postgis_adapter.rb, line 8
def self.postgis_adapter(config)
  postgresql_adapter(config)
end
postgresql_adapter(config) click to toggle source
# File lib/apartment/adapters/postgresql_adapter.rb, line 6
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 5
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 25
def adapter
  Thread.current[:apartment_adapter] ||= begin
    adapter_method = "#{config[:adapter]}_adapter"

    if defined?(JRUBY_VERSION)
      if config[:adapter] =~ /mysql/
        adapter_method = 'jdbc_mysql_adapter'
      elsif config[:adapter] =~ /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
init() click to toggle source

Initialize Apartment config options such as excluded_models

# File lib/apartment/tenant.rb, line 17
def init
  adapter.process_excluded_models
end
reload!(config = nil) click to toggle source

Reset config and adapter so they are regenerated

# File lib/apartment/tenant.rb, line 53
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 62
def config
  @config ||= Apartment.connection_config
end