activeldap 5.2.4 → 6.0.0
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.
- checksums.yaml +4 -4
- data/.yardopts +3 -1
- data/doc/text/development.md +26 -0
- data/doc/text/{news.textile → news.md} +299 -271
- data/doc/text/{rails.textile → rails.md} +35 -33
- data/doc/text/{tutorial.textile → tutorial.md} +177 -182
- data/lib/active_ldap/adapter/base.rb +28 -8
- data/lib/active_ldap/adapter/jndi.rb +4 -6
- data/lib/active_ldap/adapter/jndi_connection.rb +105 -17
- data/lib/active_ldap/adapter/ldap.rb +8 -19
- data/lib/active_ldap/adapter/ldap_ext.rb +32 -13
- data/lib/active_ldap/adapter/net_ldap.rb +9 -18
- data/lib/active_ldap/configuration.rb +24 -1
- data/lib/active_ldap/connection.rb +1 -1
- data/lib/active_ldap/human_readable.rb +5 -4
- data/lib/active_ldap/operations.rb +21 -4
- data/lib/active_ldap/version.rb +1 -1
- data/test/al-test-utils.rb +84 -37
- data/test/test_base.rb +14 -14
- data/test/test_connection.rb +4 -0
- data/test/test_find.rb +12 -2
- data/test/test_supported_control.rb +1 -1
- data/test/test_validation.rb +19 -15
- metadata +13 -15
- data/README.textile +0 -141
- data/doc/text/development.textile +0 -54
@@ -17,11 +17,12 @@ module ActiveLdap
|
|
17
17
|
if attribute_or_name.is_a?(Schema::Attribute)
|
18
18
|
name = attribute_or_name.name
|
19
19
|
else
|
20
|
-
|
20
|
+
attribute_name = attribute_or_name.to_s
|
21
|
+
attribute = schema.attribute(attribute_name)
|
21
22
|
return nil if attribute.id.nil?
|
22
|
-
if attribute.name ==
|
23
|
-
attribute.aliases.include?(
|
24
|
-
name =
|
23
|
+
if attribute.name == attribute_name or
|
24
|
+
attribute.aliases.include?(attribute_name)
|
25
|
+
name = attribute_name
|
25
26
|
else
|
26
27
|
return nil
|
27
28
|
end
|
@@ -22,9 +22,23 @@ module ActiveLdap
|
|
22
22
|
end
|
23
23
|
|
24
24
|
module Common
|
25
|
-
VALID_SEARCH_OPTIONS = [
|
26
|
-
|
27
|
-
|
25
|
+
VALID_SEARCH_OPTIONS = [
|
26
|
+
:attribute,
|
27
|
+
:value,
|
28
|
+
:filter,
|
29
|
+
:prefix,
|
30
|
+
:classes,
|
31
|
+
:scope,
|
32
|
+
:limit,
|
33
|
+
:attributes,
|
34
|
+
:sort_by,
|
35
|
+
:order,
|
36
|
+
:connection,
|
37
|
+
:base,
|
38
|
+
:offset,
|
39
|
+
:use_paged_results,
|
40
|
+
:page_size,
|
41
|
+
]
|
28
42
|
|
29
43
|
def search(options={}, &block)
|
30
44
|
validate_search_options(options)
|
@@ -62,6 +76,8 @@ module ActiveLdap
|
|
62
76
|
:attributes => requested_attributes,
|
63
77
|
:sort_by => options[:sort_by] || sort_by,
|
64
78
|
:order => options[:order] || order,
|
79
|
+
:use_paged_results => options[:use_paged_results],
|
80
|
+
:page_size => options[:page_size],
|
65
81
|
}
|
66
82
|
options[:connection] ||= connection
|
67
83
|
values = []
|
@@ -96,10 +112,11 @@ module ActiveLdap
|
|
96
112
|
}
|
97
113
|
|
98
114
|
attribute = attr || ensure_search_attribute
|
115
|
+
escaped_value = DN.escape_value(value)
|
99
116
|
options_for_non_leaf = {
|
100
117
|
:attribute => attr,
|
101
118
|
:value => value,
|
102
|
-
:prefix => ["#{attribute}=#{
|
119
|
+
:prefix => ["#{attribute}=#{escaped_value}", prefix].compact.join(","),
|
103
120
|
:limit => 1,
|
104
121
|
:scope => :base,
|
105
122
|
}
|
data/lib/active_ldap/version.rb
CHANGED
data/test/al-test-utils.rb
CHANGED
@@ -23,6 +23,7 @@ module AlTestUtils
|
|
23
23
|
include TemporaryEntry
|
24
24
|
include CommandSupport
|
25
25
|
include MockLogger
|
26
|
+
include Omittable
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
@@ -39,7 +40,13 @@ module AlTestUtils
|
|
39
40
|
@top_dir = File.expand_path(File.join(@base_dir, ".."))
|
40
41
|
@example_dir = File.join(@top_dir, "examples")
|
41
42
|
@fixtures_dir = File.join(@base_dir, "fixtures")
|
42
|
-
|
43
|
+
current_config_file = File.expand_path("config.yaml")
|
44
|
+
test_config_file = File.join(@base_dir, "config.yaml")
|
45
|
+
if File.exist?(current_config_file)
|
46
|
+
@config_file = current_config_file
|
47
|
+
else
|
48
|
+
@config_file = test_config_file
|
49
|
+
end
|
43
50
|
ActiveLdap::Base.configurations = read_config
|
44
51
|
end
|
45
52
|
|
@@ -273,41 +280,69 @@ module AlTestUtils
|
|
273
280
|
super
|
274
281
|
@user_index = 0
|
275
282
|
@group_index = 0
|
283
|
+
@temporary_uids = []
|
284
|
+
end
|
285
|
+
|
286
|
+
def teardown
|
287
|
+
@temporary_uids.each do |uid|
|
288
|
+
delete_temporary_user(uid)
|
289
|
+
end
|
290
|
+
super
|
291
|
+
end
|
292
|
+
|
293
|
+
def delete_temporary_user(uid)
|
294
|
+
return unless @user_class.exists?(uid)
|
295
|
+
@user_class.search(:value => uid) do |dn, attribute|
|
296
|
+
@user_class.remove_connection(dn)
|
297
|
+
@user_class.delete(dn)
|
298
|
+
end
|
299
|
+
end
|
300
|
+
|
301
|
+
def build_temporary_user(config={})
|
302
|
+
uid = config[:uid] || "temp-user#{@user_index}"
|
303
|
+
password = config[:password] || "password#{@user_index}"
|
304
|
+
uid_number = config[:uid_number] || default_uid
|
305
|
+
gid_number = config[:gid_number] || default_gid
|
306
|
+
home_directory = config[:home_directory] || "/nonexistent"
|
307
|
+
see_also = config[:see_also]
|
308
|
+
user = nil
|
309
|
+
_wrap_assertion do
|
310
|
+
assert(!@user_class.exists?(uid))
|
311
|
+
assert_raise(ActiveLdap::EntryNotFound) do
|
312
|
+
@user_class.find(uid).dn
|
313
|
+
end
|
314
|
+
user = @user_class.new(uid)
|
315
|
+
assert(user.new_entry?)
|
316
|
+
user.cn = user.uid
|
317
|
+
user.sn = user.uid
|
318
|
+
user.uid_number = uid_number
|
319
|
+
user.gid_number = gid_number
|
320
|
+
user.home_directory = home_directory
|
321
|
+
user.user_password = ActiveLdap::UserPassword.ssha(password)
|
322
|
+
user.see_also = see_also
|
323
|
+
unless config[:simple]
|
324
|
+
user.add_class('shadowAccount', 'inetOrgPerson',
|
325
|
+
'organizationalPerson')
|
326
|
+
user.user_certificate = certificate
|
327
|
+
user.jpeg_photo = jpeg_photo
|
328
|
+
end
|
329
|
+
user.save
|
330
|
+
assert(!user.new_entry?)
|
331
|
+
end
|
332
|
+
[@user_class.find(user.uid), password]
|
276
333
|
end
|
277
334
|
|
278
335
|
def make_temporary_user(config={})
|
279
336
|
@user_index += 1
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
see_also = config[:see_also]
|
287
|
-
_wrap_assertion do
|
288
|
-
assert(!@user_class.exists?(uid))
|
289
|
-
assert_raise(ActiveLdap::EntryNotFound) do
|
290
|
-
@user_class.find(uid).dn
|
291
|
-
end
|
292
|
-
user = @user_class.new(uid)
|
293
|
-
assert(user.new_entry?)
|
294
|
-
user.cn = user.uid
|
295
|
-
user.sn = user.uid
|
296
|
-
user.uid_number = uid_number
|
297
|
-
user.gid_number = gid_number
|
298
|
-
user.home_directory = home_directory
|
299
|
-
user.user_password = ActiveLdap::UserPassword.ssha(password)
|
300
|
-
user.see_also = see_also
|
301
|
-
unless config[:simple]
|
302
|
-
user.add_class('shadowAccount', 'inetOrgPerson',
|
303
|
-
'organizationalPerson')
|
304
|
-
user.user_certificate = certificate
|
305
|
-
user.jpeg_photo = jpeg_photo
|
306
|
-
end
|
307
|
-
user.save
|
308
|
-
assert(!user.new_entry?)
|
309
|
-
yield(@user_class.find(user.uid), password)
|
337
|
+
config = config.merge(uid: config[:uid] || "temp-user#{@user_index}")
|
338
|
+
uid = config[:uid]
|
339
|
+
@temporary_uids << uid
|
340
|
+
if block_given?
|
341
|
+
ensure_delete_user(uid) do
|
342
|
+
yield(*build_temporary_user(config))
|
310
343
|
end
|
344
|
+
else
|
345
|
+
build_temporary_user(config)
|
311
346
|
end
|
312
347
|
end
|
313
348
|
|
@@ -334,12 +369,8 @@ module AlTestUtils
|
|
334
369
|
def ensure_delete_user(uid)
|
335
370
|
yield(uid)
|
336
371
|
ensure
|
337
|
-
|
338
|
-
|
339
|
-
@user_class.remove_connection(dn)
|
340
|
-
@user_class.delete(dn)
|
341
|
-
end
|
342
|
-
end
|
372
|
+
delete_temporary_user(uid)
|
373
|
+
@temporary_uids.delete(uid)
|
343
374
|
end
|
344
375
|
|
345
376
|
def ensure_delete_group(cn)
|
@@ -373,6 +404,10 @@ module AlTestUtils
|
|
373
404
|
end
|
374
405
|
|
375
406
|
def run_command(*args, &block)
|
407
|
+
if RUBY_VERSION >= "2.7"
|
408
|
+
omit("Need to fix an optional arguments warning in net-ldap: " +
|
409
|
+
"ruby-ldap/ruby-net-ldap/pull/342")
|
410
|
+
end
|
376
411
|
file = Tempfile.new("al-command-support")
|
377
412
|
file.open
|
378
413
|
file.puts(ActiveLdap::Base.configurations["test"].to_yaml)
|
@@ -425,4 +460,16 @@ module AlTestUtils
|
|
425
460
|
ActiveLdap::Base.logger = original_logger
|
426
461
|
end
|
427
462
|
end
|
463
|
+
|
464
|
+
module Omittable
|
465
|
+
def omit_if_jruby(message=nil)
|
466
|
+
return unless RUBY_PLATFORM == "java"
|
467
|
+
omit(message || "This test is not for JRuby")
|
468
|
+
end
|
469
|
+
|
470
|
+
def omit_if_ldap(message=nil)
|
471
|
+
return unless current_configuration[:adapter] == "ldap"
|
472
|
+
omit(message || "This test is not for ruby-ldap")
|
473
|
+
end
|
474
|
+
end
|
428
475
|
end
|
data/test/test_base.rb
CHANGED
@@ -150,13 +150,13 @@ class TestBase < Test::Unit::TestCase
|
|
150
150
|
_ou_class.create("root2")
|
151
151
|
assert_equal(["base",
|
152
152
|
"root1", "child1", "child2", "domain", "child3",
|
153
|
-
"root2"],
|
154
|
-
_entry_class.find(:all).collect(&:id))
|
153
|
+
"root2"].sort,
|
154
|
+
_entry_class.find(:all).collect(&:id).sort)
|
155
155
|
assert_raise(ActiveLdap::DeleteError) do
|
156
156
|
root1.destroy_all
|
157
157
|
end
|
158
|
-
assert_equal(["base", "root1", "domain", "root2"],
|
159
|
-
_entry_class.find(:all).collect(&:id))
|
158
|
+
assert_equal(["base", "root1", "domain", "root2"].sort,
|
159
|
+
_entry_class.find(:all).collect(&:id).sort)
|
160
160
|
end
|
161
161
|
|
162
162
|
def test_delete_mixed_tree_by_instance
|
@@ -173,13 +173,13 @@ class TestBase < Test::Unit::TestCase
|
|
173
173
|
_ou_class.create("root2")
|
174
174
|
assert_equal(["base",
|
175
175
|
"root1", "child1", "child2", "domain", "child3",
|
176
|
-
"root2"],
|
177
|
-
_entry_class.find(:all).collect(&:id))
|
176
|
+
"root2"].sort,
|
177
|
+
_entry_class.find(:all).collect(&:id).sort)
|
178
178
|
assert_raise(ActiveLdap::DeleteError) do
|
179
179
|
root1.delete_all
|
180
180
|
end
|
181
|
-
assert_equal(["base", "root1", "domain", "root2"],
|
182
|
-
_entry_class.find(:all).collect(&:id))
|
181
|
+
assert_equal(["base", "root1", "domain", "root2"].sort,
|
182
|
+
_entry_class.find(:all).collect(&:id).sort)
|
183
183
|
end
|
184
184
|
|
185
185
|
def test_delete_tree
|
@@ -189,8 +189,8 @@ class TestBase < Test::Unit::TestCase
|
|
189
189
|
_ou_class.create(:ou => "child1", :parent => root1)
|
190
190
|
_ou_class.create(:ou => "child2", :parent => root1)
|
191
191
|
_ou_class.create("root2")
|
192
|
-
assert_equal(["base", "root1", "child1", "child2", "root2"],
|
193
|
-
_ou_class.find(:all).collect(&:ou))
|
192
|
+
assert_equal(["base", "root1", "child1", "child2", "root2"].sort,
|
193
|
+
_ou_class.find(:all).collect(&:ou).sort)
|
194
194
|
_ou_class.delete_all(:base => root1.dn)
|
195
195
|
assert_equal(["base", "root2"],
|
196
196
|
_ou_class.find(:all).collect(&:ou))
|
@@ -217,11 +217,11 @@ class TestBase < Test::Unit::TestCase
|
|
217
217
|
:classes => ["top"]
|
218
218
|
entry_class.dn_attribute = nil
|
219
219
|
assert_equal(["base", "root1", "child1", "domain1", "grandchild1",
|
220
|
-
"child2", "domain2", "root2"],
|
221
|
-
entry_class.find(:all).collect(&:id))
|
220
|
+
"child2", "domain2", "root2"].sort,
|
221
|
+
entry_class.find(:all).collect(&:id).sort)
|
222
222
|
entry_class.delete_all(nil, :base => child2.dn)
|
223
|
-
assert_equal(["base", "root1", "child1", "domain1", "grandchild1", "root2"],
|
224
|
-
entry_class.find(:all).collect(&:id))
|
223
|
+
assert_equal(["base", "root1", "child1", "domain1", "grandchild1", "root2"].sort,
|
224
|
+
entry_class.find(:all).collect(&:id).sort)
|
225
225
|
end
|
226
226
|
|
227
227
|
def test_first
|
data/test/test_connection.rb
CHANGED
@@ -3,6 +3,7 @@ require 'al-test-utils'
|
|
3
3
|
class TestConnection < Test::Unit::TestCase
|
4
4
|
include AlTestUtils::Config
|
5
5
|
include AlTestUtils::MockLogger
|
6
|
+
include AlTestUtils::Omittable
|
6
7
|
|
7
8
|
def setup
|
8
9
|
super
|
@@ -23,6 +24,9 @@ class TestConnection < Test::Unit::TestCase
|
|
23
24
|
end
|
24
25
|
|
25
26
|
def test_retry_limit_0_with_nonexistent_host_with_timeout
|
27
|
+
omit_if_ldap("this test will take a long time...")
|
28
|
+
omit_if_jruby("JNI adapter returns connection error immediately. " +
|
29
|
+
"So timeout isn't invoked.")
|
26
30
|
config = current_configuration.merge("host" => "192.168.29.29",
|
27
31
|
"retry_limit" => 0,
|
28
32
|
"timeout" => 1)
|
data/test/test_find.rb
CHANGED
@@ -3,7 +3,18 @@ require 'al-test-utils'
|
|
3
3
|
class TestFind < Test::Unit::TestCase
|
4
4
|
include AlTestUtils
|
5
5
|
|
6
|
-
|
6
|
+
def test_find_paged
|
7
|
+
page_size = 126
|
8
|
+
n_users = page_size + 1
|
9
|
+
uids = n_users.times.collect do
|
10
|
+
user, _password = make_temporary_user
|
11
|
+
user.uid
|
12
|
+
end
|
13
|
+
users = @user_class.find(:all, page_size: page_size)
|
14
|
+
assert_equal(uids.sort,
|
15
|
+
users.collect(&:uid).sort)
|
16
|
+
end
|
17
|
+
|
7
18
|
def test_find_with_dn
|
8
19
|
make_temporary_user do |user,|
|
9
20
|
assert_equal(user.dn, @user_class.find(user.dn).dn)
|
@@ -11,7 +22,6 @@ class TestFind < Test::Unit::TestCase
|
|
11
22
|
end
|
12
23
|
end
|
13
24
|
|
14
|
-
priority :normal
|
15
25
|
def test_find_with_special_value_prefix
|
16
26
|
# \2C == ','
|
17
27
|
make_ou("a\\2Cb,ou=Users")
|
data/test/test_validation.rb
CHANGED
@@ -52,8 +52,8 @@ class TestValidation < Test::Unit::TestCase
|
|
52
52
|
user1.id = user2.id
|
53
53
|
assert_false(user1.save)
|
54
54
|
|
55
|
-
format =
|
56
|
-
format
|
55
|
+
format = human_attribute_name("distinguishedName")
|
56
|
+
format << " " << _("is duplicated: %s")
|
57
57
|
assert_equal([format % [user2.dn.to_s]],
|
58
58
|
user1.errors.full_messages)
|
59
59
|
end
|
@@ -66,8 +66,8 @@ class TestValidation < Test::Unit::TestCase
|
|
66
66
|
user.jpeg_photo = "XXX"
|
67
67
|
assert_not_predicate(user, :save)
|
68
68
|
|
69
|
-
format =
|
70
|
-
format <<
|
69
|
+
format = human_attribute_name('jpegPhoto')
|
70
|
+
format << " " << _("has invalid format: %s: required syntax: %s: %s")
|
71
71
|
arguments = [_("<binary-value>"),
|
72
72
|
lsd_("1.3.6.1.4.1.1466.115.121.1.28"),
|
73
73
|
_("invalid JPEG format")]
|
@@ -112,8 +112,8 @@ class TestValidation < Test::Unit::TestCase
|
|
112
112
|
reason = _("attribute value is missing")
|
113
113
|
invalid_format = _("%s is invalid distinguished name (DN): %s")
|
114
114
|
invalid_message = invalid_format % ["uid==,#{user.class.base}", reason]
|
115
|
-
format =
|
116
|
-
format <<
|
115
|
+
format = human_attribute_name("distinguishedName")
|
116
|
+
format << " " << _("is invalid: %s")
|
117
117
|
message = format % invalid_message
|
118
118
|
assert_equal([message],
|
119
119
|
user.errors.full_messages.find_all {|m| /DN/ =~ m})
|
@@ -126,8 +126,8 @@ class TestValidation < Test::Unit::TestCase
|
|
126
126
|
reason = _("attribute value is missing")
|
127
127
|
invalid_format = _("%s is invalid distinguished name (DN): %s")
|
128
128
|
invalid_message = invalid_format % ["uid==,#{user.class.base}", reason]
|
129
|
-
format =
|
130
|
-
format <<
|
129
|
+
format = human_attribute_name("distinguishedName")
|
130
|
+
format << " " << _("is invalid: %s")
|
131
131
|
message = format % invalid_message
|
132
132
|
assert_equal([message], user.errors.full_messages)
|
133
133
|
end
|
@@ -138,8 +138,8 @@ class TestValidation < Test::Unit::TestCase
|
|
138
138
|
assert(user.valid?)
|
139
139
|
user.uid_number = ""
|
140
140
|
assert(!user.valid?)
|
141
|
-
format =
|
142
|
-
format <<
|
141
|
+
format = human_attribute_name("uidNumber")
|
142
|
+
format << " " << _("is required attribute by objectClass '%s'")
|
143
143
|
blank_message = format % loc_("posixAccount")
|
144
144
|
assert_equal([blank_message], user.errors.full_messages)
|
145
145
|
end
|
@@ -150,8 +150,8 @@ class TestValidation < Test::Unit::TestCase
|
|
150
150
|
assert(user.save)
|
151
151
|
user.class.excluded_classes = ['person']
|
152
152
|
assert(!user.save)
|
153
|
-
format =
|
154
|
-
format <<
|
153
|
+
format = human_attribute_name("objectClass")
|
154
|
+
format << " " << n_("has excluded value: %s",
|
155
155
|
"has excluded values: %s",
|
156
156
|
1)
|
157
157
|
message = format % loc_("person")
|
@@ -222,8 +222,8 @@ class TestValidation < Test::Unit::TestCase
|
|
222
222
|
assert(ou_class.new("YYY").save)
|
223
223
|
ou = ou_class.new("YYY")
|
224
224
|
assert(!ou.save)
|
225
|
-
format =
|
226
|
-
format <<
|
225
|
+
format = human_attribute_name("distinguishedName")
|
226
|
+
format << " " << _("is duplicated: %s")
|
227
227
|
message = format % ou.dn
|
228
228
|
assert_equal([message], ou.errors.full_messages)
|
229
229
|
end
|
@@ -259,12 +259,16 @@ class TestValidation < Test::Unit::TestCase
|
|
259
259
|
end
|
260
260
|
|
261
261
|
private
|
262
|
+
def human_attribute_name(name)
|
263
|
+
la_(name).dup
|
264
|
+
end
|
265
|
+
|
262
266
|
def assert_invalid_value(name, formatted_value, syntax, reason, model, option)
|
263
267
|
syntax_description = lsd_(syntax)
|
264
268
|
assert_not_nil(syntax_description)
|
265
269
|
params = [formatted_value, syntax_description, reason]
|
266
270
|
params.unshift(option) if option
|
267
|
-
localized_name =
|
271
|
+
localized_name = human_attribute_name(name)
|
268
272
|
format = localized_name << ' '
|
269
273
|
if option
|
270
274
|
format << _("(%s) has invalid format: %s: required syntax: %s: %s")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activeldap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Will Drewry
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-04-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
@@ -96,7 +96,7 @@ dependencies:
|
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
|
-
name:
|
99
|
+
name: kramdown
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
102
|
- - ">="
|
@@ -110,7 +110,7 @@ dependencies:
|
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
|
-
name:
|
113
|
+
name: packnga
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
116
|
- - ">="
|
@@ -124,7 +124,7 @@ dependencies:
|
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
|
-
name:
|
127
|
+
name: rake
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
130
|
- - ">="
|
@@ -138,7 +138,7 @@ dependencies:
|
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '0'
|
140
140
|
- !ruby/object:Gem::Dependency
|
141
|
-
name:
|
141
|
+
name: test-unit
|
142
142
|
requirement: !ruby/object:Gem::Requirement
|
143
143
|
requirements:
|
144
144
|
- - ">="
|
@@ -152,7 +152,7 @@ dependencies:
|
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '0'
|
154
154
|
- !ruby/object:Gem::Dependency
|
155
|
-
name:
|
155
|
+
name: test-unit-notify
|
156
156
|
requirement: !ruby/object:Gem::Requirement
|
157
157
|
requirements:
|
158
158
|
- - ">="
|
@@ -166,7 +166,7 @@ dependencies:
|
|
166
166
|
- !ruby/object:Gem::Version
|
167
167
|
version: '0'
|
168
168
|
- !ruby/object:Gem::Dependency
|
169
|
-
name:
|
169
|
+
name: yard
|
170
170
|
requirement: !ruby/object:Gem::Requirement
|
171
171
|
requirements:
|
172
172
|
- - ">="
|
@@ -196,16 +196,15 @@ files:
|
|
196
196
|
- COPYING
|
197
197
|
- Gemfile
|
198
198
|
- LICENSE
|
199
|
-
- README.textile
|
200
199
|
- TODO
|
201
200
|
- benchmark/README.md
|
202
201
|
- benchmark/bench-backend.rb
|
203
202
|
- benchmark/bench-instantiate.rb
|
204
203
|
- benchmark/config.yaml.sample
|
205
|
-
- doc/text/development.
|
206
|
-
- doc/text/news.
|
207
|
-
- doc/text/rails.
|
208
|
-
- doc/text/tutorial.
|
204
|
+
- doc/text/development.md
|
205
|
+
- doc/text/news.md
|
206
|
+
- doc/text/rails.md
|
207
|
+
- doc/text/tutorial.md
|
209
208
|
- examples/config.yaml.example
|
210
209
|
- examples/example.der
|
211
210
|
- examples/example.jpg
|
@@ -359,8 +358,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
359
358
|
- !ruby/object:Gem::Version
|
360
359
|
version: '0'
|
361
360
|
requirements: []
|
362
|
-
|
363
|
-
rubygems_version: 2.7.6.2
|
361
|
+
rubygems_version: 3.2.0.pre1
|
364
362
|
signing_key:
|
365
363
|
specification_version: 4
|
366
364
|
summary: ActiveLdap is a object-oriented API to LDAP
|