class Net::LDAP::Dataset

Attributes

comments[R]

Public Class Methods

new() click to toggle source
# File lib/net/ldap/dataset.rb, line 76
def initialize
  @comments = []
end
read_ldif(io) click to toggle source
# File lib/net/ldap/dataset.rb, line 39
def Dataset::read_ldif io
  ds = Dataset.new

  line = io.gets && chomp
  dn = nil

  while line
    io.gets and chomp
    if $_ =~ /^[\s]+/
      line << " " << $'
    else
      nextline = $_

      if line =~ /^\#/
        ds.comments << line
      elsif line =~ /^dn:[\s]*/i
        dn = $'
        ds[dn] = Hash.new {|k,v| k[v] = []}
      elsif line.length == 0
        dn = nil
      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.intern] << attrvalue
      end

      line = nextline
    end
  end

  ds
end

Public Instance Methods

to_ldif() { |line| ... } click to toggle source
# File lib/net/ldap/dataset.rb, line 81
def to_ldif
  ary = []
  ary += (@comments || [])

  keys.sort.each {|dn|
    ary << "dn: #{dn}"

    self[dn].keys.map {|sym| sym.to_s}.sort.each {|attr|
      self[dn][attr.intern].each {|val|
        ary << "#{attr}: #{val}"
      }
    }

    ary << ""
  }

  block_given? and ary.each {|line| yield line}

  ary
end