treequel 1.4.4 → 1.5.0pre445
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.tar.gz.sig +0 -0
- data/ChangeLog +117 -83
- data/Rakefile +9 -8
- data/lib/treequel.rb +3 -3
- data/lib/treequel/branch.rb +2 -1
- data/lib/treequel/branchset.rb +13 -4
- data/lib/treequel/mixins.rb +2 -2
- data/lib/treequel/model.rb +20 -0
- data/lib/treequel/model/objectclass.rb +43 -9
- data/spec/lib/constants.rb +62 -1
- data/spec/lib/helpers.rb +3 -1
- data/spec/treequel/branch_spec.rb +4 -7
- data/spec/treequel/branchset_spec.rb +47 -78
- data/spec/treequel/mixins_spec.rb +16 -0
- data/spec/treequel/model/objectclass_spec.rb +137 -23
- data/spec/treequel/model_spec.rb +20 -34
- metadata +45 -35
- metadata.gz.sig +3 -3
@@ -30,7 +30,14 @@ describe Treequel::Model::ObjectClass do
|
|
30
30
|
setup_logging( :fatal )
|
31
31
|
end
|
32
32
|
|
33
|
+
before( :each ) do
|
34
|
+
@conn = mock( "ldap connection object" )
|
35
|
+
@directory = get_fixtured_directory( @conn )
|
36
|
+
Treequel::Model.directory = @directory
|
37
|
+
end
|
38
|
+
|
33
39
|
after( :each ) do
|
40
|
+
Treequel::Model.directory = nil
|
34
41
|
Treequel::Model.objectclass_registry.clear
|
35
42
|
Treequel::Model.base_registry.clear
|
36
43
|
end
|
@@ -167,16 +174,73 @@ describe Treequel::Model::ObjectClass do
|
|
167
174
|
Treequel::Model.base_registry['ou=people,dc=acme,dc=com'].should_not include( mixin )
|
168
175
|
MyModel.base_registry['ou=people,dc=acme,dc=com'].should include( mixin )
|
169
176
|
end
|
177
|
+
|
178
|
+
it "re-registers bases that have already been declared when declaring a " +
|
179
|
+
"new model class" do
|
180
|
+
class MyModel < Treequel::Model; end
|
181
|
+
|
182
|
+
mixin = Module.new do
|
183
|
+
extend Treequel::Model::ObjectClass
|
184
|
+
model_bases 'ou=people,dc=acme,dc=com', 'ou=notpeople,dc=acme,dc=com'
|
185
|
+
model_class MyModel
|
186
|
+
end
|
187
|
+
|
188
|
+
Treequel::Model.base_registry['ou=people,dc=acme,dc=com'].should_not include( mixin )
|
189
|
+
MyModel.base_registry['ou=people,dc=acme,dc=com'].should include( mixin )
|
190
|
+
end
|
191
|
+
|
192
|
+
it "uses the directory associated with its model_class instead of Treequel::Model's if " +
|
193
|
+
"its model_class is set when creating a search Branchset" do
|
194
|
+
conn = mock( "ldap connection object" )
|
195
|
+
directory = get_fixtured_directory( conn )
|
196
|
+
|
197
|
+
class MyModel < Treequel::Model; end
|
198
|
+
MyModel.directory = directory
|
199
|
+
|
200
|
+
mixin = Module.new do
|
201
|
+
extend Treequel::Model::ObjectClass
|
202
|
+
model_objectclasses :inetOrgPerson
|
203
|
+
model_class MyModel
|
204
|
+
end
|
205
|
+
|
206
|
+
result = mixin.search
|
207
|
+
|
208
|
+
result.should be_a( Treequel::Branchset )
|
209
|
+
result.branch.directory.should == directory
|
210
|
+
end
|
211
|
+
|
212
|
+
it "delegates Branchset methods through the Branchset returned by its #search method" do
|
213
|
+
mixin = Module.new do
|
214
|
+
extend Treequel::Model::ObjectClass
|
215
|
+
model_objectclasses :inetOrgPerson
|
216
|
+
end
|
217
|
+
|
218
|
+
mixin.filter( :mail ).should be_a( Treequel::Branchset )
|
219
|
+
end
|
220
|
+
|
221
|
+
it "delegates Branchset Enumerable methods through the Branchset returned by its " +
|
222
|
+
"#search method" do
|
223
|
+
|
224
|
+
end
|
225
|
+
|
170
226
|
end
|
171
227
|
|
172
228
|
context "model instantiation" do
|
173
229
|
|
174
|
-
|
175
|
-
|
176
|
-
|
230
|
+
it "can instantiate a new model object with its declared objectClasses" do
|
231
|
+
mixin = Module.new do
|
232
|
+
extend Treequel::Model::ObjectClass
|
233
|
+
model_objectclasses :inetOrgPerson
|
234
|
+
end
|
235
|
+
|
236
|
+
result = mixin.create( TEST_PERSON_DN )
|
237
|
+
result.should be_a( Treequel::Model )
|
238
|
+
result[:objectClass].should include( 'inetOrgPerson' )
|
239
|
+
result[TEST_PERSON_DN_ATTR].should == [ TEST_PERSON_DN_VALUE ]
|
177
240
|
end
|
178
241
|
|
179
|
-
it "can instantiate a new model object with its declared objectClasses"
|
242
|
+
it "can instantiate a new model object with its declared objectClasses in a directory " +
|
243
|
+
"other than the one associated with its model_class" do
|
180
244
|
mixin = Module.new do
|
181
245
|
extend Treequel::Model::ObjectClass
|
182
246
|
model_objectclasses :inetOrgPerson
|
@@ -194,7 +258,7 @@ describe Treequel::Model::ObjectClass do
|
|
194
258
|
model_objectclasses :inetOrgPerson
|
195
259
|
end
|
196
260
|
|
197
|
-
result = mixin.create(
|
261
|
+
result = mixin.create( TEST_PERSON_DN,
|
198
262
|
TEST_PERSON_DN_ATTR => [TEST_PERSON_DN_VALUE] )
|
199
263
|
result.should be_a( Treequel::Model )
|
200
264
|
result[:objectClass].should include( 'inetOrgPerson' )
|
@@ -208,7 +272,7 @@ describe Treequel::Model::ObjectClass do
|
|
208
272
|
model_objectclasses :inetOrgPerson
|
209
273
|
end
|
210
274
|
|
211
|
-
result = mixin.create(
|
275
|
+
result = mixin.create( TEST_PERSON_DN,
|
212
276
|
:objectClass => [:person, :inetOrgPerson] )
|
213
277
|
result.should be_a( Treequel::Model )
|
214
278
|
result[:objectClass].should have( 2 ).members
|
@@ -223,7 +287,7 @@ describe Treequel::Model::ObjectClass do
|
|
223
287
|
model_objectclasses :ipHost, :ieee802Device, :device
|
224
288
|
end
|
225
289
|
|
226
|
-
result = mixin.create(
|
290
|
+
result = mixin.create( TEST_HOST_MULTIVALUE_DN )
|
227
291
|
result.should be_a( Treequel::Model )
|
228
292
|
result[:objectClass].should have( 3 ).members
|
229
293
|
result[:objectClass].should include( 'ipHost', 'ieee802Device', 'device' )
|
@@ -236,6 +300,10 @@ describe Treequel::Model::ObjectClass do
|
|
236
300
|
context "module that has one required objectClass declared" do
|
237
301
|
|
238
302
|
before( :each ) do
|
303
|
+
@conn = mock( "ldap connection object" )
|
304
|
+
@directory = get_fixtured_directory( @conn )
|
305
|
+
Treequel::Model.directory = @directory
|
306
|
+
|
239
307
|
@mixin = Module.new do
|
240
308
|
extend Treequel::Model::ObjectClass
|
241
309
|
model_objectclasses :inetOrgPerson
|
@@ -257,16 +325,26 @@ describe Treequel::Model::ObjectClass do
|
|
257
325
|
should_not include( @mixin )
|
258
326
|
end
|
259
327
|
|
260
|
-
it "can
|
261
|
-
|
262
|
-
|
263
|
-
|
328
|
+
it "can create a Branchset that will search for applicable entries" do
|
329
|
+
result = @mixin.search
|
330
|
+
|
331
|
+
result.should be_a( Treequel::Branchset )
|
332
|
+
result.base_dn.should == TEST_BASE_DN
|
333
|
+
result.filter.to_s.should == '(objectClass=inetOrgPerson)'
|
334
|
+
result.branch.directory.should == @directory
|
335
|
+
end
|
336
|
+
|
337
|
+
it "can create a Branchset that will search for applicable entries in a Directory other " +
|
338
|
+
"than the one set for Treequel::Model" do
|
339
|
+
conn = mock( "second ldap connection object" )
|
340
|
+
directory = get_fixtured_directory( conn )
|
264
341
|
|
265
342
|
result = @mixin.search( directory )
|
266
343
|
|
267
344
|
result.should be_a( Treequel::Branchset )
|
268
345
|
result.base_dn.should == TEST_BASE_DN
|
269
346
|
result.filter.to_s.should == '(objectClass=inetOrgPerson)'
|
347
|
+
result.branch.directory.should == directory
|
270
348
|
end
|
271
349
|
|
272
350
|
end
|
@@ -297,16 +375,26 @@ describe Treequel::Model::ObjectClass do
|
|
297
375
|
should_not include( @mixin )
|
298
376
|
end
|
299
377
|
|
300
|
-
it "can
|
301
|
-
|
302
|
-
|
303
|
-
|
378
|
+
it "can create a Branchset that will search for applicable entries" do
|
379
|
+
result = @mixin.search
|
380
|
+
|
381
|
+
result.should be_a( Treequel::Branchset )
|
382
|
+
result.base_dn.should == TEST_BASE_DN
|
383
|
+
result.filter.to_s.should == '(&(objectClass=device)(objectClass=ipHost))'
|
384
|
+
result.branch.directory.should == @directory
|
385
|
+
end
|
386
|
+
|
387
|
+
it "can create a Branchset that will search for applicable entries in a Directory other " +
|
388
|
+
"than the one set for Treequel::Model" do
|
389
|
+
conn = mock( "second ldap connection object" )
|
390
|
+
directory = get_fixtured_directory( conn )
|
304
391
|
|
305
392
|
result = @mixin.search( directory )
|
306
393
|
|
307
394
|
result.should be_a( Treequel::Branchset )
|
308
395
|
result.base_dn.should == TEST_BASE_DN
|
309
396
|
result.filter.to_s.should == '(&(objectClass=device)(objectClass=ipHost))'
|
397
|
+
result.branch.directory.should == directory
|
310
398
|
end
|
311
399
|
|
312
400
|
end
|
@@ -336,15 +424,26 @@ describe Treequel::Model::ObjectClass do
|
|
336
424
|
should_not include( @mixin )
|
337
425
|
end
|
338
426
|
|
339
|
-
it "can
|
340
|
-
|
341
|
-
|
427
|
+
it "can create a Branchset that will search for applicable entries" do
|
428
|
+
result = @mixin.search
|
429
|
+
|
430
|
+
result.should be_a( Treequel::Branchset )
|
431
|
+
result.base_dn.should == TEST_PEOPLE_DN
|
432
|
+
result.filter.to_s.should == '(objectClass=*)'
|
433
|
+
result.branch.directory.should == @directory
|
434
|
+
end
|
435
|
+
|
436
|
+
it "can create a Branchset that will search for applicable entries in a Directory other " +
|
437
|
+
"than the one set for Treequel::Model" do
|
438
|
+
conn = mock( "second ldap connection object" )
|
439
|
+
directory = get_fixtured_directory( conn )
|
342
440
|
|
343
441
|
result = @mixin.search( directory )
|
344
442
|
|
345
443
|
result.should be_a( Treequel::Branchset )
|
346
444
|
result.base_dn.should == TEST_PEOPLE_DN
|
347
445
|
result.filter.to_s.should == '(objectClass=*)'
|
446
|
+
result.branch.directory.should == directory
|
348
447
|
end
|
349
448
|
|
350
449
|
end
|
@@ -376,17 +475,32 @@ describe Treequel::Model::ObjectClass do
|
|
376
475
|
should_not include( @mixin )
|
377
476
|
end
|
378
477
|
|
379
|
-
it "can
|
380
|
-
|
381
|
-
|
478
|
+
it "can create a BranchCollection that will search for applicable entries" do
|
479
|
+
result = @mixin.search
|
480
|
+
|
481
|
+
result.should be_a( Treequel::BranchCollection )
|
482
|
+
result.base_dns.should have( 2 ).members
|
483
|
+
result.base_dns.should include( TEST_HOSTS_DN, TEST_SUBHOSTS_DN )
|
484
|
+
result.branchsets.each do |brset|
|
485
|
+
brset.filter_string.should == '(objectClass=*)'
|
486
|
+
brset.branch.directory.should == @directory
|
487
|
+
end
|
488
|
+
end
|
489
|
+
|
490
|
+
it "can create a BranchCollection that will search for applicable entries in a Directory " +
|
491
|
+
" other than the one set for Treequel::Model" do
|
492
|
+
conn = mock( "second ldap connection object" )
|
493
|
+
directory = get_fixtured_directory( conn )
|
382
494
|
|
383
495
|
result = @mixin.search( directory )
|
384
496
|
|
385
497
|
result.should be_a( Treequel::BranchCollection )
|
386
498
|
result.base_dns.should have( 2 ).members
|
387
499
|
result.base_dns.should include( TEST_HOSTS_DN, TEST_SUBHOSTS_DN )
|
388
|
-
result.branchsets.
|
389
|
-
should
|
500
|
+
result.branchsets.each do |brset|
|
501
|
+
brset.filter_string.should == '(objectClass=*)'
|
502
|
+
brset.branch.directory.should == directory
|
503
|
+
end
|
390
504
|
end
|
391
505
|
|
392
506
|
end
|
data/spec/treequel/model_spec.rb
CHANGED
@@ -22,11 +22,13 @@ require 'treequel/model'
|
|
22
22
|
describe Treequel::Model do
|
23
23
|
|
24
24
|
before( :all ) do
|
25
|
+
GC.disable
|
25
26
|
setup_logging( :fatal )
|
26
27
|
end
|
27
28
|
|
28
29
|
after( :all ) do
|
29
30
|
reset_logging()
|
31
|
+
GC.enable
|
30
32
|
end
|
31
33
|
|
32
34
|
before( :each ) do
|
@@ -41,9 +43,22 @@ describe Treequel::Model do
|
|
41
43
|
after( :each ) do
|
42
44
|
Treequel::Model.objectclass_registry.clear
|
43
45
|
Treequel::Model.base_registry.clear
|
46
|
+
Treequel::Model.directory = nil
|
44
47
|
end
|
45
48
|
|
46
49
|
|
50
|
+
it "allows a Treequel::Directory object to be set as the default directory to use for searches" do
|
51
|
+
Treequel::Model.directory = @directory
|
52
|
+
@directory.results_class.should == Treequel::Model
|
53
|
+
end
|
54
|
+
|
55
|
+
it "can return a Treequel::Directory object configured to use the system directory if " +
|
56
|
+
"none has been set" do
|
57
|
+
Treequel.should_receive( :directory_from_config ).and_return( @directory )
|
58
|
+
Treequel::Model.directory.should == @directory
|
59
|
+
@directory.results_class.should == Treequel::Model
|
60
|
+
end
|
61
|
+
|
47
62
|
it "knows which mixins should be applied for a single objectClass" do
|
48
63
|
mixin = Module.new
|
49
64
|
mixin.should_receive( :model_objectclasses ).at_least( :once ).
|
@@ -295,37 +310,8 @@ describe Treequel::Model do
|
|
295
310
|
|
296
311
|
describe "objects loaded from entries" do
|
297
312
|
|
298
|
-
before( :all ) do
|
299
|
-
@entry = {
|
300
|
-
'dn' => ['uid=slappy,ou=people,dc=acme,dc=com'],
|
301
|
-
'uid' => ['slappy'],
|
302
|
-
'cn' => ['Slappy the Frog'],
|
303
|
-
'givenName' => ['Slappy'],
|
304
|
-
'sn' => ['Frog'],
|
305
|
-
'l' => ['a forest in England'],
|
306
|
-
'title' => ['Forest Fire Prevention Advocate'],
|
307
|
-
'displayName' => ['Slappy the Frog'],
|
308
|
-
'logonTime' => ['1293167318'],
|
309
|
-
'uidNumber' => ['1121'],
|
310
|
-
'gidNumber' => ['200'],
|
311
|
-
'homeDirectory' => ['/u/j/jrandom'],
|
312
|
-
'description' => [
|
313
|
-
'Smokey the Bear is much more intense in person.',
|
314
|
-
'Alright.'
|
315
|
-
],
|
316
|
-
'objectClass' => %w[
|
317
|
-
top
|
318
|
-
person
|
319
|
-
organizationalPerson
|
320
|
-
inetOrgPerson
|
321
|
-
posixAccount
|
322
|
-
shadowAccount
|
323
|
-
apple-user
|
324
|
-
],
|
325
|
-
}
|
326
|
-
end
|
327
|
-
|
328
313
|
before( :each ) do
|
314
|
+
@entry = TEST_PERSON_ENTRY.dup
|
329
315
|
@obj = Treequel::Model.new_from_entry( @entry, @directory )
|
330
316
|
end
|
331
317
|
|
@@ -523,7 +509,7 @@ describe Treequel::Model do
|
|
523
509
|
it "reverts the attribute if its #revert method is called" do
|
524
510
|
@conn.should_receive( :search_ext2 ).
|
525
511
|
with( @entry['dn'].first, LDAP::LDAP_SCOPE_BASE, "(objectClass=*)" ).
|
526
|
-
and_return([ @entry ])
|
512
|
+
and_return([ @entry.dup ])
|
527
513
|
|
528
514
|
@obj.revert
|
529
515
|
|
@@ -533,8 +519,8 @@ describe Treequel::Model do
|
|
533
519
|
|
534
520
|
it "updates the modified attribute when saved" do
|
535
521
|
@conn.should_receive( :modify ).
|
536
|
-
with(
|
537
|
-
|
522
|
+
with( TEST_PERSON_DN,
|
523
|
+
[ ldap_mod_delete(:uid, 'slappy'), ldap_mod_add(:uid, 'slippy') ] )
|
538
524
|
@obj.save
|
539
525
|
end
|
540
526
|
|
@@ -636,7 +622,7 @@ describe Treequel::Model do
|
|
636
622
|
it "reverts all of the attributes if its #revert method is called" do
|
637
623
|
@conn.should_receive( :search_ext2 ).
|
638
624
|
with( @entry['dn'].first, LDAP::LDAP_SCOPE_BASE, "(objectClass=*)" ).
|
639
|
-
and_return([ @entry ])
|
625
|
+
and_return([ @entry.dup ])
|
640
626
|
|
641
627
|
@obj.revert
|
642
628
|
|
metadata
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: treequel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1923832739
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
|
8
|
+
- 5
|
9
|
+
- 0
|
10
|
+
- pre
|
11
|
+
- 445
|
12
|
+
version: 1.5.0pre445
|
11
13
|
platform: ruby
|
12
14
|
authors:
|
13
15
|
- Michael Granger
|
@@ -36,7 +38,7 @@ cert_chain:
|
|
36
38
|
cmlhXe46pZNJgWKbxZah85jIjx95hR8vOI+NAM5iH9kOqK13DrxacTKPhqj5PjwF
|
37
39
|
-----END CERTIFICATE-----
|
38
40
|
|
39
|
-
date: 2011-02-
|
41
|
+
date: 2011-02-22 00:00:00 -08:00
|
40
42
|
default_executable:
|
41
43
|
dependencies:
|
42
44
|
- !ruby/object:Gem::Dependency
|
@@ -47,12 +49,11 @@ dependencies:
|
|
47
49
|
requirements:
|
48
50
|
- - ~>
|
49
51
|
- !ruby/object:Gem::Version
|
50
|
-
hash:
|
52
|
+
hash: 13
|
51
53
|
segments:
|
52
54
|
- 1
|
53
55
|
- 1
|
54
|
-
|
55
|
-
version: 1.1.2
|
56
|
+
version: "1.1"
|
56
57
|
type: :runtime
|
57
58
|
version_requirements: *id001
|
58
59
|
- !ruby/object:Gem::Dependency
|
@@ -63,12 +64,11 @@ dependencies:
|
|
63
64
|
requirements:
|
64
65
|
- - ~>
|
65
66
|
- !ruby/object:Gem::Version
|
66
|
-
hash:
|
67
|
+
hash: 25
|
67
68
|
segments:
|
68
69
|
- 0
|
69
70
|
- 9
|
70
|
-
|
71
|
-
version: 0.9.11
|
71
|
+
version: "0.9"
|
72
72
|
type: :runtime
|
73
73
|
version_requirements: *id002
|
74
74
|
- !ruby/object:Gem::Dependency
|
@@ -127,12 +127,11 @@ dependencies:
|
|
127
127
|
requirements:
|
128
128
|
- - ~>
|
129
129
|
- !ruby/object:Gem::Version
|
130
|
-
hash:
|
130
|
+
hash: 13
|
131
131
|
segments:
|
132
132
|
- 0
|
133
133
|
- 3
|
134
|
-
|
135
|
-
version: 0.3.1
|
134
|
+
version: "0.3"
|
136
135
|
type: :development
|
137
136
|
version_requirements: *id006
|
138
137
|
- !ruby/object:Gem::Dependency
|
@@ -143,12 +142,11 @@ dependencies:
|
|
143
142
|
requirements:
|
144
143
|
- - ~>
|
145
144
|
- !ruby/object:Gem::Version
|
146
|
-
hash:
|
145
|
+
hash: 25
|
147
146
|
segments:
|
148
147
|
- 0
|
149
148
|
- 9
|
150
|
-
|
151
|
-
version: 0.9.6
|
149
|
+
version: "0.9"
|
152
150
|
type: :development
|
153
151
|
version_requirements: *id007
|
154
152
|
- !ruby/object:Gem::Dependency
|
@@ -159,12 +157,11 @@ dependencies:
|
|
159
157
|
requirements:
|
160
158
|
- - ~>
|
161
159
|
- !ruby/object:Gem::Version
|
162
|
-
hash:
|
160
|
+
hash: 9
|
163
161
|
segments:
|
164
162
|
- 0
|
165
163
|
- 1
|
166
|
-
|
167
|
-
version: 0.1.1
|
164
|
+
version: "0.1"
|
168
165
|
type: :development
|
169
166
|
version_requirements: *id008
|
170
167
|
- !ruby/object:Gem::Dependency
|
@@ -175,46 +172,59 @@ dependencies:
|
|
175
172
|
requirements:
|
176
173
|
- - ~>
|
177
174
|
- !ruby/object:Gem::Version
|
178
|
-
hash:
|
175
|
+
hash: 11
|
179
176
|
segments:
|
180
177
|
- 2
|
181
178
|
- 4
|
182
|
-
|
183
|
-
version: 2.4.0
|
179
|
+
version: "2.4"
|
184
180
|
type: :development
|
185
181
|
version_requirements: *id009
|
186
182
|
- !ruby/object:Gem::Dependency
|
187
|
-
name:
|
183
|
+
name: sequel
|
188
184
|
prerelease: false
|
189
185
|
requirement: &id010 !ruby/object:Gem::Requirement
|
190
186
|
none: false
|
191
187
|
requirements:
|
192
188
|
- - ~>
|
193
189
|
- !ruby/object:Gem::Version
|
194
|
-
hash:
|
190
|
+
hash: 47
|
191
|
+
segments:
|
192
|
+
- 3
|
193
|
+
- 20
|
194
|
+
version: "3.20"
|
195
|
+
type: :development
|
196
|
+
version_requirements: *id010
|
197
|
+
- !ruby/object:Gem::Dependency
|
198
|
+
name: sysexits
|
199
|
+
prerelease: false
|
200
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ~>
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
hash: 15
|
195
206
|
segments:
|
196
207
|
- 1
|
197
208
|
- 0
|
198
|
-
|
199
|
-
version: 1.0.2
|
209
|
+
version: "1.0"
|
200
210
|
type: :development
|
201
|
-
version_requirements: *
|
211
|
+
version_requirements: *id011
|
202
212
|
- !ruby/object:Gem::Dependency
|
203
213
|
name: hoe
|
204
214
|
prerelease: false
|
205
|
-
requirement: &
|
215
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
206
216
|
none: false
|
207
217
|
requirements:
|
208
218
|
- - ">="
|
209
219
|
- !ruby/object:Gem::Version
|
210
|
-
hash:
|
220
|
+
hash: 43
|
211
221
|
segments:
|
212
222
|
- 2
|
213
223
|
- 9
|
214
|
-
-
|
215
|
-
version: 2.9.
|
224
|
+
- 0
|
225
|
+
version: 2.9.0
|
216
226
|
type: :development
|
217
|
-
version_requirements: *
|
227
|
+
version_requirements: *id012
|
218
228
|
description: |-
|
219
229
|
Treequel is an LDAP toolkit for Ruby. It is intended to allow quick, easy
|
220
230
|
access to LDAP directories in a manner consistent with LDAP's hierarchical,
|
@@ -312,7 +322,7 @@ post_install_message: |-
|
|
312
322
|
If you want to use the included 'treequel' LDAP shell, you'll need to install
|
313
323
|
the following libraries as well:
|
314
324
|
|
315
|
-
- termios
|
325
|
+
- ruby-termios
|
316
326
|
- ruby-terminfo
|
317
327
|
- columnize
|
318
328
|
- sysexits
|
@@ -350,7 +360,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
350
360
|
requirements: []
|
351
361
|
|
352
362
|
rubyforge_project: treequel
|
353
|
-
rubygems_version: 1.
|
363
|
+
rubygems_version: 1.5.2
|
354
364
|
signing_key:
|
355
365
|
specification_version: 3
|
356
366
|
summary: Treequel is an LDAP toolkit for Ruby
|