# class URI::LDAP

`LDAP` `URI` SCHEMA (described in RFC2255).

### Constants

COMPONENT

  An `Array` of the available components for `URI::LDAP`.

DEFAULT_PORT

  A Default port of 389 for `URI::LDAP`.

SCOPE

  Scopes available for the starting point.

  - SCOPE_BASE - the Base DN

  - SCOPE_ONE - one level under the Base DN, not including the base DN and not including any entries under this

  - SCOPE_SUB - subtrees, all entries at all levels

### Public Class Methods

build(args) click to toggle source

## Description¶ ↑

Creates a new `URI::LDAP` object from components, with syntax checking.

The components accepted are host, port, dn, attributes, scope, filter, and extensions.

The components should be provided either as an `Array`, or as a `Hash` with keys formed by preceding the component names with a colon.

If an `Array` is used, the components must be passed in the order `[host, port, dn, attributes, scope, filter, extensions]`.

Example:

    uri = URI::LDAP.build({:host => 'ldap.example.com',
      :dn => '/dc=example'})

    uri = URI::LDAP.build(["ldap.example.com", nil,
      "/dc=example;dc=com", "query", nil, nil, nil])

Calls superclass method `URI::Generic::build`

    # File lib/uri/ldap.rb, line 75
    def self.build(args)
      tmp = Util::make_components_hash(self, args)

      if tmp[:dn]
        tmp[:path] = tmp[:dn]
      end

      query = []
      [:extensions, :filter, :scope, :attributes].collect do |x|
        next if !tmp[x] && query.size == 0
        query.unshift(tmp[x])
      end

      tmp[:query] = query.join('?')

      return super(tmp)
    end

new(*arg) click to toggle source

## Description¶ ↑

Creates a new `URI::LDAP` object from generic `URI` components as per RFC 2396. No LDAP-specific syntax checking is performed.

Arguments are `scheme`, `userinfo`, `host`, `port`, `registry`, `path`, `opaque`, `query`, and `fragment`, in that order.

Example:

    uri = URI::LDAP.new("ldap", nil, "ldap.example.com", nil, nil,
      "/dc=example;dc=com", nil, "query", nil)

See also `URI::Generic.new`.

Calls superclass method `URI::Generic::new`

    # File lib/uri/ldap.rb, line 109
    def initialize(*arg)
      super(*arg)

      if @fragment
        raise InvalidURIError, 'bad LDAP URL'
      end

      parse_dn
      parse_query
    end

### Public Instance Methods

attributes() click to toggle source

Returns attributes.

    # File lib/uri/ldap.rb, line 179
    def attributes
      @attributes
    end

attributes=(val) click to toggle source

Setter for attributes `val`.

    # File lib/uri/ldap.rb, line 192
    def attributes=(val)
      set_attributes(val)
      val
    end

dn() click to toggle source

Returns dn.

    # File lib/uri/ldap.rb, line 160
    def dn
      @dn
    end

dn=(val) click to toggle source

Setter for dn `val`.

    # File lib/uri/ldap.rb, line 173
    def dn=(val)
      set_dn(val)
      val
    end

extensions() click to toggle source

Returns extensions.

    # File lib/uri/ldap.rb, line 236
    def extensions
      @extensions
    end

extensions=(val) click to toggle source

Setter for extensions `val`.

    # File lib/uri/ldap.rb, line 249
    def extensions=(val)
      set_extensions(val)
      val
    end

filter() click to toggle source

Returns filter.

    # File lib/uri/ldap.rb, line 217
    def filter
      @filter
    end

filter=(val) click to toggle source

Setter for filter `val`.

    # File lib/uri/ldap.rb, line 230
    def filter=(val)
      set_filter(val)
      val
    end

hierarchical?() click to toggle source

Checks if `URI` has a path. For `URI::LDAP` this will return `false`.

    # File lib/uri/ldap.rb, line 256
    def hierarchical?
      false
    end

scope() click to toggle source

Returns scope.

    # File lib/uri/ldap.rb, line 198
    def scope
      @scope
    end

scope=(val) click to toggle source

Setter for scope `val`.

    # File lib/uri/ldap.rb, line 211
    def scope=(val)
      set_scope(val)
      val
    end

### Protected Instance Methods

set_attributes(val) click to toggle source

Private setter for attributes `val`.

    # File lib/uri/ldap.rb, line 184
    def set_attributes(val)
      @attributes = val
      build_path_query
      @attributes
    end

set_dn(val) click to toggle source

Private setter for dn `val`.

    # File lib/uri/ldap.rb, line 165
    def set_dn(val)
      @dn = val
      build_path_query
      @dn
    end

set_extensions(val) click to toggle source

Private setter for extensions `val`.

    # File lib/uri/ldap.rb, line 241
    def set_extensions(val)
      @extensions = val
      build_path_query
      @extensions
    end

set_filter(val) click to toggle source

Private setter for filter `val`.

    # File lib/uri/ldap.rb, line 222
    def set_filter(val)
      @filter = val
      build_path_query
      @filter
    end

set_scope(val) click to toggle source

Private setter for scope `val`.

    # File lib/uri/ldap.rb, line 203
    def set_scope(val)
      @scope = val
      build_path_query
      @scope
    end

### Private Instance Methods

build_path_query() click to toggle source

Private method to assemble `query` from `attributes`, `scope`, `filter`, and `extensions`.

    # File lib/uri/ldap.rb, line 147
    def build_path_query
      @path = '/' + @dn

      query = []
      [@extensions, @filter, @scope, @attributes].each do |x|
        next if !x && query.size == 0
        query.unshift(x)
      end
      @query = query.join('?')
    end

parse_dn() click to toggle source

Private method to cleanup `dn` from using the `path` component attribute.

    # File lib/uri/ldap.rb, line 121
    def parse_dn
      raise InvalidURIError, 'bad LDAP URL' unless @path
      @dn = @path[1..-1]
    end

parse_query() click to toggle source

Private method to cleanup `attributes`, `scope`, `filter`, and `extensions` from using the `query` component attribute.

    # File lib/uri/ldap.rb, line 129
    def parse_query
      @attributes = nil
      @scope      = nil
      @filter     = nil
      @extensions = nil

      if @query
        attrs, scope, filter, extensions = @query.split('?')

        @attributes = attrs if attrs && attrs.size > 0
        @scope      = scope if scope && scope.size > 0
        @filter     = filter if filter && filter.size > 0
        @extensions = extensions if extensions && extensions.size > 0
      end
    end