dm-ldap-adapter 0.3.5 → 0.4.0.alpha2

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.
data/spec/sorting_spec.rb CHANGED
@@ -2,28 +2,19 @@ $LOAD_PATH << File.dirname(__FILE__)
2
2
  require 'spec_helper'
3
3
 
4
4
  describe DataMapper.repository(:ldap).adapter do
5
-
5
+
6
6
  describe 'belongs_to association' do
7
-
7
+
8
8
  before do
9
9
  DataMapper.repository(:ldap) do
10
10
  User.all.destroy!
11
- @user1 = User.create(:login => "black", :name => 'Black', :mail => "blackmail@exmple.com", :age => 100)
12
- @user2 = User.create(:login => "brown", :name => 'brown', :mail => "brownmail@exmple.com", :age => 25)
11
+ @user1 = User.create(:login => "black", :name => 'Black', :mail => ["blackmail@example.com"], :age => 100)
12
+ @user2 = User.create(:login => "brown", :name => 'brown', :mail => ["brownmail@example.com"], :age => 25)
13
13
  @user3 = User.create(:login => "blue", :name => 'Yellow')
14
14
  @user4 = User.create(:login => "baluh", :name => 'Hmm')
15
15
  end
16
16
  end
17
-
18
- after do
19
- DataMapper.repository(:ldap) do
20
- @user1.destroy
21
- @user2.destroy
22
- @user3.destroy
23
- @user4.destroy
24
- end
25
- end
26
-
17
+
27
18
  it 'should sort descending without order option' do
28
19
  DataMapper.repository(:ldap) do
29
20
  expected = User.all().sort do |u1, u2|
@@ -40,6 +31,12 @@ describe DataMapper.repository(:ldap).adapter do
40
31
  end
41
32
  User.all(:order => [:login]).should == expected
42
33
  end
34
+ DataMapper.repository(:ldap) do
35
+ expected = User.all().sort do |u1, u2|
36
+ -1 * (u1.login <=> u2.login)
37
+ end
38
+ User.all(:order => [:login]).reverse.should == expected
39
+ end
43
40
  end
44
41
  it 'should sort case insensitive with order option' do
45
42
  DataMapper.repository(:ldap) do
@@ -52,9 +49,13 @@ describe DataMapper.repository(:ldap).adapter do
52
49
 
53
50
  it 'should sort with nil values' do
54
51
  DataMapper.repository(:ldap) do
55
- users = User.all(:order => [:mail]).select { |u| !u.mail.nil? }
52
+ users = User.all(:order => [:name]).select { |u| !u.mail.nil? }
56
53
  users.should == [@user1, @user2]
57
54
  end
55
+ DataMapper.repository(:ldap) do
56
+ users = User.all(:order => [:name]).reverse.select { |u| !u.mail.nil? }
57
+ users.should == [@user2, @user1]
58
+ end
58
59
  end
59
60
  end
60
61
  end
data/spec/spec_helper.rb CHANGED
@@ -3,16 +3,17 @@ require 'rubygems'
3
3
  require 'slf4r/ruby_logger'
4
4
  Slf4r::LoggerFacade4RubyLogger.level = :info
5
5
 
6
- gem 'dm-core', "<0.10.0"
7
- gem 'do_sqlite3', "<0.10.0"
8
-
9
- require 'do_sqlite3'
6
+ require 'dm-sqlite-adapter'
7
+ require 'dm-migrations'
8
+ require 'dm-transactions'
10
9
  require 'pathname'
11
10
  $LOAD_PATH << Pathname(__FILE__).dirname.parent.expand_path + 'lib'
12
11
 
12
+ print "datamapper version:"
13
+ puts DataMapper::VERSION
14
+
13
15
  require 'ldap_resource'
14
16
  require 'adapters/ldap_adapter'
15
- require 'adapters/memory_adapter'
16
17
 
17
18
  DataMapper.setup(:default, 'sqlite3::memory:')
