dm-redis-adapter 0.7.0 → 0.8.0

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/Gemfile CHANGED
@@ -7,7 +7,7 @@ gem "redis", ">= 2.2"
7
7
  gem "jeweler", ">= 1.4.0"
8
8
  gem "rspec", "~> 1.3.0"
9
9
  gem "rake", ">= 0.8.7"
10
- gem "hiredis", "~> 0.3.0"
10
+ gem "hiredis", "~> 0.4.0"
11
11
  gem "ruby-debug19"
12
12
  # gem "data_objects", ">= 0.10.1"
13
13
  # gem "do_postgres", ">= 0.10.1"
data/Rakefile CHANGED
@@ -28,7 +28,7 @@ begin
28
28
  gemspec.authors = AUTHORS
29
29
  gemspec.add_dependency "dm-core", ">= 1.2.0"
30
30
  gemspec.add_dependency "dm-types", ">= 1.2.0"
31
- gemspec.add_dependency "hiredis", "~> 0.3.0"
31
+ gemspec.add_dependency "hiredis", "~> 0.4.0"
32
32
  gemspec.add_dependency "redis", "~> 2.2"
33
33
  gemspec.files = %w(MIT-LICENSE README.textile Rakefile) + Dir.glob("{lib,spec}/**/*")
34
34
  gemspec.has_rdoc = false
@@ -43,7 +43,7 @@ module DataMapper
43
43
  record_data = @redis.hgetall("#{storage_name}:#{record[redis_key_for(query.model)]}")
44
44
 
45
45
  query.fields.each do |property|
46
- next if query.model.key.include?(property)
46
+ next if query.model.key.include?(property) and query.model.key.size == 1
47
47
 
48
48
  name = property.name.to_s
49
49
  value = record_data[name]
@@ -140,6 +140,27 @@ module DataMapper
140
140
  end
141
141
  end
142
142
 
143
+ def is_composed_key_based_query?(query)
144
+ fields_length = query.model.key.size
145
+ is_key = query.condition_properties.select { |field| field.key? }
146
+ (fields_length >1 and fields_length == is_key.length)
147
+ end
148
+
149
+ def key_query(query)
150
+ matched_records = []
151
+ value =""
152
+ storage_name = query.model.storage_name
153
+ query.conditions.operands.each do |operand|
154
+ value += operand.value if operand.subject.key?
155
+ end
156
+
157
+ if @redis.sismember(key_set_for(query.model), value)
158
+ #matched_records << @redis.hgetall("#{storage_name}:#{value}")
159
+ matched_records << {redis_key_for(query.model) => value}
160
+ end
161
+ matched_records
162
+ end
163
+
143
164
  ##
144
165
  # Retrieves records for a particular model.
145
166
  #
@@ -158,6 +179,8 @@ module DataMapper
158
179
  key = key.to_i if key =~ /^\d+$/
159
180
  keys << {redis_key_for(query.model) => key}
160
181
  end
182
+ elsif is_composed_key_based_query?(query)
183
+ keys = key_query(query)
161
184
  else
162
185
  query.conditions.operands.each do |operand|
163
186
  if operand.is_a?(DataMapper::Query::Conditions::OrOperation)
@@ -237,20 +260,19 @@ module DataMapper
237
260
  search_all_resources(query, operand, subject, matched_records)
238
261
  end
239
262
  when DataMapper::Query::Conditions::EqualToComparison
240
- if query.model.key.include?(subject)
241
- if @redis.sismember(key_set_for(query.model), value)
263
+ if query.model.key.include?(subject) and @redis.sismember(key_set_for(query.model), value)
242
264
  matched_records << {redis_key_for(query.model) => value}
243
- end
265
+
244
266
  elsif subject.respond_to?(:index) && subject.index
245
267
  find_indexed_matches(subject, value).each do |k|
246
268
  matched_records << {redis_key_for(query.model) => k, "#{subject.name}" => value}
247
269
  end
248
- else # worst case here, loop through all members, typecast and match
270
+ else
249
271
  search_all_resources(query, operand, subject, matched_records)
250
272
  end
251
273
  else # worst case here, loop through all members, typecast and match
252
274
  search_all_resources(query, operand, subject, matched_records)
253
- end
275
+ end
254
276
  matched_records
255
277
  end
256
278
 
@@ -3,28 +3,54 @@ require 'spec_helper'
3
3
  describe DataMapper::Adapters::RedisAdapter do
4
4
  before(:all) do
5
5
  @adapter = DataMapper.setup(:default, {
6
- :adapter => "redis",
7
- :db => 15
6
+ :adapter => "redis",
7
+ :db => 15
8
8
  })
