ruby-activeldap 0.5.3 → 0.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/activeldap/base.rb +67 -15
  2. data/lib/activeldap.rb +11 -2
  3. metadata +2 -2
@@ -358,7 +358,7 @@ module ActiveLDAP
358
358
  dnval = m.dn.split(/,/)[0].split(/=/)[1]
359
359
 
360
360
  if objects
361
- return eval("#{real_klass}.new(dnval)")
361
+ return eval("#{real_klass}.new(m)")
362
362
  else
363
363
  return dnval
364
364
  end
@@ -392,8 +392,8 @@ module ActiveLDAP
392
392
  end
393
393
 
394
394
  # Allow a single string argument
395
- objects = false
396
395
  val = config
396
+ objects = false
397
397
  # Or a hash
398
398
  if config.respond_to?"has_key?"
399
399
  attr = config[:attribute] || dnattr()
@@ -410,7 +410,7 @@ module ActiveLDAP
410
410
  dnval = m.dn.split(/,/)[0].split(/=/)[1]
411
411
 
412
412
  if objects
413
- matches.push(eval("#{real_klass}.new(dnval)"))
413
+ matches.push(eval("#{real_klass}.new(m)"))
414
414
  else
415
415
  matches.push(dnval)
416
416
  end
@@ -462,20 +462,20 @@ module ActiveLDAP
462
462
  []
463
463
  end
464
464
 
465
+
466
+
465
467
  ### All instance methods, etc
466
468
 
467
469
  # new
468
470
  #
469
- # Creates a new instance of Base initializing all class and
470
- # instance variables. initialize2() must be called to complete
471
- # all initialization.
472
- # defines local defaults. See examples
473
- # If multiple values exist for dnattr, the first one put here will be authoritative
474
- # TODO: Add support for relative distinguished names
471
+ # Creates a new instance of Base initializing all class and all
472
+ # initialization. Defines local defaults. See examples If multiple values
473
+ # exist for dnattr, the first one put here will be authoritative
474
+ # TODO: Add # support for relative distinguished names
475
+ # val can be a dn attribute value, a full DN, or a LDAP::Entry. The use
476
+ # with a LDAP::Entry is primarily meant for internal use by find and
477
+ # find_all.
475
478
  def initialize(val='')
476
- if val.class != String
477
- raise TypeError, "Object key must be a String"
478
- end
479
479
  # Try a default connection if none made explicitly
480
480
  unless Base.connection
481
481
  # Use @@config if it has been prepopulated and the conn is down.
@@ -485,6 +485,16 @@ module ActiveLDAP
485
485
  ActiveLDAP::Base.connect
486
486
  end
487
487
  end
488
+ if val.class == LDAP::Entry
489
+ # Call import, which is basically initialize
490
+ # without accessing LDAP.
491
+ @@logger.debug "initialize: val is a LDAP::Entry - running import."
492
+ import(val)
493
+ return
494
+ end
495
+ if val.class != String
496
+ raise TypeError, "Object key must be a String"
497
+ end
488
498
 
489
499
  @data = {} # where the r/w entry data is stored
490
500
  @data.default = []
@@ -551,7 +561,7 @@ module ActiveLDAP
551
561
  send(attr_sym, val)
552
562
  end
553
563
  end
554
- end # initialize2
564
+ end # initialize
555
565
 
556
566
  # Hide new in Base
557
567
  private_class_method :new
@@ -845,6 +855,50 @@ module ActiveLDAP
845
855
 
846
856
  private
847
857
 
858
+ # import(LDAP::Entry)
859
+ #
860
+ # Overwrites an existing entry (usually called by new)
861
+ # with the data given in the data given in LDAP::Entry.
862
+ #
863
+ def import(entry=nil)
864
+ @@logger.debug("stub: import called")
865
+ if entry.class != LDAP::Entry
866
+ raise TypeError, "argument must be a LDAP::Entry"
867
+ end
868
+
869
+ @data = {} # where the r/w entry data is stored
870
+ @data.default = []
871
+ @ldap_data = {} # original ldap entry data
872
+ @ldap_data.default = []
873
+ @attr_methods = {} # list of valid method calls for attributes used for dereferencing
874
+
875
+ # Get some attributes
876
+ @dn = entry.dn
877
+ entry.attrs.each do |attr|
878
+ # Load with subtypes just like @data
879
+ @@logger.debug("calling make_subtypes for entry.vals(attr).dup")
880
+ safe_attr, value = make_subtypes(attr, entry.vals(attr).dup)
881
+ @@logger.debug("finished make_subtypes for #{attr}")
882
+ # Add subtype to any existing values
883
+ if @ldap_data.has_key? safe_attr
884
+ value.each do |v|
885
+ @ldap_data[safe_attr].push(v)
886
+ end
887
+ else
888
+ @ldap_data[safe_attr] = value
889
+ end
890
+ end
891
+ # Assume if we are importing it that it exists
892
+ @exists = true
893
+ # Populate schema data
894
+ send(:apply_objectclass, @ldap_data['objectClass'])
895
+
896
+ # Populate real data now that we have the schema with aliases
897
+ @ldap_data.each do |pair|
898
+ send(:attribute_method=, pair[0], pair[1].dup)
899
+ end
900
+ end # import
901
+
848
902
  # enforce_types
849
903
  #
850
904
  # enforce_types applies your changes without attempting to write to LDAP. This means that
@@ -860,8 +914,6 @@ module ActiveLDAP
860
914
  return true
861
915
  end
862
916
 
863
-
864
-
865
917
  # apply_objectclass
866
918
  #
867
919
  # objectClass= special case for updating appropriately
data/lib/activeldap.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/ruby -W0
2
2
  # = Ruby/ActiveLDAP
3
3
  #
4
- # "Ruby/ActiveLDAP" Copyright (C) 2004 Will Drewry mailto:will@alum.bu.edu
4
+ # "Ruby/ActiveLDAP" Copyright (C) 2004,2005 Will Drewry mailto:will@alum.bu.edu
5
5
  #
6
6
  # == Introduction
7
7
  #
@@ -795,6 +795,15 @@
795
795
  # do all of your LDAP specific calls here and then continue about your normal
796
796
  # Ruby/ActiveLDAP business afterward.
797
797
  #
798
+ #
799
+ # ==== Reusing LDAP::Entry objects without reusing the LDAP connection
800
+ #
801
+ # You can call Klass.new(entry) where Klass is some subclass of Base and
802
+ # enty is an LDAP::entry. This use of 'new' is is meant for use from
803
+ # within find_all and find, but you can also use it in tandem with advanced
804
+ # LDAP queries.
805
+ #
806
+ # See tests/benchmark for more insight.
798
807
  #
799
808
  # ==== Juggling multiple LDAP connections
800
809
  #
@@ -898,7 +907,7 @@ require 'activeldap/configuration'
898
907
  require 'activeldap/schema2'
899
908
 
900
909
  module ActiveLDAP
901
- VERSION = "0.5.3"
910
+ VERSION = "0.5.4"
902
911
  end
903
912
 
904
913
  ActiveLDAP::Base.class_eval do
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.1
3
3
  specification_version: 1
4
4
  name: ruby-activeldap
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.5.3
7
- date: 2004-10-29
6
+ version: 0.5.4
7
+ date: 2005-02-17
8
8
  summary: Ruby/ActiveLDAP is a object-oriented API to LDAP
9
9
  require_paths:
10
10
  - lib