18
19
  DataMapper.setup(:ldap, {
@@ -20,17 +21,30 @@ DataMapper.setup(:ldap, {
20
21
  :host => 'localhost',
21
22
  :port => '389',
22
23
  :base => "dc=example,dc=com",
23
- # :facade => :ruby_ldap,
24
+ :facade => (ENV['FACADE'] || :net_ldap).to_sym,
24
25
  :bind_name => "cn=admin,dc=example,dc=com",
25
- :password => "behappy"
26
+ :password => "secret"
26
27
  })
27
- DataMapper.setup(:memory, {:adapter => 'memory'})
28
28
 
29
+ module DataMapper
30
+ module Resource
31
+ class State
32
+
33
+ # a persisted/deleted resource
34
+ class Deleted < Persisted
35
+ def set(subject, value)
36
+ warn 'Deleted resource cannot be modified ' + subject.inspect + ' ' + value.to_s + " " + @resource.inspect
37
+ super
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
29
43
  class User
30
44
  include DataMapper::Resource
31
45
  property :id, Serial, :field => "uidnumber"
32
46
  property :login, String, :field => "uid", :unique_index => true
33
- property :hashed_password, String, :field => "userpassword", :access => :private
47
+ property :hashed_password, String, :field => "userpassword", :writer => :private
34
48
  property :name, String, :field => "cn"
35
49
  property :mail, String
36
50
  property :age, Integer, :field => "postalcode"
@@ -62,7 +76,7 @@ class User
62
76
  end
63
77
  groups
64
78
  end
65
-
79
+
66
80
  dn_prefix { |user| "uid=#{user.login}"}
67
81
 
68
82
  treebase "ou=people"
@@ -84,11 +98,11 @@ class Role
84
98
  include DataMapper::Resource
85
99
  property :id, Serial, :field => "gidnumber"
86
100
  property :name, String, :field => "cn"
87
-
101
+
88
102
  dn_prefix { |role| "cn=#{role.name}" }
89
-
103
+
90
104
  treebase "ou=groups"
91
-
105
+
92
106
  ldap_properties {{:objectclass => "posixGroup"}}
93
107
 
94
108
  belongs_to :user
@@ -98,23 +112,23 @@ class Group
98
112
  include DataMapper::Resource
99
113
  property :id, Serial, :field => "gidnumber"
100
114
  property :name, String, :field => "cn"
101
-
115
+
102
116
  dn_prefix { |group| "cn=#{group.name}" }
103
-
117
+
104
118
  treebase "ou=groups"
105
-
119
+
106
120
  ldap_properties {{:objectclass => "posixGroup"}}
107
121
  end
108
122
 
109
123
  class GroupUser
110
124
  include DataMapper::Resource
111
-
125
+
112
126
  dn_prefix { |group_user| "cn=#{group_user.group.name}" }
113
-
127
+
114
128
  treebase "ou=groups"
115
-
129
+
116
130
  multivalue_field :memberuid
117
-
131
+
118
132
  ldap_properties do |group_user|
119
133
  {:cn=>"#{group_user.group.name}", :objectclass => "posixGroup"}
120
134
  end
metadata CHANGED
@@ -1,7 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-ldap-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ hash: 436503056
5
+ prerelease: true
6
+ segments:
7
+ - 0
8
+ - 4
9
+ - 0
10
+ - alpha2
11
+ version: 0.4.0.alpha2
5
12
  platform: ruby
6
13
  authors:
7
14
  - mkristian
@@ -9,49 +16,71 @@ autorequire:
9
16
  bindir: bin
10
17
  cert_chain: []
11
18
 
12
- date: 2009-11-25 00:00:00 +05:30
19
+ date: 2010-10-19 00:00:00 +05:30
13
20
  default_executable:
14
21
  dependencies:
15
22
  - !ruby/object:Gem::Dependency
16
23
  name: ruby-net-ldap
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
20
27
  requirements:
21
28
  - - "="
22
29
  - !ruby/object:Gem::Version
30
+ hash: 23
31
+ segments:
32
+ - 0
33
+ - 0
34
+ - 4
23
35
  version: 0.0.4
24
- version:
36
+ type: :runtime
37
+ version_requirements: *id001
25
38
  - !ruby/object:Gem::Dependency
26
39
  name: slf4r
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
30
43
  requirements:
31
44
  - - ">="
32
45
  - !ruby/object:Gem::Version
46
+ hash: 3
47
+ segments:
48
+ - 0
33
49
  version: "0"
34
- version:
50
+ type: :runtime
51
+ version_requirements: *id002
35
52
  - !ruby/object:Gem::Dependency
36
53
  name: dm-core
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
40
57
  requirements:
41
- - - <
58
+ - - ~>
42
59
  - !ruby/object:Gem::Version
43
- version: 0.10.0
44
- version:
60
+ hash: 23
61
+ segments:
62
+ - 1
63
+ - 0
64
+ - 0
65
+ version: 1.0.0
66
+ type: :runtime
67
+ version_requirements: *id003
45
68
  - !ruby/object:Gem::Dependency
46
69
  name: hoe
47
- type: :development
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
50
73
  requirements:
51
74
  - - ">="
52
75
  - !ruby/object:Gem::Version
76
+ hash: 5
77
+ segments:
78
+ - 2
79
+ - 3
80
+ - 3
53
81
  version: 2.3.3
54
- version:
82
+ type: :development
83
+ version_requirements: *id004
55
84
  description: ldap adapter for datamapper which uses either net-ldap or ruby-ldap
56
85
  email:
57
86
  - m.kristian@web.de
@@ -65,20 +94,23 @@ extra_rdoc_files:
65
94
  - README.txt
66
95
  - ldap-commands.txt
67
96
  files:
97
+ - .project
98
+ - .yardoc
68
99
  - History.txt
69
100
  - MIT-LICENSE
70
101
  - Manifest.txt
71
102
  - README-example.markdown
72
103
  - README.txt
73
104
  - Rakefile
105
+ - env.sh
74
106
  - example/identity_map.rb
75
107
  - example/posix.rb
76
108
  - ldap-commands.txt
77
109
  - lib/adapters/ldap_adapter.rb
78
- - lib/adapters/memory_adapter.rb
79
- - lib/adapters/simple_adapter.rb
110
+ - lib/adapters/noop_transaction.rb
80
111
  - lib/dummy_ldap_resource.rb
81
112
  - lib/ldap/array.rb
113
+ - lib/ldap/conditions_2_filter.rb
82
114
  - lib/ldap/digest.rb
83
115
  - lib/ldap/net_ldap_facade.rb
84
116
  - lib/ldap/ruby_ldap_facade.rb
@@ -104,21 +136,29 @@ rdoc_options:
104
136
  require_paths:
105
137
  - lib
106
138
  required_ruby_version: !ruby/object:Gem::Requirement
139
+ none: false
107
140
  requirements:
108
141
  - - ">="
109
142
  - !ruby/object:Gem::Version
143
+ hash: 3
144
+ segments:
145
+ - 0
110
146
  version: "0"
111
- version:
112
147
  required_rubygems_version: !ruby/object:Gem::Requirement
148
+ none: false
113
149
  requirements:
114
- - - ">="
150
+ - - ">"
115
151
  - !ruby/object:Gem::Version
116
- version: "0"
117
- version:
152
+ hash: 25
153
+ segments:
154
+ - 1
155
+ - 3
156
+ - 1
157
+ version: 1.3.1
118
158
  requirements: []
119
159
 
120
160
  rubyforge_project: dm-ldap-adapter
121
- rubygems_version: 1.3.5
161
+ rubygems_version: 1.3.7
122
162
  signing_key:
123
163
  specification_version: 3
124
164
  summary: ""
@@ -1,79 +0,0 @@
1
- require "dm-core"
2
- require 'adapters/simple_adapter'
3
-
4
- # this and the SimpleAdapter is basically the
5
- # dm-core/adapter/in_memory_adapter.rb most credits go dm-core.
6
- # there are few bug fixes and enhancements.
7
- module DataMapper
8
- module Adapters
9
- class MemoryAdapter < SimpleAdapter
10
-
11
- public
12
-
13
- # @see SimpleAdapter
14
- def initialize(name, uri_or_options)
15
- super
16
-
17
- @records = Hash.new { |hash,model| hash[model] = Array.new }
18
- @ids = Hash.new { |hash,model| hash[model] = 0 }
19
- end
20
-
21
- # @see SimpleAdapter
22
- def create_resource(resource)
23
- uniques = resource.model.properties.select do |prop|
24
- prop if prop.unique_index
25
- end
26
- uniques.each do |prop|
27
- raise PersistentError.new "#{prop.name} = #{prop.get(resource)} already exists" unless resource.model.first( prop.name => prop.get(resource) ).nil?
28
- end
29
- @records[resource.model] << resource
30
- resource.id = (@ids[resource.model] += 1) if resource.key.size == 1
31
- # and resource.key[0].serial?
32
- resource
33
- end
34
-
35
- # @see SimpleAdapter
36
- def update_resource(resource, attributes)
37
- attributes.each do |property, value|
38
- property.set!(resource, value)
39
- end
40
- end
41
-
42
- # @see SimpleAdapter
43
- def delete_resource(resource)
44
- records = @records[resource.model]
45
- records.delete(resource)
46
- end
47
-
48
- # @see SimpleAdapter
49
- def read_resource(query)
50
- read(query, false)
51
- end
52
-
53
- # @see SimpleAdapter
54
- def read_resources(query)
55
- read(query, true)
56
- end
57
-
58
- private
59
-
60
- # helper to read either one or many resources matching the given query
61
- def read(query, many)
62
- model = query.model
63
- conditions = query.conditions
64
-
65
- match_with = many ? :select : :detect
66
-
67
- result = @records[model].send(match_with) do |resource|
68
- filter_resource(resource, conditions)
69
- end
70
-
71
- # TODO Sort
72
-
73
- # TODO Limit
74
-
75
- return result
76
- end
77
- end
78
- end
79
- end
@@ -1,198 +0,0 @@
1
- require "dm-core"
2
- require 'slf4r'
3
-
4
- module DataMapper
5
- module Adapters
6
- class NoopTransaction
7
-
8
- def close ; end
9
- def begin ; end
10
- def prepare ; end
11
- def commit ; end
12
- def rollback ; end
13
- def rollback_prepared ; end
14
-
15
- end
16
- class SimpleAdapter < AbstractAdapter
17
-
18
- include Slf4r::Logger
19
-
20
- # @see AbstractAdapter
21
- def transaction_primitive
22
- NoopTransaction.new
23
- end
24
-
25
- def initialize(name, uri_or_options)
26
- super(name, uri_or_options)
27
- end
28
-
29
- protected
30
-
31
- # checks whether a given resource fullfils the conditions
32
- # @param [DataMapper::Resource] resource
33
- # @param [Array<Condition>] conditions
34
- # @return [Boolean]
35
- # true if the resource are within the conditions otherwise false
36
- def filter_resource(resource, conditions)
37
- #puts "condi"
38
- #p conditions
39
- # no conditation => no filter
40
- if conditions.size == 0
41
- true
42
- else
43
- conditions.all? do |tuple|
44
- operator, property, bind_value = *tuple
45
-
46
- value = property.get!(resource)
47
- case operator
48
- when :eql, :in then equality_comparison(bind_value, value)
49
- when :not then !equality_comparison(bind_value, value)
50
- when :like then Regexp.new(bind_value.gsub(/%/, ".*")) =~ value
51
- when :gt then !value.nil? && value > bind_value
52
- when :gte then !value.nil? && value >= bind_value
53
- when :lt then !value.nil? && value < bind_value
54
- when :lte then !value.nil? && value <= bind_value
55
- else raise "Invalid query operator: #{operator.inspect}"
56
- end
57
- end
58
- end
59
- end
60
-
61
- # helper method to dispatch the equality test for different
62
- # classes
63
- def equality_comparison(bind_value, value)
64
- case bind_value
65
- when Array, Range then bind_value.include?(value)
66
- when NilClass then value.nil?
67
- else bind_value == value
68
- end
69
- end
70
-
71
- public
72
-
73
- # @see AbstractAdapter
74
- # @param [Array<DataMapper::Resources>] resources
75
- # aaaa
76
- # @return [Fixnum]
77
- # number of the newly created resources
78
- def create(resources)
79
- resources.select do |resource|
80
-
81
- create_resource(resource)
82
-
83
- end.size # just return the number of create resources
84
- end
85
-
86
- # @see AbstractAdapter
87
- # @param [Hash] attributes
88
- # collection of attribute, i.e. the name/value pairs which
89
- # needs to be updated
90
- # @param [Query]
91
- # on all resources which are selected by that query the
92
- # update will be applied
93
- # @return [Fixnum]
94
- # number of the updated resources
95
- def update(attributes, query)
96
- read_many(query).select do |resource|
97
-
98
- update_resource(resource, attributes)
99
-
100
- end.size
101
- end
102
-
103
- # @see AbstractAdapter
104
- # @param [DataMapper::Query] query
105
- # which selects the resource
106
- # @return [DataMapper::Resource]
107
- # the found Resource or nil
108
- def read_one(query)
109
- result = read_resource(query)
110
- if result.is_a? Resource
111
- result
112
- elsif result # assume result to be Array with the values
113
- #puts "------------------"
114
- #p result
115
- query.model.load(result, query)
116
- end
117
- end
118
-
119
- # @see AbstractAdapter
120
- # @param [DataMapper::Query] query
121
- # which selects the resources
122
- # @return [DataMapper::Collection]
123
- # collection of Resources
124
- def read_many(query)
125
- Collection.new(query) do |set|
126
- result = read_resources(query)
127
- #puts "read_many"
128
- #p result
129
- if result.size > 0 and result.first.is_a? Resource
130
- set.replace(result)
131
- else
132
- result.each do |values|
133
- set.load(values)
134
- end
135
- end
136
- end
137
- end
138
-
139
- # @see AbstractAdapter
140
- # @param [Query] query
141
- # which selects the resources to be deleted
142
- # @return [Fixnum]
143
- # number of the deleted resources
144
- def delete(query)
145
- read_many(query).each do |resource|
146
-
147
- delete_resource(resource)
148
-
149
- end.size
150
- end
151
-
152
- private
153
-
154
- # @param [DataMapper::Resource] resource
155
- # which will be created
156
- # @return [DataMapper::Resource]
157
- # either the resource itself if the creation was successful or nil
158
- def create_resource(resource)
159
- raise NotImplementedError.new
160
- end
161
-
162
- # @param [DataMapper::Query] query
163
- # which selects the resource
164
- # @return [DataMapper::Resource,Array<String>]
165
- # the resource or a set of values ordered in the same manner as query.fields attributes
166
- def read_resource(query)
167
- raise NotImplementedError.new
168
- end
169
-
170
- # @param [DataMapper::Query] query
171
- # which selects the resources
172
- # @return [Array<DataMapper::Resource>,Array<String>]
173
- # resources or ordered values
174
- # @see #read_resource
175
- def read_resources(query)
176
- raise NotImplementedError.new
177
- end
178
-
179
- # @param [DataMapper::Resource] resource
180
- # which will be updated with the given attributes.
181
- # @param [Hash] attributes
182
- # the keys are the property names and the values are the new values of that property.
183
- # @return [DataMapper::Resource]
184
- # resource on success otherwise nil
185
- def update_resource(resource, attributes)
186
- raise NotImplementedError.new
187
- end
188
-
189
- # @param [DataMapper::Resource] resource
190
- # which will be deleted
191
- # @return [DataMapper::Resource]
192
- # either the resource if the deletion was successful or nil
193
- def delete_resource(resource)
194
- raise NotImplementedError.new
195
- end
196
- end
197
- end
198
- end