dm-ldap-adapter 0.4.3 → 0.4.4

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.
@@ -28,17 +28,27 @@ module Ldap
28
28
  end
29
29
  logger.info("using #{@facade}")
30
30
  @ldaps = { }
31
- auth = {
32
- :method => :simple,
33
- :username => options[:bind_name],
34
- :password => options[:password]
35
- }
36
31
  @config = {
37
32
  :host => options[:host],
38
33
  :port => options[:port].to_i,
39
- :auth => auth,
40
34
  :base => options[:base]
41
35
  }
36
+
37
+ if not options[:bind_name].nil? then
38
+ @config.update({
39
+ :auth => {
40
+ :method => :simple,
41
+ :username => options[:bind_name],
42
+ :password => options[:password]
43
+ }
44
+ })
45
+ end
46
+
47
+ if not options[:adapter_options].nil? then
48
+ options[:adapter_options].each do |k,v|
49
+ @config[k.to_sym] = v
50
+ end
51
+ end
42
52
  end
43
53
 
44
54
  # puts a LdapFacade into the current thread and executes the
@@ -178,7 +188,7 @@ module DataMapper
178
188
  end
179
189
 
180
190
  def update(attributes, collection)
181
- collection.each do |resource|
191
+ size = collection.each do |resource|
182
192
  #puts "update"
183
193
  #p resource
184
194
  update_resource(resource, attributes)
@@ -1 +1,2 @@
1
- require 'adapter/ldap-adapter'
1
+ require 'slf4r'
2
+ require 'adapters/ldap_adapter'
@@ -1,4 +1,5 @@
1
1
  require 'net/ldap'
2
+ require 'slf4r'
2
3
  require 'ldap/conditions_2_filter'
3
4
 
4
5
  module Ldap
data/lib/ldap_resource.rb CHANGED
@@ -4,7 +4,15 @@ require 'ldap/array'
4
4
 
5
5
  module DataMapper
6
6
  module Model
7
-
7
+
8
+ if DataMapper::VERSION =~ /^1.[0-1]/
9
+ Immutable = Resource::State::Immutable
10
+ Clean = Resource::State::Clean
11
+ else
12
+ Immutable = Resource::PersistenceState::Immutable
13
+ Clean = Resource::PersistenceState::Clean
14
+ end
15
+
8
16
  def load(records, query)
9
17
  repository = query.repository
10
18
  repository_name = repository.name
@@ -67,13 +75,17 @@ module DataMapper
67
75
  resource.instance_variable_set(:@_repository, repository)
68
76
 
69
77
  if identity_map
70
- resource.persisted_state = Resource::State::Clean.new(resource) unless resource.persisted_state?
71
-
78
+ if DataMapper::VERSION =~ /^1.[0-1]/
79
+ resource.persisted_state = Clean.new(resource) unless resource.persisted_state?
80
+ else
81
+ resource.persistence_state = Clean.new(resource) unless resource.persistence_state?
82
+ end
83
+
72
84
  # defer setting the IdentityMap so second level caches can
73
85
  # record the state of the resource after loaded
74
86
  identity_map[key_values] = resource
75
87
  else
76
- resource.persisted_state = Resource::State::Immutable.new(resource)
88
+ resource.persisted_state = Immutable.new(resource)
77
89
  end
78
90
 
79
91
  resource
@@ -1,4 +1,3 @@
1
- $LOAD_PATH << File.dirname(__FILE__)
2
1
  require 'spec_helper'
3
2
 
4
3
  describe DataMapper::Adapters::LdapAdapter do
@@ -1,4 +1,3 @@
1
- $LOAD_PATH << File.dirname(__FILE__)
2
1
  require 'spec_helper'
3
2
 
4
3
  describe DataMapper.repository(:ldap).adapter do
@@ -1,4 +1,3 @@
1
- $LOAD_PATH << File.dirname(__FILE__)
2
1
  require 'spec_helper'
3
2
  require 'ldap/transactions'
4
3
 
@@ -50,6 +49,15 @@ describe DataMapper::Adapters::LdapAdapter do
50
49
  end
51
50
  end
52
51
 
52
+ it 'should return false if save fails' do
53
+ DataMapper.repository(:ldap) do
54
+ u = User.first(:login.not => "black")
55
+ u.age = 'some error'
56
+ u.save.should be_false
57
+ #p User.all
58
+ end
59
+ end
60
+
53
61
  it 'should be able to get all the objects' do
54
62
  DataMapper.repository(:ldap) do
55
63
  User.all(:login.like => "b%").should == [@user1, @user2, @user3]