9
+
10
+ class Foo_1
11
+ include DataMapper::Resource
12
+ property :hostname, Text, :key => true
13
+ property :ip_address, Text
14
+ end
15
+ class Foo
16
+ include DataMapper::Resource
17
+ property :key1, String, :key => true
18
+ property :key2, String, :key => true
19
+ end
20
+ DataMapper.finalize
21
+
9
22
  end
10
23
 
11
- after(:all) do
24
+ after(:each) do
12
25
  Redis.new(:db => 15).flushdb
13
26
  end
14
27
 
15
28
  describe "textual keys" do
16
29
  it "should return the key" do
17
- class Foo
18
- include DataMapper::Resource
19
- property :hostname, Text, :key => true
20
- property :ip_address, Text
21
- end
22
- DataMapper.finalize
23
30
 
24
- Foo.create(:hostname => "hostname1", :ip_address => '127.0.0.1')
25
31
 
26
- Foo.first.hostname.should == "hostname1"
32
+ Foo_1.create(:hostname => "hostname1", :ip_address => '127.0.0.1')
33
+
34
+ Foo_1.first.hostname.should == "hostname1"
35
+
36
+ Foo_1.first(:hostname => "hostname1").ip_address.should == "127.0.0.1"
37
+ end
38
+
39
+ it "should find elements with two natural keys by querying with only one key" do
40
+
41
+
42
+
43
+ Foo.create(:key1 => "value1", :key2 => 'value2')
44
+ Foo.first(:key1 => "value1").key2.should == 'value2'
27
45
  end
46
+
47
+ it "should support direct key-based query with get using two natural keys" do
48
+
49
+
50
+ Foo.create(:key1 => "value1", :key2 => 'value2')
51
+ Foo.get("value1","value2").key2.should == 'value2'
52
+ end
53
+
28
54
  end
29
55
 
30
56
  describe "textual keys" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-redis-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-06-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: dm-core
16
- requirement: &70229511188280 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 1.2.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70229511188280
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.2.0
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: dm-types
27
- requirement: &70229511202200 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,21 +37,31 @@ dependencies:
32
37
  version: 1.2.0
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70229511202200
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.2.0
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: hiredis
38
- requirement: &70229511201220 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
42
52
  - !ruby/object:Gem::Version
43
- version: 0.3.0
53
+ version: 0.4.0
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *70229511201220
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.4.0
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: redis
49
- requirement: &70229511199040 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ~>
@@ -54,7 +69,12 @@ dependencies:
54
69
  version: '2.2'
55
70
  type: :runtime
56
71
  prerelease: false
57
- version_requirements: *70229511199040
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '2.2'
58
78
  description: DataMapper adapter for the Redis key-value database
59
79
  email: whoahbot@gmail.com
60
80
  executables:
@@ -86,24 +106,15 @@ files:
86
106
  - spec/spec_helper.rb
87
107
  - spec/textual_keys_spec.rb
88
108
  - Gemfile
89
- - !binary |-
90
- YmluL2F1dG9zcGVj
91
- - !binary |-
92
- YmluL2VkaXRfanNvbi5yYg==
93
- - !binary |-
94
- YmluL2pld2VsZXI=
95
- - !binary |-
96
- YmluL21pbml0YXI=
97
- - !binary |-
98
- YmluL3ByZXR0aWZ5X2pzb24ucmI=
99
- - !binary |-
100
- YmluL3Jha2U=
101
- - !binary |-
102
- YmluL3JkZWJ1Zw==
103
- - !binary |-
104
- YmluL3J1Ynlmb3JnZQ==
105
- - !binary |-
106
- YmluL3NwZWM=
109
+ - bin/autospec
110
+ - bin/edit_json.rb
111
+ - bin/jeweler
112
+ - bin/minitar
113
+ - bin/prettify_json.rb
114
+ - bin/rake
115
+ - bin/rdebug
116
+ - bin/rubyforge
117
+ - bin/spec
107
118
  homepage: http://github.com/whoahbot/dm-redis-adapter
108
119
  licenses: []
109
120
  post_install_message:
@@ -117,9 +128,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
128
  - - ! '>='
118
129
  - !ruby/object:Gem::Version
119
130
  version: '0'
120
- segments:
121
- - 0
122
- hash: 141054625361991744
123
131
  required_rubygems_version: !ruby/object:Gem::Requirement
124
132
  none: false
125
133
  requirements:
@@ -128,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
136
  version: '0'
129
137
  requirements: []
130
138
  rubyforge_project:
131
- rubygems_version: 1.8.11
139
+ rubygems_version: 1.8.23
132
140
  signing_key:
133
141
  specification_version: 3
134
142
  summary: DataMapper adapter for the Redis key-value database
@@ -141,3 +149,4 @@ test_files:
141
149
  - spec/self_referential_spec.rb
142
150
  - spec/spec_helper.rb
143
151
  - spec/textual_keys_spec.rb
152
+ has_rdoc: