ruby-activeldap 0.8.2 → 0.8.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.
Files changed (83) hide show
  1. data/test/test_adapter.rb +17 -0
  2. data/test/test_associations.rb +19 -0
  3. data/test/test_attributes.rb +2 -1
  4. data/test/test_base.rb +28 -1
  5. data/test/test_base_per_instance.rb +2 -1
  6. data/test/test_callback.rb +2 -2
  7. data/test/test_connection.rb +2 -1
  8. data/test/test_connection_per_dn.rb +81 -0
  9. data/test/test_dn.rb +3 -2
  10. data/test/test_find.rb +35 -1
  11. data/test/test_object_class.rb +12 -1
  12. data/test/test_reflection.rb +16 -10
  13. data/test/test_schema.rb +141 -2
  14. data/test/test_user.rb +14 -4
  15. metadata +7 -104
  16. data/CHANGES +0 -397
  17. data/COPYING +0 -340
  18. data/LICENSE +0 -58
  19. data/Manifest.txt +0 -99
  20. data/README +0 -85
  21. data/Rakefile +0 -70
  22. data/TODO +0 -23
  23. data/benchmark/bench-al.rb +0 -152
  24. data/examples/config.yaml.example +0 -5
  25. data/examples/example.der +0 -0
  26. data/examples/example.jpg +0 -0
  27. data/examples/groupadd +0 -41
  28. data/examples/groupdel +0 -35
  29. data/examples/groupls +0 -49
  30. data/examples/groupmod +0 -42
  31. data/examples/lpasswd +0 -55
  32. data/examples/objects/group.rb +0 -13
  33. data/examples/objects/ou.rb +0 -4
  34. data/examples/objects/user.rb +0 -20
  35. data/examples/ouadd +0 -38
  36. data/examples/useradd +0 -45
  37. data/examples/useradd-binary +0 -50
  38. data/examples/userdel +0 -34
  39. data/examples/userls +0 -50
  40. data/examples/usermod +0 -42
  41. data/examples/usermod-binary-add +0 -47
  42. data/examples/usermod-binary-add-time +0 -51
  43. data/examples/usermod-binary-del +0 -48
  44. data/examples/usermod-lang-add +0 -43
  45. data/lib/active_ldap.rb +0 -964
  46. data/lib/active_ldap/adapter/base.rb +0 -461
  47. data/lib/active_ldap/adapter/ldap.rb +0 -232
  48. data/lib/active_ldap/adapter/ldap_ext.rb +0 -69
  49. data/lib/active_ldap/adapter/net_ldap.rb +0 -288
  50. data/lib/active_ldap/adapter/net_ldap_ext.rb +0 -29
  51. data/lib/active_ldap/association/belongs_to.rb +0 -40
  52. data/lib/active_ldap/association/belongs_to_many.rb +0 -39
  53. data/lib/active_ldap/association/collection.rb +0 -80
  54. data/lib/active_ldap/association/has_many.rb +0 -40
  55. data/lib/active_ldap/association/has_many_wrap.rb +0 -55
  56. data/lib/active_ldap/association/proxy.rb +0 -89
  57. data/lib/active_ldap/associations.rb +0 -162
  58. data/lib/active_ldap/attributes.rb +0 -203
  59. data/lib/active_ldap/base.rb +0 -1510
  60. data/lib/active_ldap/callbacks.rb +0 -19
  61. data/lib/active_ldap/command.rb +0 -46
  62. data/lib/active_ldap/configuration.rb +0 -106
  63. data/lib/active_ldap/connection.rb +0 -142
  64. data/lib/active_ldap/distinguished_name.rb +0 -246
  65. data/lib/active_ldap/ldap_error.rb +0 -74
  66. data/lib/active_ldap/object_class.rb +0 -74
  67. data/lib/active_ldap/schema.rb +0 -299
  68. data/lib/active_ldap/timeout.rb +0 -75
  69. data/lib/active_ldap/timeout_stub.rb +0 -17
  70. data/lib/active_ldap/user_password.rb +0 -92
  71. data/lib/active_ldap/validations.rb +0 -76
  72. data/rails/plugin/active_ldap/README +0 -54
  73. data/rails/plugin/active_ldap/generators/scaffold_al/scaffold_al_generator.rb +0 -7
  74. data/rails/plugin/active_ldap/generators/scaffold_al/templates/ldap.yml +0 -21
  75. data/rails/plugin/active_ldap/init.rb +0 -12
  76. data/test/TODO +0 -2
  77. data/test/al-test-utils.rb +0 -381
  78. data/test/command.rb +0 -62
  79. data/test/config.yaml.sample +0 -6
  80. data/test/run-test.rb +0 -29
  81. data/test/test-unit-ext.rb +0 -2
  82. data/test/test-unit-ext/always-show-result.rb +0 -28
  83. data/test/test-unit-ext/priority.rb +0 -163
