activeldap 5.2.3 → 6.0.3
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} +345 -271
- data/doc/text/{rails.textile → rails.md} +35 -33
- data/doc/text/{tutorial.textile → tutorial.md} +177 -185
- data/lib/active_ldap.rb +0 -1
- data/lib/active_ldap/adapter/base.rb +29 -10
- data/lib/active_ldap/adapter/jndi.rb +21 -9
- data/lib/active_ldap/adapter/jndi_connection.rb +83 -20
- data/lib/active_ldap/adapter/ldap.rb +13 -22
- data/lib/active_ldap/adapter/ldap_ext.rb +32 -13
- data/lib/active_ldap/adapter/net_ldap.rb +9 -18
- data/lib/active_ldap/base.rb +11 -1
- 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/persistence.rb +3 -2
- data/lib/active_ldap/validations.rb +12 -4
- data/lib/active_ldap/version.rb +1 -1
- data/test/add-phonetic-attribute-options-to-slapd.ldif +1 -1
- data/test/al-test-utils.rb +125 -38
- data/test/enable-dynamic-groups.ldif +22 -0
- data/test/enable-start-tls.ldif +1 -1
- data/test/run-test.rb +0 -4
- data/test/test_base.rb +76 -18
- data/test/test_base_per_instance.rb +33 -1
- data/test/test_connection.rb +4 -0
- data/test/test_entry.rb +1 -0
- data/test/test_find.rb +12 -2
- data/test/test_supported_control.rb +1 -1
- data/test/test_validation.rb +28 -15
- metadata +18 -32
- data/README.textile +0 -141
- data/doc/text/development.textile +0 -54
data/test/enable-start-tls.ldif
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Your LDAP server needs to support StartTLS when you test StartTLS related
|
|
2
2
|
# feature. This is a LDIF file for OpenLDAP to do the configuration.
|
|
3
|
-
# You can use this file by the following command
|
|
3
|
+
# You can use this file by the following command line on Debian GNU/Linux
|
|
4
4
|
# or Ubuntu:
|
|
5
5
|
#
|
|
6
6
|
# % sudo usermod -a -G ssl-cert openldap
|
data/test/run-test.rb
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
$VERBOSE = true
|
|
4
4
|
|
|
5
|
-
$KCODE = 'u' if RUBY_VERSION < "1.9"
|
|
6
|
-
|
|
7
5
|
base_dir = File.expand_path(File.dirname(__FILE__))
|
|
8
6
|
top_dir = File.expand_path(File.join(base_dir, ".."))
|
|
9
7
|
lib_dir = File.join(top_dir, "lib")
|
|
@@ -11,11 +9,9 @@ test_dir = File.join(top_dir, "test")
|
|
|
11
9
|
$LOAD_PATH.unshift(lib_dir)
|
|
12
10
|
$LOAD_PATH.unshift(test_dir)
|
|
13
11
|
|
|
14
|
-
require "rubygems"
|
|
15
12
|
require "bundler/setup"
|
|
16
13
|
|
|
17
14
|
require "test/unit"
|
|
18
|
-
require "test/unit/notify"
|
|
19
15
|
Test::Unit::Priority.enable
|
|
20
16
|
|
|
21
17
|
Dir.glob(File.join(test_dir, "**", "test_*.rb")) do |test_file|
|
data/test/test_base.rb
CHANGED
|
@@ -5,7 +5,52 @@ require 'al-test-utils'
|
|
|
5
5
|
class TestBase < Test::Unit::TestCase
|
|
6
6
|
include AlTestUtils
|
|
7
7
|
|
|
8
|
+
sub_test_case("follow_referrals") do
|
|
9
|
+
def test_default
|
|
10
|
+
make_temporary_user do |user1,|
|
|
11
|
+
make_temporary_user do |user2,|
|
|
12
|
+
member_url = ["ldap:///#{user1.base.to_s}??one?(objectClass=person)"]
|
|
13
|
+
make_temporary_group_of_urls(member_url: member_url) do |group_of_urls|
|
|
14
|
+
assert_equal([user1.dn, user2.dn],
|
|
15
|
+
group_of_urls.attributes["member"])
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_connection_false
|
|
22
|
+
omit_unless_jruby
|
|
23
|
+
@group_of_urls_class.setup_connection(
|
|
24
|
+
current_configuration.merge(follow_referrals: false)
|
|
25
|
+
)
|
|
26
|
+
make_temporary_user do |user1,|
|
|
27
|
+
make_temporary_user do |user2,|
|
|
28
|
+
member_url = ["ldap:///#{user1.base.to_s}??one?(objectClass=person)"]
|
|
29
|
+
make_temporary_group_of_urls(member_url: member_url) do |group_of_urls|
|
|
30
|
+
assert_nil(group_of_urls.attributes["member"])
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_connect_false
|
|
37
|
+
omit_unless_jruby
|
|
38
|
+
connection = @group_of_urls_class.connection
|
|
39
|
+
connection.disconnect!
|
|
40
|
+
connection.connect(follow_referrals: false)
|
|
41
|
+
make_temporary_user do |user1,|
|
|
42
|
+
make_temporary_user do |user2,|
|
|
43
|
+
member_url = ["ldap:///#{user1.base.to_s}??one?(objectClass=person)"]
|
|
44
|
+
make_temporary_group_of_urls(member_url: member_url) do |group_of_urls|
|
|
45
|
+
assert_nil(group_of_urls.attributes["member"])
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
8
52
|
priority :must
|
|
53
|
+
priority :normal
|
|
9
54
|
def test_search_colon_value
|
|
10
55
|
make_temporary_group(:cn => "temp:group") do |group|
|
|
11
56
|
assert_equal("temp:group", group.cn)
|
|
@@ -13,7 +58,6 @@ class TestBase < Test::Unit::TestCase
|
|
|
13
58
|
end
|
|
14
59
|
end
|
|
15
60
|
|
|
16
|
-
priority :normal
|
|
17
61
|
def test_lower_case_object_class
|
|
18
62
|
fixture_file = fixture("lower_case_object_class_schema.rb")
|
|
19
63
|
schema_entries = eval(File.read(fixture_file))
|
|
@@ -122,9 +166,9 @@ class TestBase < Test::Unit::TestCase
|
|
|
122
166
|
|
|
123
167
|
def test_operational_attributes
|
|
124
168
|
make_temporary_group do |group|
|
|
125
|
-
|
|
169
|
+
_dn, attributes = @group_class.search(:attributes => ["*"])[0]
|
|
126
170
|
normal_attributes = attributes.keys
|
|
127
|
-
|
|
171
|
+
_dn, attributes = @group_class.search(:attributes => ["*", "+"])[0]
|
|
128
172
|
operational_attributes = attributes.keys - normal_attributes
|
|
129
173
|
operational_attribute = operational_attributes[0]
|
|
130
174
|
|
|
@@ -150,13 +194,13 @@ class TestBase < Test::Unit::TestCase
|
|
|
150
194
|
_ou_class.create("root2")
|
|
151
195
|
assert_equal(["base",
|
|
152
196
|
"root1", "child1", "child2", "domain", "child3",
|
|
153
|
-
"root2"],
|
|
154
|
-
_entry_class.find(:all).collect(&:id))
|
|
197
|
+
"root2"].sort,
|
|
198
|
+
_entry_class.find(:all).collect(&:id).sort)
|
|
155
199
|
assert_raise(ActiveLdap::DeleteError) do
|
|
156
200
|
root1.destroy_all
|
|
157
201
|
end
|
|
158
|
-
assert_equal(["base", "root1", "domain", "root2"],
|
|
159
|
-
_entry_class.find(:all).collect(&:id))
|
|
202
|
+
assert_equal(["base", "root1", "domain", "root2"].sort,
|
|
203
|
+
_entry_class.find(:all).collect(&:id).sort)
|
|
160
204
|
end
|
|
161
205
|
|
|
162
206
|
def test_delete_mixed_tree_by_instance
|
|
@@ -173,13 +217,13 @@ class TestBase < Test::Unit::TestCase
|
|
|
173
217
|
_ou_class.create("root2")
|
|
174
218
|
assert_equal(["base",
|
|
175
219
|
"root1", "child1", "child2", "domain", "child3",
|
|
176
|
-
"root2"],
|
|
177
|
-
_entry_class.find(:all).collect(&:id))
|
|
220
|
+
"root2"].sort,
|
|
221
|
+
_entry_class.find(:all).collect(&:id).sort)
|
|
178
222
|
assert_raise(ActiveLdap::DeleteError) do
|
|
179
223
|
root1.delete_all
|
|
180
224
|
end
|
|
181
|
-
assert_equal(["base", "root1", "domain", "root2"],
|
|
182
|
-
_entry_class.find(:all).collect(&:id))
|
|
225
|
+
assert_equal(["base", "root1", "domain", "root2"].sort,
|
|
226
|
+
_entry_class.find(:all).collect(&:id).sort)
|
|
183
227
|
end
|
|
184
228
|
|
|
185
229
|
def test_delete_tree
|
|
@@ -189,8 +233,8 @@ class TestBase < Test::Unit::TestCase
|
|
|
189
233
|
_ou_class.create(:ou => "child1", :parent => root1)
|
|
190
234
|
_ou_class.create(:ou => "child2", :parent => root1)
|
|
191
235
|
_ou_class.create("root2")
|
|
192
|
-
assert_equal(["base", "root1", "child1", "child2", "root2"],
|
|
193
|
-
_ou_class.find(:all).collect(&:ou))
|
|
236
|
+
assert_equal(["base", "root1", "child1", "child2", "root2"].sort,
|
|
237
|
+
_ou_class.find(:all).collect(&:ou).sort)
|
|
194
238
|
_ou_class.delete_all(:base => root1.dn)
|
|
195
239
|
assert_equal(["base", "root2"],
|
|
196
240
|
_ou_class.find(:all).collect(&:ou))
|
|
@@ -217,11 +261,11 @@ class TestBase < Test::Unit::TestCase
|
|
|
217
261
|
:classes => ["top"]
|
|
218
262
|
entry_class.dn_attribute = nil
|
|
219
263
|
assert_equal(["base", "root1", "child1", "domain1", "grandchild1",
|
|
220
|
-
"child2", "domain2", "root2"],
|
|
221
|
-
entry_class.find(:all).collect(&:id))
|
|
264
|
+
"child2", "domain2", "root2"].sort,
|
|
265
|
+
entry_class.find(:all).collect(&:id).sort)
|
|
222
266
|
entry_class.delete_all(nil, :base => child2.dn)
|
|
223
|
-
assert_equal(["base", "root1", "child1", "domain1", "grandchild1", "root2"],
|
|
224
|
-
entry_class.find(:all).collect(&:id))
|
|
267
|
+
assert_equal(["base", "root1", "child1", "domain1", "grandchild1", "root2"].sort,
|
|
268
|
+
entry_class.find(:all).collect(&:id).sort)
|
|
225
269
|
end
|
|
226
270
|
|
|
227
271
|
def test_first
|
|
@@ -383,6 +427,19 @@ class TestBase < Test::Unit::TestCase
|
|
|
383
427
|
end
|
|
384
428
|
end
|
|
385
429
|
|
|
430
|
+
def test_set_dn_with_unnormalized_dn_attribute_with_forward_slash
|
|
431
|
+
make_temporary_user do |user,|
|
|
432
|
+
new_dn = "uid=temp/user1,#{user.class.base}"
|
|
433
|
+
assert_not_equal(user.dn.to_s, new_dn)
|
|
434
|
+
|
|
435
|
+
user.uid = 'temp/user1'
|
|
436
|
+
assert_equal(user.dn.to_s, new_dn)
|
|
437
|
+
|
|
438
|
+
assert_true(user.save!)
|
|
439
|
+
assert_true(user.class.find(user.uid).update_attributes!(gidNumber: 100069))
|
|
440
|
+
end
|
|
441
|
+
end
|
|
442
|
+
|
|
386
443
|
def test_destroy_with_empty_base_and_prefix_of_class
|
|
387
444
|
make_temporary_user do |user,|
|
|
388
445
|
base = user.class.base
|
|
@@ -945,7 +1002,8 @@ class TestBase < Test::Unit::TestCase
|
|
|
945
1002
|
ou_class.ldap_mapping(:dn_attribute => :ou,
|
|
946
1003
|
:prefix => "",
|
|
947
1004
|
:classes => ["top", "organizationalUnit"])
|
|
948
|
-
assert_equal(["ou=
|
|
1005
|
+
assert_equal(["ou=GroupOfURLsSet,#{current_configuration['base']}",
|
|
1006
|
+
"ou=Groups,#{current_configuration['base']}",
|
|
949
1007
|
"ou=Users,#{current_configuration['base']}"],
|
|
950
1008
|
ou_class.find(:all).collect(&:dn).collect(&:to_s).sort)
|
|
951
1009
|
end
|
|
@@ -9,13 +9,45 @@ class TestBasePerInstance < Test::Unit::TestCase
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
priority :must
|
|
12
|
+
def test_dn_with_sub_base_first
|
|
13
|
+
sub_user = @user_class.new(dn: "uid=user1,ou=Sub,#{@user_class.base}",
|
|
14
|
+
uid: "user1")
|
|
15
|
+
# Order is important. #base should be called before #dn.
|
|
16
|
+
base = sub_user.base.to_s
|
|
17
|
+
dn = sub_user.dn.to_s
|
|
18
|
+
assert_equal([
|
|
19
|
+
"ou=Sub,#{@user_class.base}",
|
|
20
|
+
"uid=user1,ou=Sub,#{@user_class.base}",
|
|
21
|
+
],
|
|
22
|
+
[
|
|
23
|
+
base,
|
|
24
|
+
dn,
|
|
25
|
+
])
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_dn_with_sub_base_last
|
|
29
|
+
sub_user = @user_class.new(uid: "user1",
|
|
30
|
+
dn: "uid=user1,ou=Sub,#{@user_class.base}")
|
|
31
|
+
# Order is important. #base should be called before #dn.
|
|
32
|
+
base = sub_user.base.to_s
|
|
33
|
+
dn = sub_user.dn.to_s
|
|
34
|
+
assert_equal([
|
|
35
|
+
"ou=Sub,#{@user_class.base}",
|
|
36
|
+
"uid=user1,ou=Sub,#{@user_class.base}",
|
|
37
|
+
],
|
|
38
|
+
[
|
|
39
|
+
base,
|
|
40
|
+
dn,
|
|
41
|
+
])
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
priority :normal
|
|
12
45
|
def test_set_base
|
|
13
46
|
guest = @user_class.new("guest")
|
|
14
47
|
guest.base = "ou=Sub"
|
|
15
48
|
assert_equal("uid=guest,ou=Sub,#{@user_class.base}", guest.dn)
|
|
16
49
|
end
|
|
17
50
|
|
|
18
|
-
priority :normal
|
|
19
51
|
def test_dn_is_base
|
|
20
52
|
entry_class = Class.new(ActiveLdap::Base)
|
|
21
53
|
entry_class.ldap_mapping :prefix => "",
|
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_entry.rb
CHANGED
|
@@ -11,6 +11,7 @@ class TestEntry < Test::Unit::TestCase
|
|
|
11
11
|
all_entries = [ActiveLdap::Base.base]
|
|
12
12
|
all_entries += [user.dn, user.base]
|
|
13
13
|
all_entries += [group.dn, group.base]
|
|
14
|
+
all_entries += [@group_of_urls_class.base]
|
|
14
15
|
assert_equal(all_entries.sort,
|
|
15
16
|
ActiveLdap::Entry.all.collect(&:dn).sort)
|
|
16
17
|
end
|
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
|
@@ -37,6 +37,15 @@ class TestValidation < Test::Unit::TestCase
|
|
|
37
37
|
priority :must
|
|
38
38
|
|
|
39
39
|
priority :normal
|
|
40
|
+
def test_validate_false
|
|
41
|
+
make_temporary_user(:simple => true) do |user,|
|
|
42
|
+
user.sn = nil
|
|
43
|
+
assert_raise(ActiveLdap::RequiredAttributeMissed) do
|
|
44
|
+
user.save(validate: false)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
40
49
|
def test_octet_string
|
|
41
50
|
make_temporary_user(:simple => true) do |user,|
|
|
42
51
|
utf8_encoded_binary_value = "\xff".force_encoding("UTF-8")
|
|
@@ -52,8 +61,8 @@ class TestValidation < Test::Unit::TestCase
|
|
|
52
61
|
user1.id = user2.id
|
|
53
62
|
assert_false(user1.save)
|
|
54
63
|
|
|
55
|
-
format =
|
|
56
|
-
format
|
|
64
|
+
format = human_attribute_name("distinguishedName")
|
|
65
|
+
format << " " << _("is duplicated: %s")
|
|
57
66
|
assert_equal([format % [user2.dn.to_s]],
|
|
58
67
|
user1.errors.full_messages)
|
|
59
68
|
end
|
|
@@ -66,8 +75,8 @@ class TestValidation < Test::Unit::TestCase
|
|
|
66
75
|
user.jpeg_photo = "XXX"
|
|
67
76
|
assert_not_predicate(user, :save)
|
|
68
77
|
|
|
69
|
-
format =
|
|
70
|
-
format <<
|
|
78
|
+
format = human_attribute_name('jpegPhoto')
|
|
79
|
+
format << " " << _("has invalid format: %s: required syntax: %s: %s")
|
|
71
80
|
arguments = [_("<binary-value>"),
|
|
72
81
|
lsd_("1.3.6.1.4.1.1466.115.121.1.28"),
|
|
73
82
|
_("invalid JPEG format")]
|
|
@@ -112,8 +121,8 @@ class TestValidation < Test::Unit::TestCase
|
|
|
112
121
|
reason = _("attribute value is missing")
|
|
113
122
|
invalid_format = _("%s is invalid distinguished name (DN): %s")
|
|
114
123
|
invalid_message = invalid_format % ["uid==,#{user.class.base}", reason]
|
|
115
|
-
format =
|
|
116
|
-
format <<
|
|
124
|
+
format = human_attribute_name("distinguishedName")
|
|
125
|
+
format << " " << _("is invalid: %s")
|
|
117
126
|
message = format % invalid_message
|
|
118
127
|
assert_equal([message],
|
|
119
128
|
user.errors.full_messages.find_all {|m| /DN/ =~ m})
|
|
@@ -126,8 +135,8 @@ class TestValidation < Test::Unit::TestCase
|
|
|
126
135
|
reason = _("attribute value is missing")
|
|
127
136
|
invalid_format = _("%s is invalid distinguished name (DN): %s")
|
|
128
137
|
invalid_message = invalid_format % ["uid==,#{user.class.base}", reason]
|
|
129
|
-
format =
|
|
130
|
-
format <<
|
|
138
|
+
format = human_attribute_name("distinguishedName")
|
|
139
|
+
format << " " << _("is invalid: %s")
|
|
131
140
|
message = format % invalid_message
|
|
132
141
|
assert_equal([message], user.errors.full_messages)
|
|
133
142
|
end
|
|
@@ -138,8 +147,8 @@ class TestValidation < Test::Unit::TestCase
|
|
|
138
147
|
assert(user.valid?)
|
|
139
148
|
user.uid_number = ""
|
|
140
149
|
assert(!user.valid?)
|
|
141
|
-
format =
|
|
142
|
-
format <<
|
|
150
|
+
format = human_attribute_name("uidNumber")
|
|
151
|
+
format << " " << _("is required attribute by objectClass '%s'")
|
|
143
152
|
blank_message = format % loc_("posixAccount")
|
|
144
153
|
assert_equal([blank_message], user.errors.full_messages)
|
|
145
154
|
end
|
|
@@ -150,8 +159,8 @@ class TestValidation < Test::Unit::TestCase
|
|
|
150
159
|
assert(user.save)
|
|
151
160
|
user.class.excluded_classes = ['person']
|
|
152
161
|
assert(!user.save)
|
|
153
|
-
format =
|
|
154
|
-
format <<
|
|
162
|
+
format = human_attribute_name("objectClass")
|
|
163
|
+
format << " " << n_("has excluded value: %s",
|
|
155
164
|
"has excluded values: %s",
|
|
156
165
|
1)
|
|
157
166
|
message = format % loc_("person")
|
|
@@ -222,8 +231,8 @@ class TestValidation < Test::Unit::TestCase
|
|
|
222
231
|
assert(ou_class.new("YYY").save)
|
|
223
232
|
ou = ou_class.new("YYY")
|
|
224
233
|
assert(!ou.save)
|
|
225
|
-
format =
|
|
226
|
-
format <<
|
|
234
|
+
format = human_attribute_name("distinguishedName")
|
|
235
|
+
format << " " << _("is duplicated: %s")
|
|
227
236
|
message = format % ou.dn
|
|
228
237
|
assert_equal([message], ou.errors.full_messages)
|
|
229
238
|
end
|
|
@@ -259,12 +268,16 @@ class TestValidation < Test::Unit::TestCase
|
|
|
259
268
|
end
|
|
260
269
|
|
|
261
270
|
private
|
|
271
|
+
def human_attribute_name(name)
|
|
272
|
+
la_(name).dup
|
|
273
|
+
end
|
|
274
|
+
|
|
262
275
|
def assert_invalid_value(name, formatted_value, syntax, reason, model, option)
|
|
263
276
|
syntax_description = lsd_(syntax)
|
|
264
277
|
assert_not_nil(syntax_description)
|
|
265
278
|
params = [formatted_value, syntax_description, reason]
|
|
266
279
|
params.unshift(option) if option
|
|
267
|
-
localized_name =
|
|
280
|
+
localized_name = human_attribute_name(name)
|
|
268
281
|
format = localized_name << ' '
|
|
269
282
|
if option
|
|
270
283
|
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.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Will Drewry
|
|
@@ -9,22 +9,22 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2020-08-16 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: activemodel
|
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
|
17
17
|
requirements:
|
|
18
|
-
- - "
|
|
18
|
+
- - ">="
|
|
19
19
|
- !ruby/object:Gem::Version
|
|
20
|
-
version:
|
|
20
|
+
version: '5.2'
|
|
21
21
|
type: :runtime
|
|
22
22
|
prerelease: false
|
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
24
|
requirements:
|
|
25
|
-
- - "
|
|
25
|
+
- - ">="
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
|
-
version:
|
|
27
|
+
version: '5.2'
|
|
28
28
|
- !ruby/object:Gem::Dependency
|
|
29
29
|
name: locale
|
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -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,21 +110,7 @@ dependencies:
|
|
|
110
110
|
- !ruby/object:Gem::Version
|
|
111
111
|
version: '0'
|
|
112
112
|
- !ruby/object:Gem::Dependency
|
|
113
|
-
name:
|
|
114
|
-
requirement: !ruby/object:Gem::Requirement
|
|
115
|
-
requirements:
|
|
116
|
-
- - ">="
|
|
117
|
-
- !ruby/object:Gem::Version
|
|
118
|
-
version: '0'
|
|
119
|
-
type: :development
|
|
120
|
-
prerelease: false
|
|
121
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
122
|
-
requirements:
|
|
123
|
-
- - ">="
|
|
124
|
-
- !ruby/object:Gem::Version
|
|
125
|
-
version: '0'
|
|
126
|
-
- !ruby/object:Gem::Dependency
|
|
127
|
-
name: test-unit-notify
|
|
113
|
+
name: packnga
|
|
128
114
|
requirement: !ruby/object:Gem::Requirement
|
|
129
115
|
requirements:
|
|
130
116
|
- - ">="
|
|
@@ -138,7 +124,7 @@ dependencies:
|
|
|
138
124
|
- !ruby/object:Gem::Version
|
|
139
125
|
version: '0'
|
|
140
126
|
- !ruby/object:Gem::Dependency
|
|
141
|
-
name:
|
|
127
|
+
name: rake
|
|
142
128
|
requirement: !ruby/object:Gem::Requirement
|
|
143
129
|
requirements:
|
|
144
130
|
- - ">="
|
|
@@ -152,7 +138,7 @@ dependencies:
|
|
|
152
138
|
- !ruby/object:Gem::Version
|
|
153
139
|
version: '0'
|
|
154
140
|
- !ruby/object:Gem::Dependency
|
|
155
|
-
name:
|
|
141
|
+
name: test-unit
|
|
156
142
|
requirement: !ruby/object:Gem::Requirement
|
|
157
143
|
requirements:
|
|
158
144
|
- - ">="
|
|
@@ -166,7 +152,7 @@ dependencies:
|
|
|
166
152
|
- !ruby/object:Gem::Version
|
|
167
153
|
version: '0'
|
|
168
154
|
- !ruby/object:Gem::Dependency
|
|
169
|
-
name:
|
|
155
|
+
name: yard
|
|
170
156
|
requirement: !ruby/object:Gem::Requirement
|
|
171
157
|
requirements:
|
|
172
158
|
- - ">="
|
|
@@ -196,16 +182,15 @@ files:
|
|
|
196
182
|
- COPYING
|
|
197
183
|
- Gemfile
|
|
198
184
|
- LICENSE
|
|
199
|
-
- README.textile
|
|
200
185
|
- TODO
|
|
201
186
|
- benchmark/README.md
|
|
202
187
|
- benchmark/bench-backend.rb
|
|
203
188
|
- benchmark/bench-instantiate.rb
|
|
204
189
|
- benchmark/config.yaml.sample
|
|
205
|
-
- doc/text/development.
|
|
206
|
-
- doc/text/news.
|
|
207
|
-
- doc/text/rails.
|
|
208
|
-
- doc/text/tutorial.
|
|
190
|
+
- doc/text/development.md
|
|
191
|
+
- doc/text/news.md
|
|
192
|
+
- doc/text/rails.md
|
|
193
|
+
- doc/text/tutorial.md
|
|
209
194
|
- examples/config.yaml.example
|
|
210
195
|
- examples/example.der
|
|
211
196
|
- examples/example.jpg
|
|
@@ -294,6 +279,7 @@ files:
|
|
|
294
279
|
- test/al-test-utils.rb
|
|
295
280
|
- test/command.rb
|
|
296
281
|
- test/config.yaml.sample
|
|
282
|
+
- test/enable-dynamic-groups.ldif
|
|
297
283
|
- test/enable-start-tls.ldif
|
|
298
284
|
- test/fixtures/lower_case_object_class_schema.rb
|
|
299
285
|
- test/run-test.rb
|
|
@@ -359,8 +345,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
359
345
|
- !ruby/object:Gem::Version
|
|
360
346
|
version: '0'
|
|
361
347
|
requirements: []
|
|
362
|
-
|
|
363
|
-
rubygems_version: 2.7.6
|
|
348
|
+
rubygems_version: 3.2.0.rc.1
|
|
364
349
|
signing_key:
|
|
365
350
|
specification_version: 4
|
|
366
351
|
summary: ActiveLdap is a object-oriented API to LDAP
|
|
@@ -369,6 +354,7 @@ test_files:
|
|
|
369
354
|
- test/al-test-utils.rb
|
|
370
355
|
- test/command.rb
|
|
371
356
|
- test/config.yaml.sample
|
|
357
|
+
- test/enable-dynamic-groups.ldif
|
|
372
358
|
- test/enable-start-tls.ldif
|
|
373
359
|
- test/fixtures/lower_case_object_class_schema.rb
|
|
374
360
|
- test/run-test.rb
|