dm-redis-adapter 0.5.0 → 0.5.1

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.
@@ -183,10 +183,14 @@ module DataMapper
183
183
  value = operand.first.value
184
184
  elsif operand.subject.is_a?(DataMapper::Associations::ManyToOne::Relationship)
185
185
  subject = operand.subject.child_key.first
186
- value = operand.value[operand.subject.parent_key.first.name]
186
+ value = if operand.is_a?(DataMapper::Query::Conditions::InclusionComparison)
187
+ operand.value.map{|v|v[operand.subject.parent_key.first.name]}
188
+ else
189
+ operand.value[operand.subject.parent_key.first.name]
190
+ end
187
191
  else
188
192
  subject = operand.subject
189
- value = operand.value
193
+ value = operand.value
190
194
  end
191
195
 
192
196
  if subject.is_a?(DataMapper::Associations::ManyToOne::Relationship)
@@ -200,12 +204,27 @@ module DataMapper
200
204
  matched_records << {redis_key_for(query.model) => key}
201
205
  end
202
206
  end
207
+ elsif operand.is_a?(DataMapper::Query::Conditions::InclusionComparison)
208
+ value.each do |val|
209
+ if @redis.sismember(key_set_for(query.model), val)
210
+ matched_records << {redis_key_for(query.model) => val}
211
+ end
212
+ end
203
213
  elsif @redis.sismember(key_set_for(query.model), value)
204
214
  matched_records << {redis_key_for(query.model) => value}
205
215
  end
206
- elsif subject.index
207
- find_indexed_matches(subject, value).each do |k|
208
- matched_records << {redis_key_for(query.model) => k.to_i, "#{subject.name}" => value}
216
+ elsif subject.respond_to?( :index ) && subject.index
217
+ if operand.is_a?(DataMapper::Query::Conditions::NotOperation)
218
+ elsif operand.is_a?(DataMapper::Query::Conditions::InclusionComparison)
219
+ value.each do |val|
220
+ find_indexed_matches(subject, val).each do |k|
221
+ matched_records << {redis_key_for(query.model) => k.to_i, "#{subject.name}" => val}
222
+ end
223
+ end
224
+ else
225
+ find_indexed_matches(subject, value).each do |k|
226
+ matched_records << {redis_key_for(query.model) => k.to_i, "#{subject.name}" => value}
227
+ end
209
228
  end
210
229
  else # worst case, loop through each record and match
211
230
  @redis.smembers(key_set_for(query.model)).each do |key|
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ describe DataMapper::Adapters::RedisAdapter do
4
+ before(:all) do
5
+ @adapter = DataMapper.setup(:default, {
6
+ :adapter => "redis",
7
+ :db => 15
8
+ })
9
+ @redis = Redis.new(:db => 15)
10
+ end
11
+
12
+ describe "finding records tests" do
13
+ before(:all) do
14
+ @redis.flushdb
15
+ class Page
16
+ include DataMapper::Resource
17
+
18
+ property :id, Serial
19
+
20
+ has n, :children, 'Page', :child_key => :parent_id
21
+ belongs_to :parent, 'Page', :required => false
22
+ end
23
+ DataMapper.finalize
24
+
25
+ @a = Page.create
26
+ @b = Page.create :parent => @a
27
+ @c = Page.create :parent => @a
28
+ @d = Page.create :parent => @c
29
+ end
30
+
31
+ it 'should find Page.all :parent_id => @a.id' do
32
+ found = Page.all :parent_id => @a.id
33
+ found.should == [@b,@c]
34
+ end
35
+
36
+ it 'should find Page.all :id.not => @a.id' do
37
+ found = Page.all :id.not => @a.id
38
+ found.should == [@b,@c,@d]
39
+ end
40
+
41
+ # it fails
42
+ #it 'should find Page.all :parent_id.not => @a.id' do
43
+ # found = Page.all :parent_id.not => @a.id
44
+ # found.should == [@a,@d]
45
+ #end
46
+
47
+ it 'should find Page.all :parent => @a' do
48
+ found = Page.all :parent => @a
49
+ found.should == [@b,@c]
50
+ end
51
+
52
+ it 'should find Page.all :id => [@a.id]' do
53
+ found = Page.all :id => [@a.id]
54
+ found.should == [@a]
55
+ end
56
+
57
+ it 'should find Page.all :id => [@a.id, @c.id]' do
58
+ found = Page.all :id => [@a.id, @c.id]
59
+ found.should == [@a,@c]
60
+ end
61
+
62
+ it 'should find Page.all :parent_id => [@a.id, @c.id]' do
63
+ found = Page.all :parent_id => [@a.id, @c.id]
64
+ found.should == [@b,@c,@d]
65
+ end
66
+
67
+ it 'should find Page.all :parent => [@a,@c]' do
68
+ found = Page.all :parent => [@a,@c]
69
+ found.should == [@b,@c,@d]
70
+ end
71
+
72
+ # it fails
73
+ #it 'should be able to map Page.all.map{ |@a| @a.parent }' do
74
+ # mapped = Page.all.map{ |a| a.parent }
75
+ # mapped.should == [nil, @a, @a, @c]
76
+ #end
77
+
78
+ end
79
+
80
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 5
8
- - 0
9
- version: 0.5.0
8
+ - 1
9
+ version: 0.5.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Dan Herrera
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-11-12 00:00:00 -08:00
17
+ date: 2011-11-14 00:00:00 -08:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -92,6 +92,7 @@ files:
92
92
  - lib/dm-redis-adapter/adapter.rb
93
93
  - lib/dm-redis-adapter/spec/setup.rb
94
94
  - spec/dm_redis_associations_spec.rb
95
+ - spec/dm_redis_finding_spec.rb
95
96
  - spec/dm_redis_spec.rb
96
97
  - spec/dm_redis_validations_spec.rb
97
98
  - spec/spec_helper.rb
@@ -109,7 +110,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
110
  requirements:
110
111
  - - ">="
111
112
  - !ruby/object:Gem::Version
112
- hash: 2716290058136044164
113
+ hash: 82707661945259695
113
114
  segments:
114
115
  - 0
115
116
  version: "0"
@@ -130,6 +131,7 @@ specification_version: 3
130
131
  summary: DataMapper adapter for the Redis key-value database
131
132
  test_files:
132
133
  - spec/dm_redis_associations_spec.rb
134
+ - spec/dm_redis_finding_spec.rb
133
135
  - spec/dm_redis_spec.rb
134
136
  - spec/dm_redis_validations_spec.rb
135
137
  - spec/spec_helper.rb