dm-ldap-adapter 0.4.0.alpha2 → 0.4.0.alpha3

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ require 'spec/rake/spectask'
9
9
  require 'pathname'
10
10
 
11
11
  Hoe.spec('dm-ldap-adapter') do |p|
12
- p.version = "0.4.0.alpha2"
12
+ p.version = "0.4.0.alpha3"
13
13
  p.description = "ldap adapter for datamapper which uses either net-ldap or ruby-ldap"
14
14
  p.developer('mkristian', 'm.kristian@web.de')
15
15
  p.url = "http://dm-ldap-adapter.rubyforge.org"
@@ -132,19 +132,25 @@ module DataMapper
132
132
  end
133
133
  ldap_conditions << [:or_operator, or_conditions, nil]
134
134
  else
135
- comparator = c.slug
136
- case comparator
137
- when :raw
138
- when :not
139
- # TODO proper recursion !!!
140
- ldap_conditions << [comparator, c.operands.first.subject.field, c.operands.first.send(:dumped_value)]
141
- when :in
142
- ldap_conditions << [:eql, c.subject.field, c.send(:dumped_value)]
143
- else
144
- ldap_conditions << [comparator, c.subject.field, c.send(:dumped_value)]
135
+ comparator = c.slug
136
+ case comparator
137
+ when :raw
138
+ when :not
139
+ # TODO proper recursion !!!
140
+ ldap_conditions << [comparator, c.operands.first.subject.field, c.operands.first.send(:dumped_value)]
141
+ when :in
142
+ ldap_conditions << [:eql, c.subject.field, c.send(:dumped_value)]
143
+ else
144
+ if c.subject.is_a? Ldap::LdapArray
145
+ # assume a single value here !!!
146
+ val = c.send(:dumped_value)
147
+ ldap_conditions << [comparator, c.subject.field, val[1, val.size - 2]]
148
+ else
149
+ ldap_conditions << [comparator, c.subject.field, c.send(:dumped_value)]
150
+ end
151
+ end
145
152
  end
146
153
  end
147
- end
148
154
  ldap_conditions
149
155
  end
150
156
 
@@ -238,7 +244,7 @@ module DataMapper
238
244
  attributes.each do |property, value|
239
245
  field = property.field.to_sym #TODO sym needed or string ???
240
246
  if property.class == ::Ldap::LdapArray
241
- value = property.load(value)
247
+ value = property.load(value)
242
248
  if resource.original_attributes[property].nil?
243
249
  value.each do |v|
244
250
  actions << [:add, field, v]
@@ -260,7 +266,7 @@ value = property.load(value)
260
266
  else
261
267
  if resource.model.multivalue_field == property.field.to_sym
262
268
  if value.nil?
263
- actions << [:delete, field, resource.original_attributes[property].to_s]
269
+ actions << [:delete, field, resource.attribute_get(property.name).to_s]
264
270
  else
265
271
  actions << [:add, field, value.to_s]
266
272
  end
@@ -288,8 +294,6 @@ value = property.load(value)
288
294
  multivalue_prop = resource.send(:properties).detect do |prop|
289
295
  prop.field.to_sym == resource.model.multivalue_field
290
296
  end
291
- # set the original value so update does the right thing
292
- resource.send("#{multivalue_prop.name}=".to_sym, nil)
293
297
  update_resource(resource,
294
298
  { multivalue_prop => nil })
295
299
  else
@@ -1,16 +1,35 @@
1
1
  require "dm-core"
2
2
 
3
+ module Ldap
4
+ class NoopTransaction
5
+
6
+ def close ; end
7
+ def begin ; end
8
+ def prepare ; end
9
+ def commit ; end
10
+ def rollback ; end
11
+ def rollback_prepared ; end
12
+
13
+ end
14
+ end
15
+
3
16
  module DataMapper
4
17
  module Adapters
5
- class NoopTransaction
6
-
7
- def close ; end
8
- def begin ; end
9
- def prepare ; end
10
- def commit ; end
11
- def rollback ; end
12
- def rollback_prepared ; end
18
+ class LdapAdapter
19
+ def transaction_primitive
20
+ ::Ldap::NoopTransaction.new
21
+ end
22
+ def push_transaction(transaction)
23
+ @transaction = transaction
24
+ end
13
25
 
26
+ def pop_transaction
27
+ @transaction
28
+ end
29
+
30
+ def current_transaction
31
+ @transaction
32
+ end
14
33
  end
15
34
  end
16
35
  end
data/lib/ldap/array.rb CHANGED
@@ -21,7 +21,6 @@ module Ldap
21
21
  result
22
22
  end
23
23
 
24
-
25
24
  def <<(element)
26
25
  push(element)
27
26
  end
data/lib/ldap_resource.rb CHANGED
@@ -40,15 +40,7 @@ module DataMapper
40
40
 
41
41
  value = record[property]
42
42
 
43
- # TODO: typecasting should happen inside the Adapter
44
- # and all values should come back as expected objects
45
- if property.respond_to?(:load_with_resource)
46
- # hack to allow mutable types which are able to reset
47
- # the attribute to make them dirty
48
- value = property.load_with_resource(value, resource)
49
- else
50
- value = property.load(value)
51
- end
43
+ value = property.load(value)
52
44
 
53
45
  property.set!(resource, value)
54
46
  end
@@ -137,20 +137,8 @@ describe DataMapper::Adapters::LdapAdapter do
137
137
  GroupUser.all.size.should == size + 3
138
138
  end
139
139
  DataMapper.repository(:ldap) do
140
- puts
141
- puts "--------------"
142
- p User.get(@user1.id).groups
143
- puts "--------------"
144
- p User.get(@user2.id).groups
145
- puts
146
140
  @user1 = User.get!(@user1.id)
147
141
  @user1.groups.delete(@group1)
148
- puts
149
- puts "--------------"
150
- p User.get(@user1.id).groups
151
- puts "--------------"
152
- p User.get(@user2.id).groups
153
- puts
154
142
  User.get(@user1.id).groups.should == [@group2]
155
143
  User.get(@user2.id).groups.should == [@group1]
156
144
  @user2 = User.get!(@user2.id)
@@ -1,5 +1,6 @@
1
1
  $LOAD_PATH << File.dirname(__FILE__)
2
2
  require 'spec_helper'
3
+ require 'ldap/transactions'
3
4
 
4
5
  describe DataMapper::Adapters::LdapAdapter do
5
6
 
@@ -141,5 +141,13 @@ describe DataMapper.repository(:ldap).adapter.class do
141
141
  @contact.mail.should == ['foo', 'bar']
142
142
  end
143
143
  end
144
+
145
+ it 'should be able to search properties with LdapArray' do
146
+ DataMapper.repository(:ldap) do
147
+ @contact.mail = ["email1"]
148
+ @contact.save
149
+ TestContact.all(:mail => "email1").first.should == @contact
150
+ end
151
+ end
144
152
  end
145
153
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-ldap-adapter
3
3
  version: !ruby/object:Gem::Version
4
- hash: 436503056
4
+ hash: 436503057
5
5
  prerelease: true
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
9
  - 0
10
- - alpha2
11
- version: 0.4.0.alpha2
10
+ - alpha3
11
+ version: 0.4.0.alpha3
12
12
  platform: ruby
13
13
  authors:
14
14
  - mkristian
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-10-19 00:00:00 +05:30
19
+ date: 2010-10-20 00:00:00 +05:30
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency