Sha256: d9aaa1a73acbe7ab8434cf66c8cfc777936189a1428af7b4952fb2da5b12a5c4
Contents?: true
Size: 1.94 KB
Versions: 5
Compression:
Stored size: 1.94 KB
Contents
require 'forwardable' module Apartment # The main entry point to Apartment functions # module Tenant extend self extend Forwardable def_delegators :adapter, :create, :current_tenant, :current, :current_database, :drop, :process, :process_excluded_models, :reset, :seed, :switch attr_writer :config # Initialize Apartment config options such as excluded_models # def init process_excluded_models end # Fetch the proper multi-tenant adapter based on Rails config # # @return {subclass of Apartment::AbstractAdapter} # 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 # Reset config and adapter so they are regenerated # def reload!(config = nil) Thread.current[:apartment_adapter] = nil @config = config end private # Fetch the rails database configuration # def config @config ||= (ActiveRecord::Base.configurations[Rails.env] || Rails.application.config.database_configuration[Rails.env]).symbolize_keys end end def self.const_missing(const_name) super unless const_name == :Database warn "`Apartment::Database` has been deprecated. Use `Apartment::Tenant` instead." Tenant end end
Version data entries
5 entries across 5 versions & 1 rubygems