defunkt-redis 0.2 → 0.2.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.
Files changed (4) hide show
  1. data/README.markdown +2 -0
  2. data/lib/redis.rb +27 -12
  3. data/spec/redis_spec.rb +14 -3
  4. metadata +2 -2
data/README.markdown CHANGED
@@ -10,6 +10,8 @@ Redis is a key value store with some interesting features:
10
10
 
11
11
  See [redis on code.google.com](http://code.google.com/p/redis/wiki/README) for more information.
12
12
 
13
+ See the build on [RunCodeRun](http://runcoderun.com/rsanheim/redis-rb)
14
+
13
15
  ## Dependencies
14
16
 
15
17
  1. rspec -
data/lib/redis.rb CHANGED
@@ -101,13 +101,14 @@ class Redis
101
101
  }
102
102
 
103
103
  def initialize(options = {})
104
- @host = options[:host] || '127.0.0.1'
105
- @port = (options[:port] || 6379).to_i
106
- @db = (options[:db] || 0).to_i
107
- @timeout = (options[:timeout] || 5).to_i
108
- @password = options[:password]
109
- @logger = options[:logger]
110
- @namespace = options[:namespace]
104
+ @host = options[:host] || '127.0.0.1'
105
+ @port = (options[:port] || 6379).to_i
106
+ @db = (options[:db] || 0).to_i
107
+ @timeout = (options[:timeout] || 5).to_i
108
+ @password = options[:password]
109
+ @logger = options[:logger]
110
+ @namespace = options[:namespace]
111
+ @thread_safe = options[:thread_safe]
111
112
 
112
113
  @logger.info { self.to_s } if @logger
113
114
  end
@@ -206,14 +207,26 @@ class Redis
206
207
  command << "#{bulk}\r\n" if bulk
207
208
  end
208
209
 
209
- @sock.write(command)
210
+ results = if @thread_safe
211
+ with_mutex { process_command(command, argvv) }
212
+ else
213
+ process_command(command, argvv)
214
+ end
210
215
 
211
- results = argvv.map do |argv|
216
+ return pipeline ? results : results[0]
217
+ end
218
+
219
+ def process_command(command, argvv)
220
+ @sock.write(command)
221
+ argvv.map do |argv|
212
222
  processor = REPLY_PROCESSOR[argv[0]]
213
223
  processor ? processor.call(read_reply) : read_reply
214
224
  end
225
+ end
215
226
 
216
- return pipeline ? results : results[0]
227
+ def with_mutex(&block)
228
+ @mutex ||= Mutex.new
229
+ @mutex.synchronize &block
217
230
  end
218
231
 
219
232
  def select(*args)
@@ -255,10 +268,12 @@ class Redis
255
268
  # Similar to memcache.rb's #get_multi, returns a hash mapping
256
269
  # keys to values.
257
270
  def mapped_mget(*keys)
258
- mget(*keys).inject({}) do |hash, value|
271
+ result = {}
272
+ mget(*keys).each do |value|
259
273
  key = keys.shift
260
- value.nil? ? hash : hash.merge(key => value)
274
+ result.merge!(key => value) unless value.nil?
261
275
  end
276
+ result
262
277
  end
263
278
 
264
279
  def mget(*keys)
data/spec/redis_spec.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper'
2
+ require 'redis/raketasks'
2
3
  require 'logger'
3
4
 
4
5
  class Foo
@@ -14,10 +15,16 @@ end
14
15
 
15
16
  describe "redis" do
16
17
  before(:all) do
18
+ result = RedisRunner.start_detached
19
+ raise("Could not start redis-server, aborting") unless result
20
+
21
+ # yea, this sucks, but it seems like sometimes we try to connect too quickly w/o it
22
+ sleep 1
23
+
17
24
  # use database 15 for testing so we dont accidentally step on you real data
18
- @r = Redis.new :db => 15
25
+ @r = Redis.new :db => 15
19
26
  end
20
-
27
+
21
28
  before(:each) do
22
29
  @r['foo'] = 'bar'
23
30
  end
@@ -27,7 +34,11 @@ describe "redis" do
27
34
  end
28
35
 
29
36
  after(:all) do
30
- @r.quit
37
+ begin
38
+ @r.quit
39
+ ensure
40
+ RedisRunner.stop
41
+ end
31
42
  end
32
43
 
33
44
  it "should be able connect without a timeout" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: defunkt-redis
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.2"
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ezra Zygmuntowicz
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2009-08-26 00:00:00 -07:00
17
+ date: 2009-09-21 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies: []
20
20