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?