@@ -1,11 +1,6 @@
1
- $LOAD_PATH << Pathname(__FILE__).dirname.parent.expand_path + 'lib'
2
-
3
- require 'ldap/array'
4
- require 'dm-migrations'
5
- require 'dm-sqlite-adapter'
1
+ require 'spec_helper'
6
2
 
7
3
  class A
8
-
9
4
  include DataMapper::Resource
10
5
 
11
6
  property :id, Serial
@@ -1,4 +1,3 @@
1
- $LOAD_PATH << File.dirname(__FILE__)
2
1
  require 'spec_helper'
3
2
 
4
3
  class Order
@@ -1,32 +1,5 @@
1
- $LOAD_PATH << File.dirname(__FILE__)
2
1
  require 'spec_helper'
3
2
 
4
- class TestContact
5
- include DataMapper::Resource
6
-
7
- property :id, Serial, :field => "uidNumber"
8
- property :login, String, :field => "uid", :unique_index => true
9
- property :hashed_password, String, :field => "userPassword", :lazy => true
10
- property :name, String, :field => "cn"
11
- property :mail, ::Ldap::LdapArray
12
-
13
- dn_prefix { |contact| "uid=#{contact.login}"}
14
-
15
- treebase "ou=people"
16
-
17
- ldap_properties do |contact|
18
- properties = { :objectclass => ["inetOrgPerson", "posixAccount", "shadowAccount"], :loginshell => "/bin/bash", :gidnumber => "10000" }
19
- properties[:sn] = "#{contact.name.sub(/.*\ /, "")}"
20
- properties[:givenname] = "#{contact.name.sub(/\ .*/, "")}"
21
- properties[:homedirectory] = "/home/#{contact.login}"
22
- properties
23
- end
24
-
25
- def password=(password)
26
- attribute_set(:hashed_password, Ldap::Digest.ssha(password, "--#{Time.now}--#{login}--")) if password
27
- end
28
- end
29
-
30
3
  describe DataMapper.repository(:ldap).adapter.class do
31
4
 
32
5
  describe 'LdapArray' do
data/spec/sorting_spec.rb CHANGED
@@ -1,4 +1,3 @@
1
- $LOAD_PATH << File.dirname(__FILE__)
2
1
  require 'spec_helper'
3
2
 
4
3
  describe DataMapper.repository(:ldap).adapter do
@@ -58,4 +57,4 @@ describe DataMapper.repository(:ldap).adapter do
58
57
  end
59
58
  end
60
59
  end
61
- end
60
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,19 +1,18 @@
1
- require 'rubygems'
2
-
3
- require 'slf4r/ruby_logger'
4
- Slf4r::LoggerFacade4RubyLogger.level = :warn
1
+ #Require main environment
2
+ require 'dm-ldap-adapter'
5
3
 
4
+ #Require developer depdencies
6
5
  require 'dm-sqlite-adapter'
7
6
  require 'dm-migrations'
8
- require 'dm-transactions'
9
- require 'pathname'
10
- $LOAD_PATH << Pathname(__FILE__).dirname.parent.expand_path + 'lib'
11
7
 
12
8
  print "datamapper version:"
13
9
  puts DataMapper::VERSION
14
10
 
11
+ #Logging needs to be cleaned up...
12
+ require 'slf4r/ruby_logger'
13
+ Slf4r::LoggerFacade4RubyLogger.level = :warn
14
+
15
15
  require 'ldap_resource'
16
- require 'adapters/ldap_adapter'
17
16
 
18
17
  DataMapper.setup(:default, 'sqlite3::memory:')
