treequel 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile CHANGED
@@ -15,6 +15,7 @@ hoespec = Hoe.spec 'treequel' do
15
15
  self.developer 'Michael Granger', 'ged@FaerieMUD.org'
16
16
  self.developer 'Mahlon E. Smith', 'mahlon@martini.nu'
17
17
 
18
+
18
19
  self.extra_deps <<
19
20
  ['ruby-ldap', '~> 0.9.11']
20
21
  self.extra_dev_deps <<
@@ -31,10 +32,12 @@ hoespec = Hoe.spec 'treequel' do
31
32
  " - ruby-terminfo",
32
33
  " - columnize",
33
34
  ].join( "\n" )
35
+ self.spec_extras[:signing_key] = '/Volumes/Keys/ged-private_gem_key.pem'
34
36
 
35
37
  self.require_ruby_version( '>=1.8.7' )
36
38
 
37
- self.yard_title = 'Treequel'
39
+ self.hg_sign_tags = true
40
+
38
41
  self.yard_opts = [ '--use-cache', '--protected', '--verbose' ]
39
42
  end
40
43
 
@@ -54,6 +54,7 @@ class Treequel::Branch
54
54
  ### @return [Treequel::Branch] The new branch object.
55
55
  def self::new_from_entry( entry, directory )
56
56
  entry = Treequel::HashUtilities.stringify_keys( entry )
57
+ Treequel.logger.debug "Creating Branch from entry: %p in directory: %p" % [ entry, directory ]
57
58
  return self.new( directory, entry['dn'].first, entry )
58
59
  end
59
60
 
@@ -82,6 +83,8 @@ class Treequel::Branch
82
83
  @values = {}
83
84
 
84
85
  @include_operational_attrs = self.class.include_operational_attrs?
86
+
87
+ self.log.debug "New branch (%s): entry = %p, directory = %p" % [ @dn, @entry, @directory ]
85
88
  end
86
89
 
87
90
 
@@ -109,6 +112,7 @@ class Treequel::Branch
109
112
  predicate_attr :include_operational_attrs
110
113
  alias_method :include_operational_attributes?, :include_operational_attrs?
111
114
 
115
+
112
116
  ### Change the DN the Branch uses to look up its entry.
113
117
  ###
114
118
  ### @param [String] newdn The new DN.
@@ -792,7 +796,7 @@ class Treequel::Branch
792
796
  def get_converted_attribute( attrsym, object )
793
797
  if attribute = self.directory.schema.attribute_types[ attrsym ]
794
798
  self.log.debug "converting %p object to a %p attribute" %
795
- [ attrsym, attribute.syntax.oid ]
799
+ [ attrsym, attribute.syntax.desc ]
796
800
  return self.directory.convert_to_attribute( attribute.syntax.oid, object )
797
801
  else
798
802
  self.log.info "no attributeType for %p" % [ attrsym ]
@@ -804,6 +808,7 @@ class Treequel::Branch
804
808
  ### Clear any cached values when the structural state of the object changes.
805
809
  ### @return [void]
806
810
  def clear_caches
811
+ self.log.debug "Clearing entry and values caches."
807
812
  @entry = nil
808
813
  @values.clear
809
814
  end
@@ -424,8 +424,9 @@ class Treequel::Directory
424
424
  results = []
425
425
  self.conn.search_ext2( base_dn, scope, filter, *parameters ).each do |entry|
426
426
  branch = collectclass.new_from_entry( entry, self )
427
- branch.include_operational_attrs = base.include_operational_attrs? if
428
- base.respond_to?( :include_operational_attrs? )
427
+ branch.include_operational_attrs = true if
428
+ base.respond_to?( :include_operational_attrs? ) &&
429
+ base.include_operational_attrs?
429
430
 
430
431
  if block_given?
431
432
  results << yield( branch )
@@ -291,7 +291,7 @@ class Treequel::Model < Treequel::Branch
291
291
  return lambda {|newvalue| self[attrname] = newvalue }
292
292
  else
293
293
  self.log.debug " attribute isn't SINGLE, so generating an array writer..."
294
- return lambda {|*newvalues| self[attrname] = newvalues }
294
+ return lambda {|*newvalues| self[attrname] = newvalues.flatten }
295
295
  end
296
296
  end
297
297
 
@@ -26,6 +26,27 @@ class LDAP::Control
26
26
  end
27
27
 
28
28
 
29
+ ### Extensions to LDAP::Mods to make them grok ==.
30
+ module Treequel::LDAPModExtensions
31
+
32
+ ### Returns +true+ if the +other+ LDAP::Record is equivalent to the receiver.
33
+ def ==( other )
34
+ return ( other.class == self.class ) &&
35
+ ( self.mod_op == other.mod_op ) &&
36
+ ( self.mod_type == other.mod_type ) &&
37
+ ( self.mod_vals == other.mod_vals )
38
+ end
39
+
40
+ end # module Treequel::LDAPModExtensions
41
+
42
+
43
+ # Include Treequel-specific extensions as a mixin.
44
+ # @private
45
+ class LDAP::Mod
46
+ include Treequel::LDAPModExtensions
47
+ end
48
+
49
+
29
50
  ### Extensions to the Time class to add LDAP (RFC4517) Generalized Time syntax
30
51
  module Treequel::TimeExtensions
31
52
 
data/lib/treequel.rb CHANGED
@@ -25,7 +25,7 @@ end
25
25
 
26
26
  # A library for interacting with LDAP modelled after Sequel.
27
27
  #
28
- # @version 1.2.1
28
+ # @version 1.2.2
29
29
  #
30
30
  # @example
31
31
  # # Connect to the directory at the specified URL
@@ -53,10 +53,10 @@ end
53
53
  module Treequel
54
54
 
55
55
  # Library version
56
- VERSION = '1.2.1'
56
+ VERSION = '1.2.2'
57
57
 
58
58
  # VCS revision
59
- REVISION = %q$Revision: b9106049e6aa $
59
+ REVISION = %q$Revision: 0c2883d2074a $
60
60
 
61
61
  # Common paths for ldap.conf
62
62
  COMMON_LDAP_CONF_PATHS = %w[
data/spec/lib/helpers.rb CHANGED
@@ -99,6 +99,7 @@ module Treequel::SpecHelpers
99
99
  def get_fixtured_directory( conn )
100
100
  LDAP::SSLConn.stub( :new ).and_return( @conn )
101
101
  conn.stub( :root_dse ).and_return( nil )
102
+ conn.stub( :set_option )
102
103
  directory = Treequel.directory( TEST_LDAPURI )
103
104
  directory.stub( :schema ).and_return( SCHEMA )
104
105
 
data/spec/lib/matchers.rb CHANGED
@@ -20,6 +20,7 @@ require 'spec/lib/constants'
20
20
  ### RSpec matchers
21
21
  module Treequel::Matchers
22
22
 
23
+ ### A matcher for unordered array contents
23
24
  class ArrayIncludingMatcher
24
25
  def initialize( expected )
25
26
  @expected = expected