# module ActiveLdap::Connection::ClassMethods

### Public Instance Methods

active_connection_name() click to toggle source

    # File lib/active_ldap/connection.rb, line 37
    def active_connection_name
      @active_connection_name ||= determine_active_connection_name
    end

clear_active_connection_name() click to toggle source

    # File lib/active_ldap/connection.rb, line 55
    def clear_active_connection_name
      @active_connection_name = nil
      ObjectSpace.each_object(Class) do |klass|
        if klass < self and !klass.name.blank?
          klass.instance_variable_set("@active_connection_name", nil)
        end
      end
    end

clear_active_connections!() click to toggle source

    # File lib/active_ldap/connection.rb, line 47
    def clear_active_connections!
      connections = active_connections
      connections.each do |key, connection|
        connection.disconnect!
      end
      connections.clear
    end

connected?() click to toggle source

    # File lib/active_ldap/connection.rb, line 111
    def connected?
      active_connections[active_connection_name] ? true : false
    end

connection() click to toggle source

    # File lib/active_ldap/connection.rb, line 64
    def connection
      conn = nil
      @active_connection_name ||= nil
      if @active_connection_name
        conn = active_connections[@active_connection_name]
      end
      unless conn
        conn = retrieve_connection
        active_connections[@active_connection_name] = conn
      end
      conn
    end

connection=(adapter) click to toggle source

    # File lib/active_ldap/connection.rb, line 77
    def connection=(adapter)
      if adapter.is_a?(Adapter::Base)
        active_connections[active_connection_name] = adapter
      elsif adapter.is_a?(Hash)
        config = adapter
        self.connection = instantiate_adapter(config)
      elsif adapter.nil?
        raise ConnectionNotSetup
      else
        setup_connection(adapter)
      end
    end

default_adapter() click to toggle source

    # File lib/active_ldap/connection.rb, line 107
    def default_adapter
      @@default_adapter ||= guess_available_adapter
    end

establish_connection(config=nil) click to toggle source

    # File lib/active_ldap/connection.rb, line 154
    def establish_connection(config=nil)
      message =
        _("ActiveLdap::Connection.establish_connection has been deprecated "              "since 1.1.0. "              "Please use ActiveLdap::Connection.setup_connection instead.")
      ActiveSupport::Deprecation.warn(message)
      setup_connection(config)
    end

instantiate_adapter(config) click to toggle source

    # File lib/active_ldap/connection.rb, line 90
    def instantiate_adapter(config)
      adapter = (config[:adapter] || default_adapter)
      normalized_adapter = adapter.downcase.gsub(/-/, "_")
      adapter_method = "#{normalized_adapter}_connection"
      unless Adapter::Base.respond_to?(adapter_method)
        raise AdapterNotFound.new(adapter)
      end
      if config.has_key?(:ldap_scope)
        message = _(":ldap_scope connection option is deprecated. "                        "Use :scope instead.")
        ActiveSupport::Deprecation.warn(message)
        config[:scope] ||= config.delete(:ldap_scope)
      end
      config = remove_connection_related_configuration(config)
      Adapter::Base.send(adapter_method, config)
    end

remove_active_connections!() click to toggle source

    # File lib/active_ldap/connection.rb, line 41
    def remove_active_connections!
      active_connections.keys.each do |key|
        remove_connection(key)
      end
    end

remove_connection(klass_or_key=self) click to toggle source

    # File lib/active_ldap/connection.rb, line 130
    def remove_connection(klass_or_key=self)
      if klass_or_key.is_a?(Module)
        key = active_connection_key(klass_or_key)
      else
        key = klass_or_key
      end
      config = configuration(key)
      conn = active_connections[key]
      remove_configuration_by_configuration(config)
      active_connections.delete_if {|_key, value| value == conn}
      conn.disconnect! if conn
      config
    end

retrieve_connection() click to toggle source

    # File lib/active_ldap/connection.rb, line 115
    def retrieve_connection
      conn = nil
      name = active_connection_name
      raise ConnectionNotSetup unless name
      conn = active_connections[name]
      if conn.nil?
        config = configuration(name)
        raise ConnectionNotSetup unless config
        self.connection = config
        conn = active_connections[name]
      end
      raise ConnectionNotSetup if conn.nil?
      conn
    end

schema() click to toggle source

Return the schema object

    # File lib/active_ldap/connection.rb, line 164
    def schema
      connection.schema
    end

setup_connection(config=nil) click to toggle source

    # File lib/active_ldap/connection.rb, line 144
    def setup_connection(config=nil)
      config = ensure_configuration(config)
      remove_connection

      clear_active_connection_name
      key = active_connection_key
      @active_connection_name = key
      define_configuration(key, merge_configuration(config))
    end

single_threaded_active_connections() click to toggle source

    # File lib/active_ldap/connection.rb, line 15
    def single_threaded_active_connections
      @@active_connections
    end

thread_safe_active_connections() click to toggle source

    # File lib/active_ldap/connection.rb, line 11
    def thread_safe_active_connections
      @@active_connections[Thread.current.object_id] ||= {}
    end

### Private Instance Methods

active_connection_key(k=self) click to toggle source

    # File lib/active_ldap/connection.rb, line 169
    def active_connection_key(k=self)
      k.name.blank? ? k.object_id : k.name
    end

clear_all_cached_connections!() click to toggle source

    # File lib/active_ldap/connection.rb, line 184
    def clear_all_cached_connections!
      if @@allow_concurrency
        @@active_connections.each_value do |connection_hash_for_thread|
          connection_hash_for_thread.each_value {|conn| conn.disconnect!}
          connection_hash_for_thread.clear
        end
      else
        @@active_connections.each_value {|conn| conn.disconnect!}
      end
      @@active_connections.clear
    end

determine_active_connection_name() click to toggle source

    # File lib/active_ldap/connection.rb, line 173
    def determine_active_connection_name
      key = active_connection_key
      if active_connections[key] or configuration(key)
        key
      elsif self == ActiveLdap::Base
        nil
      else
        superclass.active_connection_name
      end
    end

gem_available?(name) click to toggle source

    # File lib/active_ldap/connection.rb, line 218
    def gem_available?(name)
      not Gem::Specification.find_all_by_name(name).empty?
    end

guess_available_adapter() click to toggle source

    # File lib/active_ldap/connection.rb, line 196
    def guess_available_adapter
      if Object.respond_to?(:java)
        "jndi"
      else
        ruby_ldap_available = false
        $LOAD_PATH.each do |path|
          if File.exist?(File.join(path, "ldap", "ldif.rb"))
            ruby_ldap_available = true
            break
          end
        end
        if !ruby_ldap_available and Object.const_defined?(:Gem)
          ruby_ldap_available = gem_available?("ruby-ldap")
        end
        if ruby_ldap_available
          "ldap"
        else
          "net-ldap"
        end
      end
    end