Parent

Net::LDAP::Dataset

An LDAP Dataset. Used primarily as an intermediate format for converting to and from LDIF strings and Net::LDAP::Entry objects.

Attributes

comments[R]

Dataset object comments.

Public Class Methods

from_entry(entry) click to toggle source

Creates a Dataset object from an Entry object. Used mostly to assist with the conversion of

# File lib/net/ldap/dataset.rb, line 95
def from_entry(entry)
  dataset = Net::LDAP::Dataset.new
  hash = { }
  entry.each_attribute do |attribute, value|
    next if attribute == :dn
    hash[attribute] = value
  end
  dataset[entry.dn] = hash
  dataset
end
read_ldif(io) click to toggle source

Reads an object that returns data line-wise (using #gets) and parses LDIF data into a Dataset object.

# File lib/net/ldap/dataset.rb, line 109
def read_ldif(io)
  ds = Net::LDAP::Dataset.new
  io = ChompedIO.new(io)

  line = io.gets
  dn = nil

  while line
    new_line = io.gets

    if new_line =~ /^[\s]+/
      line << " " << $'
    else
      nextline = new_line

      if line =~ /^#/
        ds.comments << line
        yield :comment, line if block_given?
      elsif line =~ /^dn:[\s]*/
        dn = $'
        ds[dn] = Hash.new { |k,v| k[v] = [] }
        yield :dn, dn if block_given?
      elsif line.empty?
        dn = nil
        yield :end, nil if block_given?
      elsif line =~ /^([^:]+):([\:]?)[\s]*/
        # $1 is the attribute name
        # $2 is a colon iff the attr-value is base-64 encoded
        # $' is the attr-value
        # Avoid the Base64 class because not all Ruby versions have it.
        attrvalue = ($2 == ":") ? $'.unpack('m').shift : $'
        ds[dn][$1.downcase.to_sym] << attrvalue
        yield :attr, [$1.downcase.to_sym, attrvalue] if block_given?
      end

      line = nextline
    end
  end

Public Instance Methods

to_entries() click to toggle source

Convert the parsed LDIF objects to Net::LDAP::Entry objects.

# File lib/net/ldap/dataset.rb, line 50
def to_entries
  ary = []
  keys.each do |dn|
    entry = Net::LDAP::Entry.new(dn)
    self[dn].each do |attr, value|
      entry[attr] = value
    end
    ary << entry
  end
  ary
end
to_ldif() click to toggle source

Outputs an LDAP Dataset as an array of strings representing LDIF entries.

# File lib/net/ldap/dataset.rb, line 17
def to_ldif
  ary = []
  ary += @comments unless @comments.empty?
  keys.sort.each do |dn|
    ary << "dn: #{dn}"

    attributes = self[dn].keys.map { |attr| attr.to_s }.sort
    attributes.each do |attr|
      self[dn][attr.to_sym].each do |value|
        if attr == "userpassword" or value_is_binary?(value)
          value = [value].pack("m").chomp.gsub(/\n/, "\n ")
          ary << "#{attr}:: #{value}"
        else
          ary << "#{attr}: #{value}"
        end
      end
    end

    ary << ""
  end
  block_given? and ary.each { |line| yield line}

  ary
end
to_ldif_string() click to toggle source

Outputs an LDAP Dataset as an LDIF string.

# File lib/net/ldap/dataset.rb, line 44
def to_ldif_string
  to_ldif.join("\n")
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.