@@ -1,29 +0,0 @@
1
- require_library_or_gem 'net/ldap'
2
-
3
- module Net
4
- class LDAP
5
- class Entry
6
- alias initialize_without_original_attribute_names initialize
7
- def initialize(*args)
8
- @original_attribute_names = []
9
- initialize_without_original_attribute_names(*args)
10
- end
11
-
12
- alias aset_without_original_attribute_names []=
13
- def []=(name, value)
14
- @original_attribute_names << name
15
- aset_without_original_attribute_names(name, value)
16
- end
17
-
18
- def original_attribute_names
19
- @original_attribute_names.compact.uniq
20
- end
21
-
22
- def each_attribute
23
- attribute_names.sort_by {|name| name.to_s}.each do |name|
24
- yield name, self[name]
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,40 +0,0 @@
1
- require 'active_ldap/association/proxy'
2
-
3
- module ActiveLdap
4
- module Association
5
- class BelongsTo < Proxy
6
- def replace(entry)
7
- if entry.nil?
8
- @target = @owner[@options[:foreign_key_name]] = nil
9
- else
10
- @target = (Proxy === entry ? entry.target : entry)
11
- unless entry.new_entry?
12
- @owner[@options[:foreign_key_name]] = entry[primary_key]
13
- end
14
- @updated = true
15
- end
16
-
17
- loaded
18
- entry
19
- end
20
-
21
- def updated?
22
- @updated
23
- end
24
-
25
- private
26
- def have_foreign_key?
27
- not @owner[@options[:foreign_key_name]].nil?
28
- end
29
-
30
- def find_target
31
- value = @owner[@options[:foreign_key_name]]
32
- raise EntryNotFound if value.nil?
33
- filter = {primary_key => value}
34
- result = foreign_class.find(:all, :filter => filter, :limit => 1)
35
- raise EntryNotFound if result.empty?
36
- result.first
37
- end
38
- end
39
- end
40
- end
@@ -1,39 +0,0 @@
1
- require 'active_ldap/association/collection'
2
-
3
- module ActiveLdap
4
- module Association
5
- class BelongsToMany < Collection
6
- private
7
- def insert_entry(entry)
8
- old_value = entry[@options[:many], true]
9
- new_value = old_value + @owner[@options[:foreign_key_name], true]
10
- new_value = new_value.uniq.sort
11
- if old_value != new_value
12
- entry[@options[:many]] = new_value
13
- entry.save
14
- end
15
- end
16
-
17
- def delete_entries(entries)
18
- entries.each do |entry|
19
- old_value = entry[@options[:many], true]
20
- new_value = old_value - @owner[@options[:foreign_key_name], true]
21
- new_value = new_value.uniq.sort
22
- if old_value != new_value
23
- entry[@options[:many]] = new_value
24
- entry.save
25
- end
26
- end
27
- end
28
-
29
- def find_target
30
- key = @options[:many]
31
- values = @owner[@options[:foreign_key_name], true].compact
32
- components = values.collect do |value|
33
- [key, value]
34
- end
35
- foreign_class.find(:all, :filter => [:or, *components])
36
- end
37
- end
38
- end
39
- end
@@ -1,80 +0,0 @@
1
- require 'active_ldap/association/proxy'
2
-
3
- module ActiveLdap
4
- module Association
5
- class Collection < Proxy
6
- include Enumerable
7
-
8
- def to_ary
9
- load_target
10
- @target.to_ary
11
- end
12
-
13
- def reset
14
- @target = []
15
- @loaded = false
16
- end
17
-
18
- def <<(*entries)
19
- add_entries(*entries)
20
- end
21
- alias_method(:push, :<<)
22
- alias_method(:concat, :<<)
23
-
24
- def each(&block)
25
- to_ary.each(&block)
26
- end
27
-
28
- def delete(*entries)
29
- entries = flatten_deeper(entries).reject do |entry|
30
- @target.delete(entry) if entry.new_entry?
31
- entry.new_entry?
32
- end
33
- return if entries.empty?
34
-
35
- delete_entries(entries)
36
- entries.each do |entry|
37
- @target.delete(entry)
38
- end
39
- end
40
-
41
- def replace(others)
42
- load_target
43
- deleted_entries = @target - others
44
- added_entries = others - @target
45
-
46
- delete(deleted_entries)
47
- concat(added_entries)
48
- end
49
-
50
- def exists?
51
- load_target
52
- not @target.empty?
53
- end
54
-
55
- private
56
- def flatten_deeper(array)
57
- array.collect do |element|
58
- element.respond_to?(:flatten) ? element.flatten : element
59
- end.flatten
60
- end
61
-
62
- def insert_entry(entry)
63
- entry[@options[:foreign_key_name]] = @owner[@options[:local_key_name]]
64
- entry.save
65
- end
66
-
67
- def add_entries(*entries)
68
- result = true
69
- load_target
70
-
71
- flatten_deeper(entries).each do |entry|
72
- result &&= insert_entry(entry) unless @owner.new_entry?
73
- @target << entry
74
- end
75
-
76
- result && self
77
- end
78
- end
79
- end
80
- end
@@ -1,40 +0,0 @@
1
- require 'active_ldap/association/collection'
2
-
3
- module ActiveLdap
4
- module Association
5
- class HasMany < Collection
6
- private
7
- def insert_entry(entry)
8
- entry[primary_key] = @owner[@options[:foreign_key_name]]
9
- entry.save
10
- end
11
-
12
- def find_target
13
- foreign_base_key = primary_key
14
- components = @owner[@options[:foreign_key_name], true].collect do |value|
15
- key = val = nil
16
- if foreign_base_key == "dn"
17
- key, val = value.split(",")[0].split("=") unless value.empty?
18
- else
19
- key, val = foreign_base_key, value
20
- end
21
- [key, val]
22
- end.reject do |key, val|
23
- key.nil? or val.nil?
24
- end
25
- foreign_class.find(:all, :filter => [:or, *components])
26
- end
27
-
28
- def delete_entries(entries)
29
- key = primary_key
30
- components = @owner[@options[:foreign_key_name], true].reject do |value|
31
- value.nil?
32
- end
33
- filter = [:and,
34
- [:and, {key => components}],
35
- [:or, {foreign_class.dn_attribute => entries.collect(&:id)}]]
36
- foreign_class.update_all({key => []}, filter)
37
- end
38
- end
39
- end
40
- end
@@ -1,55 +0,0 @@
1
- require 'active_ldap/association/collection'
2
-
3
- module ActiveLdap
4
- module Association
5
- class HasManyWrap < Collection
6
- private
7
- def insert_entry(entry)
8
- old_value = @owner[@options[:wrap], true]
9
- new_value = (old_value + entry[primary_key, true]).uniq.sort
10
- if old_value != new_value
11
- @owner[@options[:wrap]] = new_value
12
- @owner.save
13
- end
14
- end
15
-
16
- def delete_entries(entries)
17
- old_value = @owner[@options[:wrap], true]
18
- new_value = old_value - entries.collect {|entry| entry[primary_key]}
19
- new_value = new_value.uniq.sort
20
- if old_value != new_value
21
- @owner[@options[:wrap]] = new_value
22
- @owner.save
23
- end
24
- end
25
-
26
- def find_target
27
- foreign_base_key = primary_key
28
- requested_targets = @owner[@options[:wrap], true]
29
-
30
- components = requested_targets.collect do |value|
31
- key = val = nil
32
- if foreign_base_key == "dn"
33
- key, val = value.split(",")[0].split("=") unless value.empty?
34
- else
35
- key, val = foreign_base_key, value
36
- end
37
- [key, val]
38
- end.reject do |key, val|
39
- key.nil? or val.nil?
40
- end
41
- return [] if components.empty?
42
-
43
- klass = foreign_class
44
- found_targets = {}
45
- klass.find(:all, :filter => [:or, *components]).each do |target|
46
- found_targets[target.send(foreign_base_key)] ||= target
47
- end
48
-
49
- requested_targets.collect do |name|
50
- found_targets[name] || klass.new(name)
51
- end
52
- end
53
- end
54
- end
55
- end
@@ -1,89 +0,0 @@
1
- module ActiveLdap
2
- module Association
3
- class Proxy
4
- alias_method :proxy_respond_to?, :respond_to?
5
- alias_method :proxy_extend, :extend
6
-
7
- def initialize(owner, options)
8
- @owner = owner
9
- @options = options
10
- extend(options[:extend]) if options[:extend]
11
- reset
12
- end
13
-
14
- def respond_to?(symbol, include_priv=false)
15
- proxy_respond_to?(symbol, include_priv) or
16
- (load_target && @target.respond_to?(symbol, include_priv))
17
- end
18
-
19
- def ===(other)
20
- load_target and other === @target
21
- end
22
-
23
- def reset
24
- @target = nil
25
- @loaded = false
26
- end
27
-
28
- def reload
29
- reset
30
- load_target
31
- end
32
-
33
- def loaded?
34
- @loaded
35
- end
36
-
37
- def loaded
38
- @loaded = true
39
- end
40
-
41
- def target
42
- @target
43
- end
44
-
45
- def target=(target)
46
- @target = target
47
- loaded
48
- end
49
-
50
- def exists?
51
- load_target
52
- not @target.nil?
53
- end
54
-
55
- private
56
- def method_missing(method, *args, &block)
57
- load_target
58
- @target.send(method, *args, &block)
59
- end
60
-
61
- def foreign_class
62
- klass = @owner.class.associated_class(@options[:association_id])
63
- klass = @owner.class.module_eval(klass) if klass.is_a?(String)
64
- klass
65
- end
66
-
67
- def have_foreign_key?
68
- false
69
- end
70
-
71
- def primary_key
72
- @options[:primary_key_name] || foreign_class.dn_attribute
73
- end
74
-
75
- def load_target
76
- if !@owner.new_entry? or have_foreign_key?
77
- begin
78
- @target = find_target unless loaded?
79
- rescue EntryNotFound
80
- reset
81
- end
82
- end
83
-
84
- loaded if target
85
- target
86
- end
87
- end
88
- end
89
- end
@@ -1,162 +0,0 @@
1
- require 'active_ldap/association/belongs_to'
2
- require 'active_ldap/association/belongs_to_many'
3
- require 'active_ldap/association/has_many'
4
- require 'active_ldap/association/has_many_wrap'
5
-
6
- module ActiveLdap
7
- # Associations
8
- #
9
- # Associations provides the class methods needed for
10
- # the extension classes to create methods using
11
- # belongs_to and has_many
12
- module Associations
13
- def self.append_features(base)
14
- super
15
- base.extend(ClassMethods)
16
- end
17
-
18
- module ClassMethods
19
- def set_associated_class(name, klass)
20
- @associated_classes ||= {}
21
- @associated_classes[name.to_s] = klass
22
- end
23
-
24
- def associated_class(name)
25
- @associated_classes[name.to_s]
26
- end
27
-
28
- # belongs_to
29
- #
30
- # This defines a method for an extension class map its DN key
31
- # attribute value on to multiple items which reference it by
32
- # |:foreign_key| in the other LDAP entry covered by class |:class_name|.
33
- #
34
- # Example:
35
- # belongs_to :groups, :class_name => "Group",
36
- # :many => "memberUid" # Group#memberUid
37
- # # :foreign_key => "uid" # User#uid
38
- # # dn attribute value is used by default
39
- # belongs_to :primary_group, :class_name => "Group",
40
- # :foreign_key => "gidNumber", # User#gidNumber
41
- # :primary_key => "gidNumber" # Group#gidNumber
42
- #
43
- def belongs_to(association_id, options={})
44
- validate_belongs_to_options(options)
45
- klass = options[:class] || Inflector.classify(association_id)
46
- foreign_key = options[:foreign_key]
47
- primary_key = options[:primary_key]
48
- many = options[:many]
49
- set_associated_class(association_id, klass)
50
-
51
- opts = {
52
- :association_id => association_id,
53
- :foreign_key_name => foreign_key,
54
- :primary_key_name => primary_key,
55
- :many => many,
56
- :extend => options[:extend],
57
- }
58
- if opts[:many]
59
- association_class = Association::BelongsToMany
60
- opts[:foreign_key_name] ||= dn_attribute
61
- else
62
- association_class = Association::BelongsTo
63
- opts[:foreign_key_name] ||= "#{association_id}_id"
64
-
65
- before_save(<<-EOC)
66
- if defined?(@#{association_id})
67
- association = @#{association_id}
68
- if association and association.updated?
69
- self[association.__send__(:primary_key)] =
70
- association[#{opts[:foreign_key_name].dump}]
71
- end
72
- end
73
- EOC
74
- end
75
-
76
- association_accessor(association_id) do |target|
77
- association_class.new(target, opts)
78
- end
79
- end
80
-
81
-
82
- # has_many
83
- #
84
- # This defines a method for an extension class expand an
85
- # existing multi-element attribute into ActiveLdap objects.
86
- # This discards any calls which result in entries that
87
- # don't exist in LDAP!
88
- #
89
- # Example:
90
- # has_many :primary_members, :class_name => "User",
91
- # :primary_key => "gidNumber", # User#gidNumber
92
- # :foreign_key => "gidNumber" # Group#gidNumber
93
- # has_many :members, :class_name => "User",
94
- # :wrap => "memberUid" # Group#memberUid
95
- def has_many(association_id, options = {})
96
- validate_has_many_options(options)
97
- klass = options[:class] || Inflector.classify(association_id)
98
- foreign_key = options[:foreign_key] || association_id.to_s + "_id"
99
- primary_key = options[:primary_key]
100
- set_associated_class(association_id, klass)
101
-
102
- opts = {
103
- :association_id => association_id,
104
- :foreign_key_name => foreign_key,
105
- :primary_key_name => primary_key,
106
- :wrap => options[:wrap],
107
- :extend => options[:extend],
108
- }
109
- if opts[:wrap]
110
- association_class = Association::HasManyWrap
111
- else
112
- association_class = Association::HasMany
113
- end
114
-
115
- association_accessor(association_id) do |target|
116
- association_class.new(target, opts)
117
- end
118
- end
119
-
120
- private
121
- def association_accessor(name, &make_association)
122
- define_method("__make_#{name}") do
123
- make_association.call(self)
124
- end
125
- association_reader(name, &make_association)
126
- association_writer(name, &make_association)
127
- end
128
-
129
- def association_reader(name, &make_association)
130
- class_eval(<<-EOM, __FILE__, __LINE__ + 1)
131
- def #{name}
132
- @#{name} ||= __make_#{name}
133
- end
134
- EOM
135
- end
136
-
137
- def association_writer(name, &make_association)
138
- class_eval(<<-EOM, __FILE__, __LINE__ + 1)
139
- def #{name}=(new_value)
140
- association = defined?(@#{name}) ? @#{name} : nil
141
- association ||= __make_#{name}
142
- association.replace(new_value)
143
- @#{name} = new_value.nil? ? nil : association
144
- @#{name}
145
- end
146
- EOM
147
- end
148
-
149
- VALID_BELONGS_TO_OPTIONS = [:class, :foreign_key, :primary_key, :many,
150
- :extend]
151
- def validate_belongs_to_options(options)
152
- options.assert_valid_keys(VALID_BELONGS_TO_OPTIONS)
153
- end
154
-
155
- VALID_HAS_MANY_OPTIONS = [:class, :foreign_key, :primary_key, :wrap,
156
- :extend]
157
- def validate_has_many_options(options)
158
- options.assert_valid_keys(VALID_HAS_MANY_OPTIONS)
159
- end
160
- end
161
- end
162
- end