simple_queues 1.1.1 → 1.2.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/.rspec +2 -0
- data/README.textile +12 -5
- data/lib/simple_queues.rb +4 -0
- data/lib/simple_queues/encoders/identity.rb +11 -0
- data/lib/simple_queues/encoders/json.rb +13 -0
- data/lib/simple_queues/encoders/message_pack.rb +13 -0
- data/lib/simple_queues/redis.rb +28 -9
- data/lib/simple_queues/version.rb +1 -1
- data/simple_queues.gemspec +2 -1
- data/spec/dequeueing_spec.rb +15 -7
- data/spec/enqueueing_spec.rb +38 -26
- data/spec/identity_encoder_spec.rb +13 -0
- data/spec/json_encoder_spec.rb +14 -0
- data/spec/message_pack_encoder_spec.rb +14 -0
- data/spec/redis_integration_spec.rb +49 -19
- data/spec/redis_spec.rb +28 -0
- data/spec/spec_helper.rb +56 -0
- metadata +31 -8
data/.rspec
ADDED
data/README.textile
CHANGED
@@ -1,24 +1,30 @@
|
|
1
1
|
h1. SimpleQueues
|
2
2
|
|
3
|
-
In the Gang of Four books, one of the first few lines is "Program to an interface, not an implementation." When you need a queue, the only operations you need are enqueue and dequeue. It doesn't matter that Redis (a nice and simple queue server when you need it) has
|
3
|
+
In the Gang of Four books, one of the first few lines is "Program to an interface, not an implementation." When you need a queue, the only operations you need are enqueue and dequeue. It doesn't matter that Redis (a nice and simple queue server when you need it) has a ton of extra features which we aren't going to use.
|
4
4
|
|
5
|
-
This library was written and spec'd on Ruby 1.9.2. It
|
5
|
+
This library was written and spec'd on Ruby 1.9.2. It is also in use, in production, on JRuby in 1.8 mode.
|
6
6
|
|
7
7
|
h2. Exceptions
|
8
8
|
|
9
|
-
All underlying exceptions the Redis gem raises are let through
|
9
|
+
All underlying exceptions the Redis gem raises are let through. This means you'll see <code>Errno::ECONNREFUSED</code>, <code>Errno::EAGAIN</code> and friends. Of course, you may also receive ArgumentError if you do something bad.
|
10
10
|
|
11
11
|
h2. Usage
|
12
12
|
|
13
13
|
<pre><code>require "simple_queues"
|
14
|
+
# Sane defaults:
|
15
|
+
# * Defaults to a Redis instance at 127.0.0.1:6379, database 0
|
16
|
+
# * Defaults to the JSON encoder
|
14
17
|
Queues = SimpleQueues::Redis.new
|
15
18
|
|
16
|
-
Queues.enqueue :pages_to_crawl, :url => "http://blog.teksol.info"
|
17
|
-
Queues.enqueue :pages_to_crawl, :url => "http://techcrunch.com"
|
19
|
+
Queues.enqueue :pages_to_crawl, :url => "http://blog.teksol.info/"
|
20
|
+
Queues.enqueue :pages_to_crawl, :url => "http://techcrunch.com/"
|
18
21
|
|
19
22
|
# In another process
|
20
23
|
|
24
|
+
Queues = SimpleQueues::Redis.new(Redis.new("192.168.1.9", 9281), :encoder => :json)
|
25
|
+
|
21
26
|
loop do
|
27
|
+
# This blocks until a message is dequeued.
|
22
28
|
message = Queues.dequeue_blocking :pages_to_crawl
|
23
29
|
process(message)
|
24
30
|
end
|
@@ -30,6 +36,7 @@ loop do
|
|
30
36
|
process(message)
|
31
37
|
else
|
32
38
|
# Timed out
|
39
|
+
break
|
33
40
|
end
|
34
41
|
end
|
35
42
|
<code></pre>
|
data/lib/simple_queues.rb
CHANGED
@@ -11,4 +11,8 @@
|
|
11
11
|
# * +dequeue_blocking+
|
12
12
|
module SimpleQueues
|
13
13
|
autoload :Redis, "simple_queues/redis"
|
14
|
+
|
15
|
+
autoload :JsonEncoder, "simple_queues/encoders/json"
|
16
|
+
autoload :MessagePackEncoder, "simple_queues/encoders/message_pack"
|
17
|
+
autoload :IdentityEncoder, "simple_queues/encoders/identity"
|
14
18
|
end
|
data/lib/simple_queues/redis.rb
CHANGED
@@ -6,7 +6,25 @@ module SimpleQueues
|
|
6
6
|
#
|
7
7
|
# Messages are enqueued to the right, dequeued from the left - thus the most recent messages are at the end of the list.
|
8
8
|
class Redis
|
9
|
-
|
9
|
+
attr_reader :encoder
|
10
|
+
|
11
|
+
# @param redis A Redis instance, or something that looks like Redis.
|
12
|
+
# @param options [Hash] A set of options.
|
13
|
+
#
|
14
|
+
# @option :encoder [#decode, #encode, Symbol] Either one of the named encoders, or an object that responds to both +#encode+ and +#decode+. Defaults to :json.
|
15
|
+
def initialize(redis = ::Redis.new, options={})
|
16
|
+
@encoder = case options[:encoder]
|
17
|
+
when :messagepack, :msgpack
|
18
|
+
SimpleQueues::MessagePackEncoder.new
|
19
|
+
when :json, nil
|
20
|
+
SimpleQueues::JsonEncoder.new
|
21
|
+
when :identity
|
22
|
+
SimpleQueues::IdentityEncoder.new
|
23
|
+
else # Use whatever was provided
|
24
|
+
options[:encoder]
|
25
|
+
end
|
26
|
+
raise ArgumentError, "Provided encoder #{@encoder.inspect} does not handle #encode and #decode" unless @encoder.respond_to?(:encode) && @encoder.respond_to?(:decode)
|
27
|
+
|
10
28
|
@redis = redis
|
11
29
|
@queues = Hash.new
|
12
30
|
end
|
@@ -15,14 +33,13 @@ module SimpleQueues
|
|
15
33
|
@queues[q_name(queue_name)] = block
|
16
34
|
end
|
17
35
|
|
18
|
-
def
|
36
|
+
def encode(message)
|
19
37
|
raise ArgumentError, "message must be non-nil" if message.nil?
|
20
|
-
|
21
|
-
message.to_json
|
38
|
+
encoder.encode(message)
|
22
39
|
end
|
23
40
|
|
24
|
-
def
|
25
|
-
|
41
|
+
def decode(message)
|
42
|
+
encoder.decode(message) if message
|
26
43
|
end
|
27
44
|
|
28
45
|
# Enqueues a new message to the Redis backend.
|
@@ -32,7 +49,9 @@ module SimpleQueues
|
|
32
49
|
# @return No useful value.
|
33
50
|
# @raise ArgumentError Whenever the queue name or the message are nil, or the queue name is empty.
|
34
51
|
def enqueue(queue_name, message)
|
35
|
-
|
52
|
+
raise ArgumentError, "Only hashes are accepted as messages" unless message.is_a?(Hash)
|
53
|
+
|
54
|
+
msg = encode(message)
|
36
55
|
@redis.rpush(q_name(queue_name), msg)
|
37
56
|
msg
|
38
57
|
end
|
@@ -67,12 +86,12 @@ module SimpleQueues
|
|
67
86
|
raise ArgumentError, "Timeout must not be nil" if timeout.nil? || timeout.to_s.empty?
|
68
87
|
|
69
88
|
queue, result = @redis.blpop(*[@queues.keys, timeout.to_i].flatten)
|
70
|
-
@queues.fetch(queue).call(
|
89
|
+
@queues.fetch(queue).call(decode(result)) if queue
|
71
90
|
queue
|
72
91
|
when 2
|
73
92
|
queue_name, timeout = args.shift, args.shift
|
74
93
|
_, result = @redis.blpop(q_name(queue_name), timeout.to_i)
|
75
|
-
|
94
|
+
decode(result)
|
76
95
|
else
|
77
96
|
raise "NOT DONE"
|
78
97
|
end
|
data/simple_queues.gemspec
CHANGED
@@ -18,9 +18,10 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
|
20
20
|
s.add_dependency 'redis'
|
21
|
-
s.add_dependency 'json'
|
22
21
|
s.add_development_dependency 'rspec'
|
23
22
|
s.add_development_dependency 'yard'
|
24
23
|
s.add_development_dependency 'RedCloth'
|
25
24
|
s.add_development_dependency 'ruby-debug19'
|
25
|
+
s.add_development_dependency 'msgpack'
|
26
|
+
s.add_development_dependency 'json'
|
26
27
|
end
|
data/spec/dequeueing_spec.rb
CHANGED
@@ -9,7 +9,7 @@ describe SimpleQueues::Redis, "dequeue_blocking" do
|
|
9
9
|
SimpleQueues::Redis.new(redis)
|
10
10
|
end
|
11
11
|
|
12
|
-
it "
|
12
|
+
it "request indefinitely at the Redis layer" do
|
13
13
|
redis.should_receive(:blpop).with("pages_to_crawl", 0)
|
14
14
|
queue.dequeue_blocking("pages_to_crawl")
|
15
15
|
end
|
@@ -30,8 +30,12 @@ describe SimpleQueues::Redis, "dequeue_with_timeout" do
|
|
30
30
|
double("redis")
|
31
31
|
end
|
32
32
|
|
33
|
+
let :encoder do
|
34
|
+
double("encoder").as_null_object
|
35
|
+
end
|
36
|
+
|
33
37
|
let :queue do
|
34
|
-
SimpleQueues::Redis.new(redis)
|
38
|
+
SimpleQueues::Redis.new(redis, :encoder => encoder)
|
35
39
|
end
|
36
40
|
|
37
41
|
it "should call Redis' BLPOP with the requested timeout" do
|
@@ -46,11 +50,15 @@ describe SimpleQueues::Redis, "dequeue_with_timeout" do
|
|
46
50
|
|
47
51
|
it "raises an ArgumentError when the queue name is nil or empty" do
|
48
52
|
lambda { queue.dequeue_with_timeout(nil) }.should raise_error(ArgumentError)
|
49
|
-
lambda { queue.dequeue_with_timeout("") }.should
|
53
|
+
lambda { queue.dequeue_with_timeout("") }.should raise_error(ArgumentError)
|
50
54
|
end
|
51
|
-
|
52
|
-
it "
|
53
|
-
|
54
|
-
|
55
|
+
|
56
|
+
it "should decode the message using the selected encoder" do
|
57
|
+
encoded_message = '{"hello":"world","x":42}'
|
58
|
+
|
59
|
+
redis.should_receive(:blpop).with("test", 5).and_return(["test", encoded_message])
|
60
|
+
encoder.should_receive(:decode).with(encoded_message).and_return("hello" => "world", "x" => 42)
|
61
|
+
|
62
|
+
queue.dequeue_with_timeout(:test, 5)
|
55
63
|
end
|
56
64
|
end
|
data/spec/enqueueing_spec.rb
CHANGED
@@ -5,48 +5,60 @@ describe SimpleQueues::Redis, "enqueue" do
|
|
5
5
|
double("redis")
|
6
6
|
end
|
7
7
|
|
8
|
-
let :
|
9
|
-
|
8
|
+
let :encoder do
|
9
|
+
double("encoder").as_null_object
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
queue.enqueue("q", "message")
|
12
|
+
let :queue do
|
13
|
+
SimpleQueues::Redis.new(redis, :encoder => encoder)
|
15
14
|
end
|
16
15
|
|
17
|
-
it "should
|
18
|
-
redis.should_receive(:rpush).
|
19
|
-
queue.enqueue
|
20
|
-
queue.enqueue("q", {:message => "whatever"}).should == queue.serialize(:message => "whatever")
|
16
|
+
it "should enqueue using the passed-in queue name" do
|
17
|
+
redis.should_receive(:rpush).with("the_queue", anything)
|
18
|
+
queue.enqueue "the_queue", {}
|
21
19
|
end
|
22
20
|
|
23
|
-
it "should
|
24
|
-
|
25
|
-
|
21
|
+
it "should accept symbols as queue names, translating to a string" do
|
22
|
+
redis.should_receive(:rpush).with("pages_to_crawl", anything)
|
23
|
+
queue.enqueue :pages_to_crawl, :url => "http://blog.teksol.info/"
|
26
24
|
end
|
27
25
|
|
28
|
-
it "should
|
29
|
-
|
26
|
+
it "should enqueue the encoded message" do
|
27
|
+
encoded_message = "jfd9jdf"
|
28
|
+
|
29
|
+
encoder.should_receive(:encode).and_return(encoded_message)
|
30
|
+
redis.should_receive(:rpush).with(anything, encoded_message)
|
31
|
+
|
32
|
+
queue.enqueue("q", :key => "value")
|
30
33
|
end
|
31
34
|
|
32
|
-
it "should
|
35
|
+
it "should return the encoded message" do
|
36
|
+
encoded_message = "barfly123"
|
37
|
+
encoder.should_receive(:encode).and_return(encoded_message)
|
33
38
|
redis.should_receive(:rpush)
|
34
|
-
|
39
|
+
|
40
|
+
queue.enqueue("q", {:message => "whatever"}).should == encoded_message
|
35
41
|
end
|
36
42
|
|
37
|
-
it "
|
38
|
-
|
39
|
-
queue.enqueue
|
43
|
+
it "should raise an ArgumentError when the message isn't a Hash" do
|
44
|
+
lambda { queue.enqueue(:q, 42) }.should raise_error(ArgumentError, "Only hashes are accepted as messages")
|
45
|
+
lambda { queue.enqueue(:q, nil) }.should raise_error(ArgumentError, "Only hashes are accepted as messages")
|
46
|
+
lambda { queue.enqueue(:q, "") }.should raise_error(ArgumentError, "Only hashes are accepted as messages")
|
47
|
+
lambda { queue.enqueue(:q, [1,2,3]) }.should raise_error(ArgumentError, "Only hashes are accepted as messages")
|
40
48
|
end
|
41
49
|
|
42
|
-
it "
|
43
|
-
|
44
|
-
queue.enqueue
|
50
|
+
it "should reject invalid queue names" do
|
51
|
+
lambda { queue.enqueue(nil, "") }.should raise_error(ArgumentError)
|
52
|
+
lambda { queue.enqueue("", "") }.should raise_error(ArgumentError)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should encode the message using the provided encoder" do
|
56
|
+
message = {:a => "b"}
|
57
|
+
encoded_message = 'hfd0hs'
|
45
58
|
|
46
|
-
|
47
|
-
|
59
|
+
encoder.should_receive(:encode).with(message).and_return(encoded_message)
|
60
|
+
redis.should_receive(:rpush)
|
48
61
|
|
49
|
-
|
50
|
-
queue.enqueue :ops, {:hello => "world", :x => 42}
|
62
|
+
queue.enqueue :q, message
|
51
63
|
end
|
52
64
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SimpleQueues::IdentityEncoder do
|
4
|
+
it { should encode(a:1, b:2, c:"3").as(a:1, b:2, c:"3") }
|
5
|
+
it { should decode(a:1, b:2, c:"3").as(a:1, b:2, c:"3") }
|
6
|
+
|
7
|
+
it "should not stringify symbol keys" do
|
8
|
+
message = {:a => "b"}
|
9
|
+
encoded_message = subject.encode(message)
|
10
|
+
decoded_message = subject.decode(encoded_message)
|
11
|
+
decoded_message.should == {:a => "b"}
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
describe SimpleQueues::JsonEncoder do
|
5
|
+
it { should encode("a" => "b").as(JSON("a" => "b")) }
|
6
|
+
it { should decode({"a" => "b"}.to_json).as("a" => "b") }
|
7
|
+
|
8
|
+
it "stringifies Symbol keys" do
|
9
|
+
message = {:a => "b"}
|
10
|
+
encoded_message = subject.encode(message)
|
11
|
+
decoded_message = subject.decode(encoded_message)
|
12
|
+
decoded_message.should == {"a" => "b"}
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'msgpack'
|
3
|
+
|
4
|
+
describe SimpleQueues::MessagePackEncoder do
|
5
|
+
it { should encode("a" => "b").as(MessagePack.pack("a" => "b")) }
|
6
|
+
it { should decode({"a" => "b"}.to_msgpack).as("a" => "b") }
|
7
|
+
|
8
|
+
it "stringifies Symbol keys" do
|
9
|
+
message = {:a => "b"}
|
10
|
+
encoded_message = subject.encode(message)
|
11
|
+
decoded_message = subject.decode(encoded_message)
|
12
|
+
decoded_message.should == {"a" => "b"}
|
13
|
+
end
|
14
|
+
end
|
@@ -1,32 +1,62 @@
|
|
1
1
|
require "spec_helper"
|
2
|
+
require "redis"
|
3
|
+
|
4
|
+
describe SimpleQueues::Redis do
|
5
|
+
let :queue_name do
|
6
|
+
:test
|
7
|
+
end
|
8
|
+
|
9
|
+
let :redis do
|
10
|
+
::Redis.new
|
11
|
+
end
|
2
12
|
|
3
|
-
describe SimpleQueues::Redis, "enqueue" do
|
4
13
|
let :queue do
|
5
|
-
SimpleQueues::Redis.new
|
14
|
+
SimpleQueues::Redis.new(redis)
|
6
15
|
end
|
7
16
|
|
8
17
|
before(:each) do
|
9
|
-
|
18
|
+
redis.flushdb
|
10
19
|
end
|
11
20
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
21
|
+
context "given an empty queue" do
|
22
|
+
context "#size" do
|
23
|
+
it { queue.size(queue_name).should == 0 }
|
24
|
+
end
|
25
|
+
|
26
|
+
context "#clear" do
|
27
|
+
it { lambda { queue.clear(queue_name) }.should_not raise_error }
|
28
|
+
end
|
18
29
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
queue.size(:test).should be_zero
|
30
|
+
context "#dequeue_with_timeout" do
|
31
|
+
it { queue.dequeue_with_timeout(queue_name, 1).should == nil }
|
32
|
+
end
|
23
33
|
end
|
24
34
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
35
|
+
context "given a queue with one message" do
|
36
|
+
let :message do
|
37
|
+
{ "value" => Time.now.utc.strftime("%Y-%m-%dT%H:%M:%S") }
|
38
|
+
end
|
39
|
+
|
40
|
+
before(:each) do
|
41
|
+
queue.enqueue(queue_name, message)
|
42
|
+
end
|
43
|
+
|
44
|
+
context "#size" do
|
45
|
+
it { queue.size(queue_name).should == 1 }
|
46
|
+
end
|
47
|
+
|
48
|
+
context "#dequeue_with_timeout" do
|
49
|
+
it { queue.dequeue_with_timeout(queue_name, 1).should == message }
|
50
|
+
end
|
51
|
+
|
52
|
+
context "#clear" do
|
53
|
+
before(:each) do
|
54
|
+
queue.clear(queue_name)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should remove all waiting messages" do
|
58
|
+
queue.size(queue_name).should == 0
|
59
|
+
end
|
60
|
+
end
|
31
61
|
end
|
32
62
|
end
|
data/spec/redis_spec.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SimpleQueues::Redis, "#initialize" do
|
4
|
+
it "should default to the JSON encoder" do
|
5
|
+
subject.encoder.should be_a(SimpleQueues::JsonEncoder)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should use the MessagePack encoder when passing :encoder => :messagepack" do
|
9
|
+
SimpleQueues::Redis.new(double("redis"), :encoder => :msgpack).encoder.should be_a(SimpleQueues::MessagePackEncoder)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should use the MessagePack encoder when passing :encoder => :messagepack" do
|
13
|
+
SimpleQueues::Redis.new(double("redis"), :encoder => :messagepack).encoder.should be_a(SimpleQueues::MessagePackEncoder)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should use the Identity encoder when passing :encoder => :identity" do
|
17
|
+
SimpleQueues::Redis.new(double("redis"), :encoder => :identity).encoder.should be_a(SimpleQueues::IdentityEncoder)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should use the JSON encoder when passing :encoder => :json" do
|
21
|
+
SimpleQueues::Redis.new(double("redis"), :encoder => :json).encoder.should be_a(SimpleQueues::JsonEncoder)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should use whatever encoder is sent" do
|
25
|
+
encoder = double("encoder", :encode => nil, :decode => nil)
|
26
|
+
SimpleQueues::Redis.new(double("redis"), :encoder => encoder).encoder.should be(encoder)
|
27
|
+
end
|
28
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1 +1,57 @@
|
|
1
1
|
require "simple_queues"
|
2
|
+
|
3
|
+
class DecoderMatcher
|
4
|
+
def initialize(message)
|
5
|
+
@message = message
|
6
|
+
end
|
7
|
+
|
8
|
+
def as(expected)
|
9
|
+
@expected = expected
|
10
|
+
self
|
11
|
+
end
|
12
|
+
|
13
|
+
def matches?(decoder)
|
14
|
+
@actual = decoder.decode(@message)
|
15
|
+
@expected == @actual
|
16
|
+
end
|
17
|
+
|
18
|
+
def failure_message_for_should
|
19
|
+
"expected decoded message <#{@actual.inspect} to equal <#{@expected.inspect}>"
|
20
|
+
end
|
21
|
+
|
22
|
+
def description
|
23
|
+
"decode #{@message.inspect}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def decode(message)
|
28
|
+
DecoderMatcher.new(message)
|
29
|
+
end
|
30
|
+
|
31
|
+
class EncoderMatcher
|
32
|
+
def initialize(message)
|
33
|
+
@message = message
|
34
|
+
end
|
35
|
+
|
36
|
+
def as(expected)
|
37
|
+
@expected = expected
|
38
|
+
self
|
39
|
+
end
|
40
|
+
|
41
|
+
def matches?(encoder)
|
42
|
+
@actual = encoder.encode(@message)
|
43
|
+
@expected == @actual
|
44
|
+
end
|
45
|
+
|
46
|
+
def failure_message_for_should
|
47
|
+
"expected encoded message <#{@actual.inspect} to equal <#{@expected.inspect}>"
|
48
|
+
end
|
49
|
+
|
50
|
+
def description
|
51
|
+
"encode #{@message.inspect}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def encode(message)
|
56
|
+
EncoderMatcher.new(message)
|
57
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: simple_queues
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.
|
5
|
+
version: 1.2.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- "Fran\xC3\xA7ois Beausoleil"
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-03-
|
13
|
+
date: 2011-03-25 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
type: :runtime
|
26
26
|
version_requirements: *id001
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rspec
|
29
29
|
prerelease: false
|
30
30
|
requirement: &id002 !ruby/object:Gem::Requirement
|
31
31
|
none: false
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
- - ">="
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: "0"
|
36
|
-
type: :
|
36
|
+
type: :development
|
37
37
|
version_requirements: *id002
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
|
-
name:
|
39
|
+
name: yard
|
40
40
|
prerelease: false
|
41
41
|
requirement: &id003 !ruby/object:Gem::Requirement
|
42
42
|
none: false
|
@@ -47,7 +47,7 @@ dependencies:
|
|
47
47
|
type: :development
|
48
48
|
version_requirements: *id003
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
50
|
+
name: RedCloth
|
51
51
|
prerelease: false
|
52
52
|
requirement: &id004 !ruby/object:Gem::Requirement
|
53
53
|
none: false
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
type: :development
|
59
59
|
version_requirements: *id004
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
|
-
name:
|
61
|
+
name: ruby-debug19
|
62
62
|
prerelease: false
|
63
63
|
requirement: &id005 !ruby/object:Gem::Requirement
|
64
64
|
none: false
|
@@ -69,7 +69,7 @@ dependencies:
|
|
69
69
|
type: :development
|
70
70
|
version_requirements: *id005
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
72
|
+
name: msgpack
|
73
73
|
prerelease: false
|
74
74
|
requirement: &id006 !ruby/object:Gem::Requirement
|
75
75
|
none: false
|
@@ -79,6 +79,17 @@ dependencies:
|
|
79
79
|
version: "0"
|
80
80
|
type: :development
|
81
81
|
version_requirements: *id006
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: json
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: "0"
|
91
|
+
type: :development
|
92
|
+
version_requirements: *id007
|
82
93
|
description: Program to an interface, not an implementation - hides Redis (used as a queue) behind a simple interface
|
83
94
|
email:
|
84
95
|
- francois@teksol.info
|
@@ -90,6 +101,7 @@ extra_rdoc_files: []
|
|
90
101
|
|
91
102
|
files:
|
92
103
|
- .gitignore
|
104
|
+
- .rspec
|
93
105
|
- .rvmrc
|
94
106
|
- Gemfile
|
95
107
|
- LICENSE
|
@@ -97,13 +109,20 @@ files:
|
|
97
109
|
- Rakefile
|
98
110
|
- autotest/discover.rb
|
99
111
|
- lib/simple_queues.rb
|
112
|
+
- lib/simple_queues/encoders/identity.rb
|
113
|
+
- lib/simple_queues/encoders/json.rb
|
114
|
+
- lib/simple_queues/encoders/message_pack.rb
|
100
115
|
- lib/simple_queues/redis.rb
|
101
116
|
- lib/simple_queues/version.rb
|
102
117
|
- simple_queues.gemspec
|
103
118
|
- spec/dequeueing_spec.rb
|
104
119
|
- spec/enqueueing_spec.rb
|
120
|
+
- spec/identity_encoder_spec.rb
|
121
|
+
- spec/json_encoder_spec.rb
|
122
|
+
- spec/message_pack_encoder_spec.rb
|
105
123
|
- spec/multi_dequeue_spec.rb
|
106
124
|
- spec/redis_integration_spec.rb
|
125
|
+
- spec/redis_spec.rb
|
107
126
|
- spec/spec_helper.rb
|
108
127
|
has_rdoc: true
|
109
128
|
homepage: https://github.com/francois/simple_queues
|
@@ -136,6 +155,10 @@ summary: Simple enqueue/dequeue API for working with queues
|
|
136
155
|
test_files:
|
137
156
|
- spec/dequeueing_spec.rb
|
138
157
|
- spec/enqueueing_spec.rb
|
158
|
+
- spec/identity_encoder_spec.rb
|
159
|
+
- spec/json_encoder_spec.rb
|
160
|
+
- spec/message_pack_encoder_spec.rb
|
139
161
|
- spec/multi_dequeue_spec.rb
|
140
162
|
- spec/redis_integration_spec.rb
|
163
|
+
- spec/redis_spec.rb
|
141
164
|
- spec/spec_helper.rb
|