treequel 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
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.1.0
28
+ # @version 1.1.1
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.1.0'
56
+ VERSION = '1.1.1'
57
57
 
58
58
  # VCS revision
59
- REVISION = %q$Revision: 2e2b035d3721 $
59
+ REVISION = %q$Revision: c6d26ab6a7a4 $
60
60
 
61
61
  # Common paths for ldap.conf
62
62
  COMMON_LDAP_CONF_PATHS = %w[
@@ -478,7 +478,7 @@ class Treequel::Branch
478
478
 
479
479
  oc_oids = self[:objectClass] || []
480
480
  oc_oids |= additional_classes.collect {|str| str.to_sym }
481
- oc_oids << :top if oc_oids.empty?
481
+ oc_oids << 'top' if oc_oids.empty?
482
482
 
483
483
  oclasses = []
484
484
  oc_oids.each do |oid|
@@ -96,6 +96,7 @@ class Treequel::Model < Treequel::Branch
96
96
  ### @param [Array<Symbol>] objectclasses the objectclasses from the entry
97
97
  ### @return [Set<Module>] the Set of mixin modules which apply
98
98
  def self::mixins_for_objectclasses( *objectclasses )
99
+ return self.objectclass_registry[:top] if objectclasses.empty?
99
100
  ocsymbols = objectclasses.flatten.collect {|oc| oc.untaint.to_sym }
100
101
 
101
102
  # Get the union of all of the mixin sets for the objectclasses in question
@@ -317,7 +318,10 @@ class Treequel::Model < Treequel::Branch
317
318
  ### Apply mixins that are applicable considering the receiver's DN and the
318
319
  ### objectClasses from its entry.
319
320
  def apply_applicable_mixins( dn, entry )
320
- ocs = entry.object_classes.collect do |explicit_oc|
321
+ schema = self.directory.schema
322
+
323
+ ocs = entry['objectClass'].collect do |oc_oid|
324
+ explicit_oc = schema.object_classes[ oc_oid ]
321
325
  explicit_oc.ancestors.collect {|oc| oc.name }
322
326
  end.flatten.uniq
323
327
 
@@ -328,7 +332,8 @@ class Treequel::Model < Treequel::Branch
328
332
  # inferred by its objectclasses and those that apply to its DN
329
333
  mixins = ( oc_mixins & dn_mixins )
330
334
 
331
- self.log.debug " %d mixins apply to %s: %p" % [ mixins.length, dn, mixins.to_a ]
335
+ self.log.debug "Applying %d mixins to %s: %p" %
336
+ [ mixins.length, dn, mixins.collect(&:inspect) ]
332
337
  mixins.each {|mod| self.extend(mod) }
333
338
  end
334
339
 
@@ -28,8 +28,13 @@ describe Treequel::Model do
28
28
  include Treequel::SpecHelpers,
29
29
  Treequel::Matchers
30
30
 
31
+ SCHEMA_DUMPFILE = Pathname( __FILE__ ).dirname.parent + 'data' + 'schema.yml'
32
+ SCHEMAHASH = LDAP::Schema.new( YAML.load_file(SCHEMA_DUMPFILE) )
33
+
31
34
  before( :all ) do
32
35
  setup_logging( :fatal )
36
+
37
+ @schema = Treequel::Schema.new( SCHEMAHASH )
33
38
  end
34
39
 
35
40
  after( :all ) do
@@ -37,9 +42,9 @@ describe Treequel::Model do
37
42
  end
38
43
 
39
44
  before( :each ) do
40
- @top_oc = mock( "top objectClass", :name => 'top' )
41
- @iphost_oc = mock( "ipHost objectClass", :name => 'ipHost' )
42
- @device_oc = mock( "device objectClass", :name => 'device' )
45
+ @top_oc = @schema.object_classes[:top]
46
+ @iphost_oc = @schema.object_classes[:ipHost]
47
+ @device_oc = @schema.object_classes[:device]
43
48
 
44
49
  @iphost_oc.stub!( :ancestors ).and_return([ @iphost_oc, @top_oc ])
45
50
  @device_oc.stub!( :ancestors ).and_return([ @device_oc, @top_oc ])
@@ -48,8 +53,8 @@ describe Treequel::Model do
48
53
  'dn' => TEST_HOST_DN,
49
54
  'objectClass' => ['ipHost', 'device']
50
55
  }
