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.

[View source]

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

[View source]

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

[View source]

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