dm-ldap-adapter 0.3.5 → 0.4.0.alpha2

Sign up to get free protection for your applications and to get access to all the features.
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