51
- @simple_entry.stub!( :object_classes ).and_return([ @iphost_oc, @device_oc ])
52
- @directory = mock( "treequel directory", :get_entry => @simple_entry )
56
+ @directory = mock( "treequel directory", :schema => @schema )
57
+ @directory.stub!( :convert_to_object ).and_return {|oid,value| value }
53
58
  end
54
59
 
55
60
  after( :each ) do
@@ -181,6 +186,7 @@ describe Treequel::Model do
181
186
  end
182
187
 
183
188
  obj = Treequel::Model.new( @directory, TEST_HOST_DN )
189
+ @directory.stub!( :get_entry ).with( obj ).and_return( @simple_entry )
184
190
  obj.exists? # Trigger the lookup
185
191
 
186
192
  obj.should be_a( mixin1 )
@@ -223,10 +229,6 @@ describe Treequel::Model do
223
229
  ipHost
224
230
  ],
225
231
  }
226
- schema_dumpfile = Pathname( __FILE__ ).dirname.parent + 'data' + 'schema.yml'
227
- hash = YAML.load_file( schema_dumpfile )
228
- schemahash = LDAP::Schema.new( hash )
229
- @schema = Treequel::Schema.new( schemahash )
230
232
  end
231
233
 
232
234
  before( :each ) do
@@ -235,14 +237,12 @@ describe Treequel::Model do
235
237
  model_objectclasses :ipHost
236
238
  def fqdn; "some.home.example.com"; end
237
239
  end
238
- @directory = mock( 'Treequel Directory', :schema => @schema )
239
240
  @directory.stub!( :convert_to_object ).with( Treequel::OIDS::OID_SYNTAX, 'ipHost' ).
240
241
  and_return( 'ipHost' )
241
242
  @directory.stub!( :convert_to_object ).
242
243
  with( Treequel::OIDS::DIRECTORY_STRING_SYNTAX, 'Slappy the Frog' ).
243
244
  and_return( 'Slappy the Frog' )
244
245
  @obj = Treequel::Model.new( @directory, TEST_PERSON_DN )
245
- @entry.stub!( :object_classes ).and_return([ @schema.object_classes[:ipHost] ])
246
246
  end
247
247
 
248
248
  after( :each ) do
@@ -252,12 +252,12 @@ describe Treequel::Model do
252
252
 
253
253
  it "correctly dispatches to methods added via extension that are called before its " +
254
254
  "entry is loaded" do
255
- @directory.should_receive( :get_entry ).with( @obj ).and_return( @entry )
255
+ @directory.stub!( :get_entry ).with( @obj ).and_return( @entry )
256
256
  @obj.fqdn.should == 'some.home.example.com'
257
257
  end
258
258
 
259
259
  it "correctly falls through for methods not added by loading the entry" do
260
- @directory.should_receive( :get_entry ).with( @obj ).and_return( @entry )
260
+ @directory.stub!( :get_entry ).with( @obj ).and_return( @entry )
261
261
  @obj.cn.should == ['Slappy the Frog']
262
262
  end
263
263
  end
@@ -286,16 +286,9 @@ describe Treequel::Model do
286
286
  apple-user
287
287
  ],
288
288
  }
289
-
290
- schema_dumpfile = Pathname( __FILE__ ).dirname.parent + 'data' + 'schema.yml'
291
- hash = YAML.load_file( schema_dumpfile )
292
- schemahash = LDAP::Schema.new( hash )
293
- @schema = Treequel::Schema.new( schemahash )
294
289
  end
295
290
 
296
291
  before( :each ) do
297
- @directory = mock( 'Treequel Directory', :schema => @schema )
298
- @entry.stub!( :object_classes ).and_return([ @schema.object_classes[:ipHost] ])
299
292
  @obj = Treequel::Model.new_from_entry( @entry, @directory )
300
293
  end
301
294
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: treequel
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 0
10
- version: 1.1.0
9
+ - 1
10
+ version: 1.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Michael Granger, Mahlon E. Smith
@@ -35,7 +35,7 @@ cert_chain:
35
35
  cmlhXe46pZNJgWKbxZah85jIjx95hR8vOI+NAM5iH9kOqK13DrxacTKPhqj5PjwF
36
36
  -----END CERTIFICATE-----
37
37
 
38
- date: 2010-09-20 00:00:00 -07:00
38
+ date: 2010-09-21 00:00:00 -07:00
39
39
  default_executable:
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
metadata.gz.sig CHANGED
Binary file