hotseat 0.2.0 → 0.3.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/hotseat.gemspec +7 -7
- data/lib/hotseat/queue.rb +8 -0
- data/spec/hotseat/queue_spec.rb +49 -0
- metadata +14 -14
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/hotseat.gemspec
CHANGED
@@ -4,13 +4,13 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.
|
7
|
+
s.name = "hotseat"
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Elad Kehat"]
|
12
|
-
s.date =
|
13
|
-
s.email =
|
12
|
+
s.date = "2011-09-23"
|
13
|
+
s.email = "eladkehat@gmail.com"
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"LICENSE.txt",
|
16
16
|
"README.rdoc"
|
@@ -31,11 +31,11 @@ Gem::Specification.new do |s|
|
|
31
31
|
"spec/hotseat/queue_spec.rb",
|
32
32
|
"spec/spec_helper.rb"
|
33
33
|
]
|
34
|
-
s.homepage =
|
34
|
+
s.homepage = "http://github.com/eladkehat/hotseat"
|
35
35
|
s.licenses = ["MIT"]
|
36
36
|
s.require_paths = ["lib"]
|
37
|
-
s.rubygems_version =
|
38
|
-
s.summary =
|
37
|
+
s.rubygems_version = "1.8.10"
|
38
|
+
s.summary = "Add work queue functionality to an existing CouchDB database"
|
39
39
|
|
40
40
|
if s.respond_to? :specification_version then
|
41
41
|
s.specification_version = 3
|
data/lib/hotseat/queue.rb
CHANGED
@@ -149,6 +149,14 @@ module Hotseat
|
|
149
149
|
@db.view(locked_view_name, :limit => 0)['total_rows']
|
150
150
|
end
|
151
151
|
|
152
|
+
def unlease(doc_id)
|
153
|
+
@db.update_doc(doc_id) do |doc|
|
154
|
+
raise(QueueError, "Document is already unlocked") unless locked?(doc)
|
155
|
+
remove_lock doc
|
156
|
+
yield doc if block_given?
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
152
160
|
def remove(doc_id, opts={})
|
153
161
|
@db.update_doc(doc_id) do |doc|
|
154
162
|
raise(QueueError, "Document was already removed") unless locked?(doc)
|
data/spec/hotseat/queue_spec.rb
CHANGED
@@ -248,6 +248,55 @@ module Hotseat
|
|
248
248
|
end
|
249
249
|
end
|
250
250
|
|
251
|
+
describe "#unlease" do
|
252
|
+
before(:each) do
|
253
|
+
reset_test_queue!
|
254
|
+
enqueue( create_some_docs(3) )
|
255
|
+
@leased = @q.lease 2
|
256
|
+
@doc_id = @leased.first['_id']
|
257
|
+
end
|
258
|
+
|
259
|
+
it "should unlock a leased document" do
|
260
|
+
@q.unlease @doc_id
|
261
|
+
doc = DB.get(@doc_id)
|
262
|
+
doc.should have_key(@q.config[:object_name])
|
263
|
+
doc[@q.config[:object_name]].should_not have_key('lock')
|
264
|
+
end
|
265
|
+
|
266
|
+
it "should leave the document in the queue" do
|
267
|
+
@q.unlease @doc_id
|
268
|
+
pending_docs = @q.get 3 # ensure we get all remaining pending docs
|
269
|
+
pending_docs.map{|doc| doc['_id']}.should include(@doc_id)
|
270
|
+
end
|
271
|
+
|
272
|
+
it "should raise an error if the lock was already removed" do
|
273
|
+
doc = @leased.first
|
274
|
+
@q.unlease @doc_id
|
275
|
+
expect {
|
276
|
+
@q.unlease @doc_id
|
277
|
+
}.to raise_error(Hotseat::QueueError)
|
278
|
+
end
|
279
|
+
|
280
|
+
it "should raise an error if the document is missing from the database" do
|
281
|
+
doc_id = @leased.first['_id']
|
282
|
+
doc = @q.db.get(doc_id)
|
283
|
+
@q.db.delete_doc(doc)
|
284
|
+
expect {
|
285
|
+
@q.unlease doc['_id']
|
286
|
+
}.to raise_error
|
287
|
+
end
|
288
|
+
|
289
|
+
it "should save any changes made in the block" do
|
290
|
+
@q.unlease(@doc_id) do |doc|
|
291
|
+
doc['field'] = 'changed value'
|
292
|
+
doc['another_field'] = 'another value'
|
293
|
+
end
|
294
|
+
doc = DB.get(@doc_id)
|
295
|
+
doc['field'].should == 'changed value'
|
296
|
+
doc['another_field'].should == 'another value'
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
251
300
|
describe "#remove" do
|
252
301
|
before(:each) do
|
253
302
|
reset_test_queue!
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hotseat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-09-23 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: couchrest
|
16
|
-
requirement: &
|
16
|
+
requirement: &87101760 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.1.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *87101760
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &87101330 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *87101330
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: yard
|
38
|
-
requirement: &
|
38
|
+
requirement: &87100940 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *87100940
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &87100480 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *87100480
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &87100060 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *87100060
|
69
69
|
description:
|
70
70
|
email: eladkehat@gmail.com
|
71
71
|
executables: []
|
@@ -103,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
103
103
|
version: '0'
|
104
104
|
segments:
|
105
105
|
- 0
|
106
|
-
hash:
|
106
|
+
hash: 841242607
|
107
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
108
|
none: false
|
109
109
|
requirements:
|
@@ -112,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
112
|
version: '0'
|
113
113
|
requirements: []
|
114
114
|
rubyforge_project:
|
115
|
-
rubygems_version: 1.
|
115
|
+
rubygems_version: 1.8.10
|
116
116
|
signing_key:
|
117
117
|
specification_version: 3
|
118
118
|
summary: Add work queue functionality to an existing CouchDB database
|