simple_queues 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/simple_queues/redis.rb +18 -6
- data/lib/simple_queues/version.rb +1 -1
- data/spec/redis_integration_spec.rb +14 -0
- metadata +2 -2
data/lib/simple_queues/redis.rb
CHANGED
@@ -25,9 +25,7 @@ module SimpleQueues
|
|
25
25
|
# @return No useful value.
|
26
26
|
# @raise ArgumentError Whenever the queue name or the message are nil, or the queue name is empty.
|
27
27
|
def enqueue(queue_name, message)
|
28
|
-
|
29
|
-
raise ArgumentError, "Message argument was nil - must not be" if message.nil?
|
30
|
-
@redis.rpush(queue_name.to_s, serialize(message))
|
28
|
+
@redis.rpush(q_name(queue_name), serialize(message))
|
31
29
|
end
|
32
30
|
|
33
31
|
# Dequeues a message, and waits forever for one to arrive.
|
@@ -39,6 +37,14 @@ module SimpleQueues
|
|
39
37
|
dequeue_with_timeout(queue_name, 0)
|
40
38
|
end
|
41
39
|
|
40
|
+
def clear(queue_name)
|
41
|
+
@redis.ltrim(q_name(queue_name), 1, 0)
|
42
|
+
end
|
43
|
+
|
44
|
+
def size(queue_name)
|
45
|
+
@redis.llen(q_name(queue_name))
|
46
|
+
end
|
47
|
+
|
42
48
|
# Dequeues a message, or returns +nil+ if the timeout is exceeded.
|
43
49
|
#
|
44
50
|
# @param queue_name [String, Symbol] The queue name to read from.
|
@@ -46,9 +52,15 @@ module SimpleQueues
|
|
46
52
|
# @return [String, nil] The first message in the queue, or nil if the timeout was exceeded.
|
47
53
|
# @raise ArgumentError If +queue_name+ is nil or the empty String.
|
48
54
|
def dequeue_with_timeout(queue_name, timeout)
|
49
|
-
|
50
|
-
|
51
|
-
|
55
|
+
queue, result = @redis.blpop(q_name(queue_name), timeout)
|
56
|
+
unserialize(result)
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
def q_name(queue_name)
|
61
|
+
queue_name &&= queue_name.to_s
|
62
|
+
raise ArgumentError, "Queue name argument was nil - must not be" if queue_name.nil? || queue_name.empty?
|
63
|
+
queue_name
|
52
64
|
end
|
53
65
|
end
|
54
66
|
end
|
@@ -12,4 +12,18 @@ describe SimpleQueues::Redis, "enqueue" do
|
|
12
12
|
queue.dequeue_with_timeout(:test, 2).should == nil
|
13
13
|
end
|
14
14
|
|
15
|
+
it "clears the queue" do
|
16
|
+
queue.enqueue(:test, 42)
|
17
|
+
queue.clear(:test)
|
18
|
+
queue.dequeue_with_timeout(:test, 1).should == nil
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns the queue size" do
|
22
|
+
queue.clear(:test)
|
23
|
+
queue.enqueue(:test, 42)
|
24
|
+
queue.enqueue(:test, 42)
|
25
|
+
queue.enqueue(:test, 42)
|
26
|
+
queue.enqueue(:test, 42)
|
27
|
+
queue.size(:test).should == 4
|
28
|
+
end
|
15
29
|
end
|