lib/net/ldap/dataset.rb in net-ldap-0.0.5 vs lib/net/ldap/dataset.rb in net-ldap-0.1.0

- old
+ new

@@ -1,8 +1,5 @@ -# $Id$ -# -# #---------------------------------------------------------------------------- # # Copyright (C) 2006 by Francis Cianfrocca. All Rights Reserved. # # Gmail: garbagecat10 @@ -20,89 +17,83 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # #--------------------------------------------------------------------------- -# -# - - - module Net -class LDAP + class LDAP + class Dataset < Hash + attr_reader :comments -class Dataset < Hash + class IOFilter + def initialize(io) + @io = io + end + def gets + s = @io.gets + s.chomp if s + end + end - attr_reader :comments + def self.read_ldif io + ds = Dataset.new + io = IOFilter.new(io) + line = io.gets + dn = nil - def Dataset::read_ldif io - ds = Dataset.new + while line + new_line = io.gets + if new_line =~ /^[\s]+/ + line << " " << $' + else + nextline = new_line - line = io.gets && chomp - dn = nil + 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 - 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 + line = nextline + end end - line = nextline + ds end - end - - ds - end - def initialize - @comments = [] - end + def initialize + @comments = [] + end - def to_ldif - ary = [] - ary += (@comments || []) + def to_ldif + ary = [] + ary += (@comments || []) + keys.sort.each do |dn| + ary << "dn: #{dn}" - keys.sort.each {|dn| - ary << "dn: #{dn}" + self[dn].keys.map {|sym| sym.to_s}.sort.each do |attr| + self[dn][attr.intern].each {|val| ary << "#{attr}: #{val}" } + end - self[dn].keys.map {|sym| sym.to_s}.sort.each {|attr| - self[dn][attr.intern].each {|val| - ary << "#{attr}: #{val}" - } - } + ary << "" + end + block_given? and ary.each {|line| yield line} + ary + end - ary << "" - } - - block_given? and ary.each {|line| yield line} - - ary - end - - -end # Dataset - -end # LDAP -end # Net - - + end + end +end