lib/ldap/ldap_facade.rb in dm-ldap-adapter-0.2.0 vs lib/ldap/ldap_facade.rb in dm-ldap-adapter-0.3.0

- old
+ new

@@ -1,6 +1,7 @@ -require "net/ldap.rb" +require 'net/ldap' + module Ldap class LdapFacade # @param config Hash for the ldap connection def self.open(config) @@ -36,18 +37,18 @@ max = n if max < n end id = max + 1 props[id_sym] = "#{id}" if @ldap.add( :dn => dn(dn_prefix, treebase), - :attributes => props) + :attributes => props) and @ldap.get_operation_result.code.to_s == "0" id else unless silence msg = ldap_error("create", dn(dn_prefix, treebase)) + "\n\t#{props.inspect}" # TODO maybe raise always an error - if @ldap.get_operation_result.code == 68 + if @ldap.get_operation_result.code.to_s == "68" raise ::DataMapper::PersistenceError.new(msg) else logger.warn(msg) end end @@ -62,10 +63,31 @@ def read_objects(treebase, key_fields, conditions) filters = [] conditions.each do |cond| c = cond[2] case cond[0] + when :or_operator + f = nil + cond[1].each do |cc| + ff = case cc[0] + when :eql + Net::LDAP::Filter.eq( cc[1].to_s, cc[2].to_s ) + when :gte + f = Net::LDAP::Filter.ge( cc[1].to_s, cc[2].to_s ) + when :lte + f = Net::LDAP::Filter.le( cc[1].to_s, cc[2].to_s ) + when :like + f = Net::LDAP::Filter.eq( cc[1].to_s, cc[2].to_s.gsub(/%/, "*").gsub(/_/, "*").gsub(/\*\*/, "*") ) + else + logger.error(cc[0].to_s + " needs coding") + end + if f + f = f | ff + else + f = ff + end + end when :eql if c.nil? f = ~ Net::LDAP::Filter.pres( cond[1].to_s ) elsif c.class == Array f = nil @@ -105,10 +127,10 @@ when :like f = Net::LDAP::Filter.eq( cond[1].to_s, c.to_s.gsub(/%/, "*").gsub(/_/, "*").gsub(/\*\*/, "*") ) else logger.error(cond[0].to_s + " needs coding") end - filters << f + filters << f if f end filter = nil filters.each do |f| if filter.nil?