19
18
  DataMapper.setup(:ldap, {
@@ -28,136 +27,10 @@ DataMapper.setup(:ldap, {
28
27
 
29
28
  puts "using facade #{(ENV['FACADE'] || :net_ldap).to_sym}"
30
29
 
31
- module DataMapper
32
- module Resource
33
- class State
34
-
35
- # a persisted/deleted resource
36
- class Deleted < Persisted
37
- def set(subject, value)
38
- warn 'Deleted resource cannot be modified ' + subject.inspect + ' ' + value.to_s + " " + @resource.inspect
39
- super
40
- end
41
- end
42
- end
43
- end
44
- end
45
- class User
46
- include DataMapper::Resource
47
- property :id, Serial, :field => "uidnumber"
48
- property :login, String, :field => "uid", :unique_index => true
49
- property :hashed_password, String, :field => "userPassword", :writer => :private
50
- property :name, String, :field => "cn"
51
- property :mail, String
52
- property :age, Integer, :field => "postalCode"
53
- property :alive, Boolean, :field => "gecos"
54
-
55
- has n, :roles
56
-
57
- has n, :group_users
58
-
59
- def groups
60
- groups = GroupUser.all(:user_id => login).collect{ |gu| gu.group }
61
-
62
- def groups.user=(user)
63
- @user = user
64
- end
65
-
66
- groups.user = self
67
-
68
- def groups.<<(group)
69
- unless member? group
70
- GroupUser.create(:user_id => @user.login, :group_id => group.id)
71
- super
72
- end
73
- self
74
- end
75
-
76
- def groups.delete(group)
77
- gu = GroupUser.first(:user_id => @user.login, :group_id => group.id)
78
- if gu
79
- gu.destroy
80
- super
81
- end
82
- end
83
-
84
- groups
85
- end
86
-
87
- dn_prefix { |user| "uid=#{user.login}"}
88
-
89
- treebase "ou=people"
90
-
91
- ldap_properties do |user|
92
- properties = { :objectclass => ["inetOrgPerson", "posixAccount", "shadowAccount"], :loginshell => "/bin/bash", :gidnumber => "10000" }
93
- properties[:sn] = "#{user.name.sub(/.*\ /, "")}"
94
- properties[:givenname] = "#{user.name.sub(/\ .*/, "")}"
95
- properties[:homedirectory] = "/home/#{user.login}"
96
- properties
97
- end
98
-
99
- def password=(password)
100
- salt = "--#{Time.now}--#{login}--"
101
- attribute_set(:hashed_password, Ldap::Digest.ssha(password, salt)) if password
102
- end
103
- end
30
+ # Requires supporting ruby files with custom matchers and macros, etc,
31
+ # in spec/support/ and its subdirectories.
32
+ Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each {|f| require f}
104
33
 
105
- class Role
106
- include DataMapper::Resource
107
- property :id, Serial, :field => "gidNumber"
108
- property :name, String, :field => "cn"
109
-
110
- dn_prefix { |role| "cn=#{role.name}" }
111
-
112
- treebase "ou=groups"
113
-
114
- ldap_properties {{:objectclass => "posixGroup"}}
115
-
116
- belongs_to :user
117
- end
118
-
119
- class Group
120
- include DataMapper::Resource
121
- property :id, Serial, :field => "gidNumber"
122
- property :name, String, :field => "cn"
123
-
124
- dn_prefix { |group| "cn=#{group.name}" }
125
-
126
- treebase "ou=groups"
127
-
128
- ldap_properties {{:objectclass => "posixGroup"}}
129
- end
130
-
131
- class GroupUser
132
- include DataMapper::Resource
133
-
134
- dn_prefix { |group_user| "cn=#{group_user.group.name}" }
135
-
136
- treebase "ou=groups"
137
-
138
- multivalue_field :memberUid
139
-
140
- ldap_properties do |group_user|
141
- {:cn=>"#{group_user.group.name}", :objectclass => "posixGroup"}
142
- end
143
-
144
- property :user_id, String, :key => true, :field => "memberUid"
145
- property :group_id, Integer, :key => true, :field => "gidNumber"
146
-
147
- def group
148
- Group.get!(group_id)
149
- end
150
-
151
- def group=(group)
152
- group_id = group.id
153
- end
34
+ DataMapper.auto_migrate!(:default)
154
35
 
155
- def user
156
- User.get!(user_id)
157
- end
158
36
 
159
- def user=(user)
160
- user_id = user.id
161
- end
162
- end
163
- DataMapper.auto_migrate!(:default)
@@ -0,0 +1,11 @@
1
+ class Group
2
+ include DataMapper::Resource
3
+ property :id, Serial, :field => "gidNumber"
4
+ property :name, String, :field => "cn"
5
+
6
+ dn_prefix { |group| "cn=#{group.name}" }
7
+
8
+ treebase "ou=groups"
9
+
10
+ ldap_properties {{:objectclass => "posixGroup"}}
11
+ end
@@ -0,0 +1,32 @@
1
+ class GroupUser
2
+ include DataMapper::Resource
3
+
4
+ dn_prefix { |group_user| "cn=#{group_user.group.name}" }
5
+
6
+ treebase "ou=groups"
7
+
8
+ multivalue_field :memberUid
9
+
10
+ ldap_properties do |group_user|
11
+ {:cn=>"#{group_user.group.name}", :objectclass => "posixGroup"}
12
+ end
13
+
14
+ property :user_id, String, :key => true, :field => "memberUid"
15
+ property :group_id, Integer, :key => true, :field => "gidNumber"
16
+
17
+ def group
18
+ Group.get!(group_id)
19
+ end
20
+
21
+ def group=(group)
22
+ group_id = group.id
23
+ end
24
+
25
+ def user
26
+ User.get!(user_id)
27
+ end
28
+
29
+ def user=(user)
30
+ user_id = user.id
31
+ end
32
+ end
@@ -0,0 +1,13 @@
1
+ class Role
2
+ include DataMapper::Resource
3
+ property :id, Serial, :field => "gidNumber"
4
+ property :name, String, :field => "cn"
5
+
6
+ dn_prefix { |role| "cn=#{role.name}" }
7
+
8
+ treebase "ou=groups"
9
+
10
+ ldap_properties {{:objectclass => "posixGroup"}}
11
+
12
+ belongs_to :user
13
+ end
@@ -0,0 +1,25 @@
1
+ class TestContact
2
+ include DataMapper::Resource
3
+
4
+ property :id, Serial, :field => "uidNumber"
5
+ property :login, String, :field => "uid", :unique_index => true
6
+ property :hashed_password, String, :field => "userPassword", :lazy => true
7
+ property :name, String, :field => "cn"
8
+ property :mail, ::Ldap::LdapArray
9
+
10
+ dn_prefix { |contact| "uid=#{contact.login}"}
11
+
12
+ treebase "ou=people"
13
+
14
+ ldap_properties do |contact|
15
+ properties = { :objectclass => ["inetOrgPerson", "posixAccount", "shadowAccount"], :loginshell => "/bin/bash", :gidnumber => "10000" }
16
+ properties[:sn] = "#{contact.name.sub(/.*\ /, "")}"
17
+ properties[:givenname] = "#{contact.name.sub(/\ .*/, "")}"
18
+ properties[:homedirectory] = "/home/#{contact.login}"
19
+ properties
20
+ end
21
+
22
+ def password=(password)
23
+ attribute_set(:hashed_password, Ldap::Digest.ssha(password, "--#{Time.now}--#{login}--")) if password
24
+ end
25
+ end
@@ -0,0 +1,59 @@
1
+ class User
2
+ include DataMapper::Resource
3
+ property :id, Serial, :field => "uidnumber"
4
+ property :login, String, :field => "uid", :unique_index => true
5
+ property :hashed_password, String, :field => "userPassword", :writer => :private
6
+ property :name, String, :field => "cn"
7
+ property :mail, String
8
+ property :age, Integer, :field => "postalCode"
9
+ property :alive, Boolean, :field => "gecos"
10
+
11
+ has n, :roles
12
+
13
+ has n, :group_users
14
+
15
+ def groups
16
+ groups = GroupUser.all(:user_id => login).collect{ |gu| gu.group }
17
+
18
+ def groups.user=(user)
19
+ @user = user
20
+ end
21
+
22
+ groups.user = self
23
+
24
+ def groups.<<(group)
25
+ unless member? group
26
+ GroupUser.create(:user_id => @user.login, :group_id => group.id)
27
+ super
28
+ end
29
+ self
30
+ end
31
+
32
+ def groups.delete(group)
33
+ gu = GroupUser.first(:user_id => @user.login, :group_id => group.id)
34
+ if gu
35
+ gu.destroy
36
+ super
37
+ end
38
+ end
39
+
40
+ groups
41
+ end
42
+
43
+ dn_prefix { |user| "uid=#{user.login}"}
44
+
45
+ treebase "ou=people"
46
+
47
+ ldap_properties do |user|
48
+ properties = { :objectclass => ["inetOrgPerson", "posixAccount", "shadowAccount"], :loginshell => "/bin/bash", :gidnumber => "10000" }
49
+ properties[:sn] = "#{user.name.sub(/.*\ /, "")}"
50
+ properties[:givenname] = "#{user.name.sub(/\ .*/, "")}"
51
+ properties[:homedirectory] = "/home/#{user.login}"
52
+ properties
53
+ end
54
+
55
+ def password=(password)
56
+ salt = "--#{Time.now}--#{login}--"
57
+ attribute_set(:hashed_password, Ldap::Digest.ssha(password, salt)) if password
58
+ end
59
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-ldap-adapter
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 7
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 3
10
- version: 0.4.3
9
+ - 4
10
+ version: 0.4.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - mkristian
@@ -16,8 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-06-06 00:00:00 +05:30
20
- default_executable:
19
+ date: 2011-12-03 00:00:00 Z
21
20
  dependencies:
22
21
  - !ruby/object:Gem::Dependency
23
22
  name: net-ldap
@@ -128,9 +127,25 @@ dependencies:
128
127
  type: :development
129
128
  version_requirements: *id007
130
129
  - !ruby/object:Gem::Dependency
131
- name: ruby-ldap
130
+ name: bundler
132
131
  prerelease: false
133
132
  requirement: &id008 !ruby/object:Gem::Requirement
133
+ none: false
134
+ requirements:
135
+ - - ~>
136
+ - !ruby/object:Gem::Version
137
+ hash: 9
138
+ segments:
139
+ - 1
140
+ - 0
141
+ - 15
142
+ version: 1.0.15
143
+ type: :development
144
+ version_requirements: *id008
145
+ - !ruby/object:Gem::Dependency
146
+ name: ruby-ldap
147
+ prerelease: false
148
+ requirement: &id009 !ruby/object:Gem::Requirement
134
149
  none: false
135
150
  requirements:
136
151
  - - ~>
@@ -142,7 +157,7 @@ dependencies:
142
157
  - 11
143
158
  version: 0.9.11
144
159
  type: :development
145
- version_requirements: *id008
160
+ version_requirements: *id009
146
161
  description: ldap adapter for datamapper which uses either net-ldap or ruby-ldap
147
162
  email:
148
163
  - m.kristian@web.de
@@ -178,14 +193,17 @@ files:
178
193
  - spec/multi_value_attributes_spec.rb
179
194
  - spec/sorting_spec.rb
180
195
  - spec/multi_repository_spec.rb
181
- - spec/contact.rb
182
196
  - spec/spec_helper.rb
183
197
  - spec/ldap_adapter_spec.rb
184
198
  - spec/authentication_ldap_adapter_spec.rb
185
199
  - spec/assiociations_ldap_adapter_spec.rb
186
200
  - spec/ldap_array_spec.rb
201
+ - spec/support/group_user.rb
202
+ - spec/support/user.rb
203
+ - spec/support/test_contact.rb
204
+ - spec/support/role.rb
205
+ - spec/support/group.rb
187
206
  - example/posix.rb
188
- has_rdoc: true
189
207
  homepage: http://github.com/mkristian/dm-ldap-adapter
190
208
  licenses: []
191
209
 
@@ -216,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
234
  requirements: []
217
235
 
218
236
  rubyforge_project:
219
- rubygems_version: 1.5.3
237
+ rubygems_version: 1.7.2
220
238
  signing_key:
221
239
  specification_version: 3
222
240
  summary: ""
data/spec/contact.rb DELETED
@@ -1,58 +0,0 @@
1
- class Contact
2
- include DataMapper::Resource
3
-
4
- def self.auto_upgrade!(args = nil)
5
- DataMapper.logger.warn("Skipping #{self.name}.auto_upgrade!")
6
- end
7
-
8
- def self.default_repository_name
9
- :ldap
10
- end
11
-
12
- def self.repository_name
13
- :ldap
14
- end
15
-
16
- property :id, Serial, :field => 'uid'
17
- property :cn, String, :required => true
18
- property :salutation, String, :lazy => [:view]
19
- property :title, String, :lazy => [:view]
20
- property :givenname, String
21
- property :sn, String, :required => true
22
- property :o, String
23
- property :postaladdress, String, :lazy => [:view]
24
- property :postalcode, String, :lazy => [:view]
25
- property :l, String
26
- property :st, String, :lazy => [:view]
27
- property :c, String, :lazy => [:view]
28
- property :telephonenumber, String
29
- property :facsimiletelephonenumber, String, :lazy => [:view]
30
- property :pager, String, :lazy => [:view]
31
- property :jpegphoto, LdapArray, :lazy => true
32
- property :mobile, String, :lazy => [:view]
33
- property :anniversary, String, :lazy => [:view]
34
- property :mail, LdapArray
35
- property :labeleduri, LdapArray, :lazy => [:view]
36
- property :marker, LdapArray, :lazy => [:view]
37
- property :description, LdapArray, :lazy => [:view]
38
-
39
- dn_prefix do |u|
40
- "uid=#{u.id}"
41
- end
42
-
43
- ldap_properties do |u|
44
- properties = { :objectclass => ['inetOrgPerson']}#, "posixAccount", "shadowAccount"]}#'contactPerson'] }
45
- properties
46
- end
47
-
48
- treebase 'ou=people'
49
-
50
- before :save, :fix_object
51
-
52
- private
53
-
54
- def fix_object
55
- self.cn = "#{self.givenname} #{self.sn}".strip
56
- end
57
-
58
- end