Class: Net::LDAP::Dataset

Inherits:
Hash
  • Object
show all
Defined in:
lib/net/ldap/dataset.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDataset

Returns a new instance of Dataset.


76
77
78
# File 'lib/net/ldap/dataset.rb', line 76

def initialize
  @comments = []
end

Instance Attribute Details

#commentsObject (readonly)

Returns the value of attribute comments


36
37
38
# File 'lib/net/ldap/dataset.rb', line 36

def comments
  @comments
end

Class Method Details

.read_ldif(io) ⇒ Object


39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# 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

Instance Method Details

#to_ldifObject


81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# 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