Sha256: 617501fb7e33cea55c260b96eb9e7b03a73b239a31c52dddcc1b2ecc1a74adce

Contents?: true

Size: 1.35 KB

Versions: 4

Compression:

Stored size: 1.35 KB

Contents

require 'active_support/core_ext/module/delegation'

module Apartment
  
  #   The main entry point to Apartment functions
	module Database
	  
	  extend self

    delegate :create, :current_database, :process, :process_excluded_models, :reset, :seed, :switch, :to => :adapter

    #   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
	    @adapter ||= begin
		    adapter_method = "#{config[:adapter]}_adapter"
	    
		    begin
          require "apartment/adapters/#{adapter_method}"
        rescue LoadError => e
          raise "The adapter `#{config[:adapter]}` 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!
      @adapter = nil
      @config = nil
    end
    
	private
	
    #   Fetch the rails database configuration
    # 
    def config
      @config ||= Rails.configuration.database_configuration[Rails.env].symbolize_keys
    end
    
  end
	
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
apartment-0.13.1 lib/apartment/database.rb
apartment-0.13.0 lib/apartment/database.rb
apartment-0.12.0 lib/apartment/database.rb
apartment-0.11.1 lib/apartment/database.rb