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

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/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