karait 0.0.8 → 1.0.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/VERSION +1 -1
- data/karait.gemspec +2 -2
- data/lib/queue.rb +14 -2
- data/test/test_queue.rb +15 -0
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
1.0.0
|
data/karait.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "karait"
|
8
|
-
s.version = "0.0
|
8
|
+
s.version = "1.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["bcoe"]
|
12
|
-
s.date = "2011-
|
12
|
+
s.date = "2011-12-04"
|
13
13
|
s.description = "A ridiculously simple cross-language queuing system, built on top of MongoDB."
|
14
14
|
s.email = "bencoe@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/queue.rb
CHANGED
@@ -27,9 +27,14 @@ module Karait
|
|
27
27
|
:visible_after => -1.0
|
28
28
|
}
|
29
29
|
|
30
|
-
message_dict[:_meta][:routing_key] = opts
|
30
|
+
message_dict[:_meta][:routing_key] = opts[:routing_key] if opts[:routing_key]
|
31
|
+
|
32
|
+
if opts[:unique_key]
|
33
|
+
unique_insert(message_dict, opts[:unique_key])
|
34
|
+
else
|
35
|
+
@queue_collection.insert(message_dict, :safe => true)
|
36
|
+
end
|
31
37
|
|
32
|
-
@queue_collection.insert(message_dict, :safe => true)
|
33
38
|
end
|
34
39
|
|
35
40
|
def read(opts={})
|
@@ -130,6 +135,13 @@ module Karait
|
|
130
135
|
end
|
131
136
|
|
132
137
|
private
|
138
|
+
|
139
|
+
def unique_insert(message_dict, unique_key)
|
140
|
+
return @database.eval(
|
141
|
+
"function(obj) { if ( db.#{@queue}.count({#{unique_key}: obj.#{unique_key}}) ) { return false; } db.#{@queue}.insert(obj); return true;}",
|
142
|
+
message_dict
|
143
|
+
)
|
144
|
+
end
|
133
145
|
|
134
146
|
def block_until_message_available(query, polling_interval=1.0, polling_timeout=None)
|
135
147
|
current_time = Time.new.to_f
|
data/test/test_queue.rb
CHANGED
@@ -251,4 +251,19 @@ class TestQueue < Test::Unit::TestCase
|
|
251
251
|
stop_time = Time.new.to_f
|
252
252
|
assert_equal true, stop_time - start_time > 0.1
|
253
253
|
end
|
254
|
+
|
255
|
+
should "should not insert two documents with the same value for a unique key" do
|
256
|
+
queue = Karait::Queue.new(
|
257
|
+
:database => 'karait_test',
|
258
|
+
:queue => 'queue_test'
|
259
|
+
)
|
260
|
+
|
261
|
+
queue.write Karait::Message.new({'foo' => 'value1'}), :unique_key => 'foo'
|
262
|
+
queue.write Karait::Message.new({'foo' => 'value1'}), :unique_key => 'foo'
|
263
|
+
queue.write Karait::Message.new({'foo' => 'value2'}), :unique_key => 'foo'
|
264
|
+
|
265
|
+
messages = queue.read()
|
266
|
+
|
267
|
+
assert_equal 2, messages.count
|
268
|
+
end
|
254
269
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: karait
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.8
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- bcoe
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-12-04 00:00:00 Z
|
19
19
|
dependencies: []
|
20
20
|
|
21
21
|
description: A ridiculously simple cross-language queuing system, built on top of MongoDB.
|