activeldap 3.1.1 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -14
- data/benchmark/README.md +64 -0
- data/benchmark/{bench-al.rb → bench-backend.rb} +6 -22
- data/benchmark/bench-instantiate.rb +98 -0
- data/benchmark/config.yaml.sample +2 -2
- data/doc/text/news.textile +38 -0
- data/lib/active_ldap.rb +17 -8
- data/lib/active_ldap/association/has_many_wrap.rb +15 -2
- data/lib/active_ldap/attribute_methods.rb +23 -0
- data/lib/active_ldap/attribute_methods/before_type_cast.rb +24 -0
- data/lib/active_ldap/attribute_methods/dirty.rb +43 -0
- data/lib/active_ldap/attribute_methods/query.rb +31 -0
- data/lib/active_ldap/attribute_methods/read.rb +44 -0
- data/lib/active_ldap/attribute_methods/write.rb +38 -0
- data/lib/active_ldap/attributes.rb +18 -26
- data/lib/active_ldap/base.rb +42 -163
- data/lib/active_ldap/connection.rb +6 -1
- data/lib/active_ldap/get_text.rb +18 -7
- data/lib/active_ldap/operations.rb +63 -49
- data/lib/active_ldap/persistence.rb +17 -0
- data/lib/active_ldap/railtie.rb +3 -0
- data/lib/active_ldap/schema.rb +2 -0
- data/lib/active_ldap/schema/syntaxes.rb +7 -7
- data/lib/active_ldap/validations.rb +2 -2
- data/lib/active_ldap/version.rb +3 -0
- data/lib/active_ldap/xml.rb +24 -7
- data/lib/rails/generators/active_ldap/model/model_generator.rb +3 -3
- data/test/add-phonetic-attribute-options-to-slapd.ldif +10 -0
- data/test/al-test-utils.rb +428 -0
- data/test/command.rb +111 -0
- data/test/config.yaml.sample +6 -0
- data/test/fixtures/lower_case_object_class_schema.rb +802 -0
- data/test/run-test.rb +29 -0
- data/test/test_associations.rb +37 -0
- data/test/test_base.rb +113 -51
- data/test/test_dirty.rb +84 -0
- data/test/test_ldif.rb +0 -1
- data/test/test_load.rb +0 -1
- data/test/test_reflection.rb +7 -14
- data/test/test_syntax.rb +104 -43
- data/test/test_usermod-binary-del.rb +1 -1
- data/test/test_usermod-lang-add.rb +0 -1
- metadata +272 -224
- data/lib/active_ldap/get_text_fallback.rb +0 -60
- data/lib/active_ldap/get_text_support.rb +0 -22
data/test/run-test.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$VERBOSE = true
|
4
|
+
|
5
|
+
$KCODE = 'u' if RUBY_VERSION < "1.9"
|
6
|
+
|
7
|
+
base_dir = File.expand_path(File.dirname(__FILE__))
|
8
|
+
top_dir = File.expand_path(File.join(base_dir, ".."))
|
9
|
+
$LOAD_PATH.unshift(File.join(top_dir))
|
10
|
+
$LOAD_PATH.unshift(File.join(top_dir, "lib"))
|
11
|
+
$LOAD_PATH.unshift(File.join(top_dir, "test"))
|
12
|
+
|
13
|
+
require "rubygems"
|
14
|
+
require "bundler/setup"
|
15
|
+
|
16
|
+
require "test/unit"
|
17
|
+
require "test/unit/notify"
|
18
|
+
Test::Unit::Priority.enable
|
19
|
+
|
20
|
+
target_adapters = [ENV["ACTIVE_LDAP_TEST_ADAPTER"]]
|
21
|
+
# target_adapters << "ldap"
|
22
|
+
# target_adapters << "net-ldap"
|
23
|
+
# target_adapters << "jndi"
|
24
|
+
target_adapters.each do |adapter|
|
25
|
+
ENV["ACTIVE_LDAP_TEST_ADAPTER"] = adapter
|
26
|
+
puts "using adapter: #{adapter ? adapter : 'default'}"
|
27
|
+
Test::Unit::AutoRunner.run(true, File.dirname($0), ARGV.dup)
|
28
|
+
puts
|
29
|
+
end
|
data/test/test_associations.rb
CHANGED
@@ -411,6 +411,43 @@ EOX
|
|
411
411
|
end
|
412
412
|
end
|
413
413
|
|
414
|
+
def test_has_many_wrap_assign_new_entry
|
415
|
+
make_temporary_user do |user1, |
|
416
|
+
make_temporary_user do |user2, |
|
417
|
+
ensure_delete_group('test_new_group') do |cn|
|
418
|
+
group = @group_class.new(:cn => cn, :gid_number => default_gid)
|
419
|
+
|
420
|
+
assert_equal([], group.members.to_a)
|
421
|
+
assert_equal([], group.member_uid(true))
|
422
|
+
|
423
|
+
group.members = [user1, user2]
|
424
|
+
|
425
|
+
assert group.new_entry?
|
426
|
+
assert_equal([user1.uid, user2.uid].sort, group.members.map {|x| x.uid }.sort)
|
427
|
+
assert_equal([user1.uid, user2.uid].sort, group.member_uid(true).sort)
|
428
|
+
|
429
|
+
group.members = [user2]
|
430
|
+
|
431
|
+
assert group.new_entry?
|
432
|
+
assert_equal([user2.uid], group.members.map {|x| x.uid })
|
433
|
+
assert_equal(user2.uid, group.member_uid)
|
434
|
+
|
435
|
+
group.members << user1
|
436
|
+
|
437
|
+
assert group.new_entry?
|
438
|
+
assert_equal([user1.uid, user2.uid].sort, group.members.map {|x| x.uid }.sort)
|
439
|
+
assert_equal([user1.uid, user2.uid].sort, group.member_uid.sort)
|
440
|
+
|
441
|
+
assert(group.save)
|
442
|
+
|
443
|
+
group = @group_class.find(cn)
|
444
|
+
assert_equal([user1.uid, user2.uid].sort, group.members.map {|x| x.uid }.sort)
|
445
|
+
assert_equal([user1.uid, user2.uid].sort, group.member_uid.sort)
|
446
|
+
end
|
447
|
+
end
|
448
|
+
end
|
449
|
+
end
|
450
|
+
|
414
451
|
def test_has_many_validation
|
415
452
|
group_class = Class.new(ActiveLdap::Base)
|
416
453
|
group_class.ldap_mapping :prefix => "ou=Groups",
|
data/test/test_base.rb
CHANGED
@@ -158,11 +158,11 @@ class TestBase < Test::Unit::TestCase
|
|
158
158
|
_dc_class = dc_class("ou=base")
|
159
159
|
|
160
160
|
root1 = _ou_class.create("root1")
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
161
|
+
_ou_class.create(:ou => "child1", :parent => root1)
|
162
|
+
_ou_class.create(:ou => "child2", :parent => root1)
|
163
|
+
_dc_class.create(:dc => "domain", :o => "domain", :parent => root1)
|
164
|
+
_ou_class.create(:ou => "child3", :parent => root1)
|
165
|
+
_ou_class.create("root2")
|
166
166
|
assert_equal(["base",
|
167
167
|
"root1", "child1", "child2", "domain", "child3",
|
168
168
|
"root2"],
|
@@ -181,11 +181,11 @@ class TestBase < Test::Unit::TestCase
|
|
181
181
|
_dc_class = dc_class("ou=base")
|
182
182
|
|
183
183
|
root1 = _ou_class.create("root1")
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
184
|
+
_ou_class.create(:ou => "child1", :parent => root1)
|
185
|
+
_ou_class.create(:ou => "child2", :parent => root1)
|
186
|
+
_dc_class.create(:dc => "domain", :o => "domain", :parent => root1)
|
187
|
+
_ou_class.create(:ou => "child3", :parent => root1)
|
188
|
+
_ou_class.create("root2")
|
189
189
|
assert_equal(["base",
|
190
190
|
"root1", "child1", "child2", "domain", "child3",
|
191
191
|
"root2"],
|
@@ -201,9 +201,9 @@ class TestBase < Test::Unit::TestCase
|
|
201
201
|
make_ou("base")
|
202
202
|
_ou_class = ou_class("ou=base")
|
203
203
|
root1 = _ou_class.create("root1")
|
204
|
-
|
205
|
-
|
206
|
-
|
204
|
+
_ou_class.create(:ou => "child1", :parent => root1)
|
205
|
+
_ou_class.create(:ou => "child2", :parent => root1)
|
206
|
+
_ou_class.create("root2")
|
207
207
|
assert_equal(["base", "root1", "child1", "child2", "root2"],
|
208
208
|
_ou_class.find(:all).collect(&:ou))
|
209
209
|
_ou_class.delete_all(:base => root1.dn)
|
@@ -221,11 +221,11 @@ class TestBase < Test::Unit::TestCase
|
|
221
221
|
|
222
222
|
root1 = _ou_class.create("root1")
|
223
223
|
child1 = _ou_class.create(:ou => "child1", :parent => root1)
|
224
|
-
|
225
|
-
|
224
|
+
domain_class.create(:dc => "domain1", :parent => child1)
|
225
|
+
_ou_class.create(:ou => "grandchild1", :parent => child1)
|
226
226
|
child2 = _ou_class.create(:ou => "child2", :parent => root1)
|
227
|
-
|
228
|
-
|
227
|
+
domain_class.create(:dc => "domain2", :parent => child2)
|
228
|
+
_ou_class.create("root2")
|
229
229
|
|
230
230
|
entry_class = Class.new(ActiveLdap::Base)
|
231
231
|
entry_class.ldap_mapping :prefix => "ou=base",
|
@@ -583,7 +583,7 @@ class TestBase < Test::Unit::TestCase
|
|
583
583
|
end
|
584
584
|
|
585
585
|
def test_new_with_invalid_argument
|
586
|
-
|
586
|
+
@user_class.new
|
587
587
|
assert_raises(ArgumentError) do
|
588
588
|
@user_class.new(100)
|
589
589
|
end
|
@@ -876,9 +876,10 @@ class TestBase < Test::Unit::TestCase
|
|
876
876
|
end
|
877
877
|
end
|
878
878
|
|
879
|
-
|
880
|
-
|
881
|
-
|
879
|
+
class TestToXML < self
|
880
|
+
def test_root
|
881
|
+
ou = ou_class.new("Sample")
|
882
|
+
assert_equal(<<-EOX, ou.to_xml(:root => "ou"))
|
882
883
|
<ou>
|
883
884
|
<dn>#{ou.dn}</dn>
|
884
885
|
<objectClasses type="array">
|
@@ -890,8 +891,11 @@ class TestBase < Test::Unit::TestCase
|
|
890
891
|
</ous>
|
891
892
|
</ou>
|
892
893
|
EOX
|
894
|
+
end
|
893
895
|
|
894
|
-
|
896
|
+
def test_default
|
897
|
+
ou = ou_class.new("Sample")
|
898
|
+
assert_equal(<<-EOX, ou.to_xml)
|
895
899
|
<anonymous>
|
896
900
|
<dn>#{ou.dn}</dn>
|
897
901
|
<objectClasses type="array">
|
@@ -903,10 +907,12 @@ EOX
|
|
903
907
|
</ous>
|
904
908
|
</anonymous>
|
905
909
|
EOX
|
910
|
+
end
|
906
911
|
|
907
|
-
|
908
|
-
|
909
|
-
|
912
|
+
def test_complex
|
913
|
+
make_temporary_user do |user, password|
|
914
|
+
xml = normalize_attributes_order(user.to_xml(:root => "user"))
|
915
|
+
assert_equal(<<-EOX, xml)
|
910
916
|
<user>
|
911
917
|
<dn>#{user.dn}</dn>
|
912
918
|
<cns type="array">
|
@@ -939,12 +945,13 @@ EOX
|
|
939
945
|
</userPasswords>
|
940
946
|
</user>
|
941
947
|
EOX
|
948
|
+
end
|
942
949
|
end
|
943
|
-
end
|
944
950
|
|
945
|
-
|
946
|
-
|
947
|
-
|
951
|
+
def test_except
|
952
|
+
ou = ou_class.new("Sample")
|
953
|
+
except = [:objectClass]
|
954
|
+
assert_equal(<<-EOX, ou.to_xml(:root => "sample", :except => except))
|
948
955
|
<sample>
|
949
956
|
<dn>#{ou.dn}</dn>
|
950
957
|
<ous type="array">
|
@@ -952,23 +959,53 @@ EOX
|
|
952
959
|
</ous>
|
953
960
|
</sample>
|
954
961
|
EOX
|
962
|
+
end
|
955
963
|
|
956
|
-
|
957
|
-
|
964
|
+
def test_except_dn
|
965
|
+
ou = ou_class.new("Sample")
|
966
|
+
except = [:dn, :object_class]
|
967
|
+
assert_equal(<<-EOX, ou.to_xml(:root => "sample", :except => except))
|
958
968
|
<sample>
|
959
969
|
<ous type="array">
|
960
970
|
<ou>Sample</ou>
|
961
971
|
</ous>
|
962
972
|
</sample>
|
963
973
|
EOX
|
964
|
-
|
974
|
+
end
|
965
975
|
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
976
|
+
def test_only
|
977
|
+
ou = ou_class.new("Sample")
|
978
|
+
only = [:objectClass]
|
979
|
+
assert_equal(<<-EOX, ou.to_xml(:root => "sample", :only => only))
|
980
|
+
<sample>
|
981
|
+
<objectClasses type="array">
|
982
|
+
<objectClass>organizationalUnit</objectClass>
|
983
|
+
<objectClass>top</objectClass>
|
984
|
+
</objectClasses>
|
985
|
+
</sample>
|
986
|
+
EOX
|
987
|
+
end
|
988
|
+
|
989
|
+
def test_only_dn
|
990
|
+
ou = ou_class.new("Sample")
|
991
|
+
only = [:dn, :object_class]
|
992
|
+
assert_equal(<<-EOX, ou.to_xml(:root => "sample", :only => only))
|
993
|
+
<sample>
|
994
|
+
<dn>#{ou.dn}</dn>
|
995
|
+
<objectClasses type="array">
|
996
|
+
<objectClass>organizationalUnit</objectClass>
|
997
|
+
<objectClass>top</objectClass>
|
998
|
+
</objectClasses>
|
999
|
+
</sample>
|
1000
|
+
EOX
|
1001
|
+
end
|
1002
|
+
|
1003
|
+
def test_escape
|
1004
|
+
make_temporary_user do |user, password|
|
1005
|
+
sn = user.sn
|
1006
|
+
user.sn = "<#{sn}>"
|
1007
|
+
except = [:jpeg_photo, :user_certificate]
|
1008
|
+
assert_equal(<<-EOX, user.to_xml(:root => "user", :except => except))
|
972
1009
|
<user>
|
973
1010
|
<dn>#{user.dn}</dn>
|
974
1011
|
<cns type="array">
|
@@ -995,16 +1032,16 @@ EOX
|
|
995
1032
|
</userPasswords>
|
996
1033
|
</user>
|
997
1034
|
EOX
|
1035
|
+
end
|
998
1036
|
end
|
999
|
-
end
|
1000
1037
|
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1038
|
+
def test_type_ldif
|
1039
|
+
make_temporary_user do |user, password|
|
1040
|
+
sn = user.sn
|
1041
|
+
user.sn = "<#{sn}>"
|
1042
|
+
except = [:jpeg_photo, :user_certificate]
|
1043
|
+
options = {:root => "user", :except => except, :type => :ldif}
|
1044
|
+
assert_equal(<<-EOX, user.to_xml(options))
|
1008
1045
|
<user>
|
1009
1046
|
<dn>#{user.dn}</dn>
|
1010
1047
|
<cn>#{user.cn}</cn>
|
@@ -1021,13 +1058,13 @@ EOX
|
|
1021
1058
|
<userPassword>#{user.user_password}</userPassword>
|
1022
1059
|
</user>
|
1023
1060
|
EOX
|
1061
|
+
end
|
1024
1062
|
end
|
1025
|
-
end
|
1026
1063
|
|
1027
|
-
|
1028
|
-
|
1029
|
-
|
1030
|
-
|
1064
|
+
def test_nil
|
1065
|
+
ou = ou_class.new("Sample")
|
1066
|
+
ou.description = [nil]
|
1067
|
+
assert_equal(<<-EOX, ou.to_xml(:root => "sample"))
|
1031
1068
|
<sample>
|
1032
1069
|
<dn>#{ou.dn}</dn>
|
1033
1070
|
<objectClasses type="array">
|
@@ -1039,6 +1076,31 @@ EOX
|
|
1039
1076
|
</ous>
|
1040
1077
|
</sample>
|
1041
1078
|
EOX
|
1079
|
+
end
|
1080
|
+
|
1081
|
+
def test_single_value
|
1082
|
+
make_temporary_user do |user, password|
|
1083
|
+
only = [:dn, :uidNumber]
|
1084
|
+
assert_equal(<<-EOX, user.to_xml(:root => "user", :only => only))
|
1085
|
+
<user>
|
1086
|
+
<dn>#{user.dn}</dn>
|
1087
|
+
<uidNumber>#{user.uid_number}</uidNumber>
|
1088
|
+
</user>
|
1089
|
+
EOX
|
1090
|
+
end
|
1091
|
+
end
|
1092
|
+
|
1093
|
+
def test_single_value_nil
|
1094
|
+
make_temporary_user do |user, password|
|
1095
|
+
only = [:dn, :uidNumber]
|
1096
|
+
user.uid_number = nil
|
1097
|
+
assert_equal(<<-EOX, user.to_xml(:root => "user", :only => only))
|
1098
|
+
<user>
|
1099
|
+
<dn>#{user.dn}</dn>
|
1100
|
+
</user>
|
1101
|
+
EOX
|
1102
|
+
end
|
1103
|
+
end
|
1042
1104
|
end
|
1043
1105
|
|
1044
1106
|
def test_save
|
data/test/test_dirty.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'al-test-utils'
|
2
|
+
|
3
|
+
class TestDirty < Test::Unit::TestCase
|
4
|
+
include AlTestUtils
|
5
|
+
|
6
|
+
priority :must
|
7
|
+
|
8
|
+
priority :normal
|
9
|
+
def test_clean_after_load
|
10
|
+
make_temporary_user do |user, password|
|
11
|
+
attributes = (user.must + user.may).collect(&:name) - ['objectClass']
|
12
|
+
_wrap_assertion do
|
13
|
+
attributes.each do |name|
|
14
|
+
assert_false(user.send("#{name}_changed?"))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_clean_after_reload
|
21
|
+
make_temporary_user do |user, password|
|
22
|
+
attributes = (user.must + user.may).collect(&:name) - ['objectClass']
|
23
|
+
|
24
|
+
user.cn = 'New cn'
|
25
|
+
assert_true(user.cn_changed?)
|
26
|
+
user.reload
|
27
|
+
assert_false(user.cn_changed?)
|
28
|
+
|
29
|
+
_wrap_assertion do
|
30
|
+
attributes.each do |name|
|
31
|
+
assert_false(user.send("#{name}_changed?"))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_setter
|
38
|
+
make_temporary_user do |user, password|
|
39
|
+
attributes = (user.must + user.may).collect(&:name) - ['objectClass', 'cn']
|
40
|
+
user.cn = 'New cn'
|
41
|
+
assert_true(user.cn_changed?)
|
42
|
+
|
43
|
+
_wrap_assertion do
|
44
|
+
(attributes - ['cn']).each do |name|
|
45
|
+
assert_false(user.send("#{name}_changed?"))
|
46
|
+
end
|
47
|
+
|
48
|
+
assert_true(user.cn_changed?)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_save
|
54
|
+
make_temporary_user do |user, password|
|
55
|
+
attributes = (user.must + user.may).collect(&:name) - ['objectClass', 'cn']
|
56
|
+
user.cn = 'New cn'
|
57
|
+
assert_true(user.cn_changed?)
|
58
|
+
user.save
|
59
|
+
assert_false(user.cn_changed?)
|
60
|
+
|
61
|
+
_wrap_assertion do
|
62
|
+
attributes.each do |name|
|
63
|
+
assert_false(user.send("#{name}_changed?"))
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_save!
|
70
|
+
make_temporary_user do |user, password|
|
71
|
+
attributes = (user.must + user.may).collect(&:name) - ['objectClass', 'cn']
|
72
|
+
user.cn = 'New cn'
|
73
|
+
assert_true(user.cn_changed?)
|
74
|
+
user.save!
|
75
|
+
assert_false(user.cn_changed?)
|
76
|
+
|
77
|
+
_wrap_assertion do
|
78
|
+
attributes.each do |name|
|
79
|
+
assert_false(user.send("#{name}_changed?"))
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/test/test_ldif.rb
CHANGED
data/test/test_load.rb
CHANGED
data/test/test_reflection.rb
CHANGED
@@ -50,9 +50,8 @@ class TestReflection < Test::Unit::TestCase
|
|
50
50
|
|
51
51
|
make_temporary_user do |user, password|
|
52
52
|
attributes = user.must.collect(&:name) + user.may.collect(&:name)
|
53
|
-
attributes
|
53
|
+
attributes = (attributes - ["objectClass"]).map(&:to_sym)
|
54
54
|
assert_equal([], attributes - user.methods)
|
55
|
-
assert_equal([], attributes - user.methods(false))
|
56
55
|
|
57
56
|
assert_methods_with_only_required_classes(user, attributes)
|
58
57
|
end
|
@@ -60,17 +59,15 @@ class TestReflection < Test::Unit::TestCase
|
|
60
59
|
make_temporary_user do |user, password|
|
61
60
|
user.remove_class("inetOrgPerson")
|
62
61
|
attributes = user.must.collect(&:name) + user.may.collect(&:name)
|
63
|
-
attributes
|
62
|
+
attributes = (attributes - ["objectClass"]).map(&:to_sym)
|
64
63
|
assert_equal([], attributes - user.methods)
|
65
|
-
assert_equal([], attributes - user.methods(false))
|
66
64
|
|
67
65
|
assert_methods_with_only_required_classes(user, attributes)
|
68
66
|
end
|
69
67
|
|
70
68
|
make_temporary_user do |user, password|
|
71
69
|
attributes = user.must.collect(&:name) + user.may.collect(&:name)
|
72
|
-
attributes
|
73
|
-
attributes = attributes.collect {|x| x.downcase}
|
70
|
+
attributes = attributes.map(&:downcase).map(&:to_sym)
|
74
71
|
assert_not_equal([], attributes - user.methods)
|
75
72
|
assert_not_equal([], attributes - user.methods(false))
|
76
73
|
|
@@ -86,9 +83,8 @@ class TestReflection < Test::Unit::TestCase
|
|
86
83
|
make_temporary_user do |user, password|
|
87
84
|
attributes = user.must.collect(&:name) + user.may.collect(&:name)
|
88
85
|
attributes -= ["objectClass"]
|
89
|
-
attributes = attributes.collect(&:underscore)
|
86
|
+
attributes = attributes.collect(&:underscore).map(&:to_sym)
|
90
87
|
assert_equal([], attributes - user.methods)
|
91
|
-
assert_equal([], attributes - user.methods(false))
|
92
88
|
|
93
89
|
normalize_attributes_list = Proc.new do |*attributes_list|
|
94
90
|
attributes_list.collect do |attrs|
|
@@ -103,9 +99,8 @@ class TestReflection < Test::Unit::TestCase
|
|
103
99
|
user.remove_class("inetOrgPerson")
|
104
100
|
attributes = user.must.collect(&:name) + user.may.collect(&:name)
|
105
101
|
attributes -= ["objectClass"]
|
106
|
-
attributes = attributes.collect(&:underscore)
|
102
|
+
attributes = attributes.collect(&:underscore).map(&:to_sym)
|
107
103
|
assert_equal([], attributes - user.methods)
|
108
|
-
assert_equal([], attributes - user.methods(false))
|
109
104
|
|
110
105
|
normalize_attributes_list = Proc.new do |*attributes_list|
|
111
106
|
attributes_list.collect do |attrs|
|
@@ -136,16 +131,14 @@ class TestReflection < Test::Unit::TestCase
|
|
136
131
|
yield(old_attributes, required_attributes)
|
137
132
|
end
|
138
133
|
|
134
|
+
[old_attributes, required_attributes].map{|a| a.map!(&:to_sym)}
|
135
|
+
|
139
136
|
object.replace_class(object.class.required_classes)
|
140
137
|
|
141
138
|
assert_equal([],
|
142
139
|
old_attributes -
|
143
140
|
(attributes - object.methods - required_attributes) -
|
144
141
|
required_attributes)
|
145
|
-
assert_equal([],
|
146
|
-
old_attributes -
|
147
|
-
(attributes - object.methods(false) - required_attributes) -
|
148
|
-
required_attributes)
|
149
142
|
end
|
150
143
|
|
151
144
|
def assert_respond_to(object, name)
|