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 CHANGED
@@ -1 +1 @@
1
- 0.2.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 = %q{hotseat}
8
- s.version = "0.2.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 = %q{2011-08-20}
13
- s.email = %q{eladkehat@gmail.com}
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 = %q{http://github.com/eladkehat/hotseat}
34
+ s.homepage = "http://github.com/eladkehat/hotseat"
35
35
  s.licenses = ["MIT"]
36
36
  s.require_paths = ["lib"]
37
- s.rubygems_version = %q{1.7.2}
38
- s.summary = %q{Add work queue functionality to an existing CouchDB database}
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)
@@ -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.2.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-08-20 00:00:00.000000000Z
12
+ date: 2011-09-23 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: couchrest
16
- requirement: &75495540 !ruby/object:Gem::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: *75495540
24
+ version_requirements: *87101760
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &75494710 !ruby/object:Gem::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: *75494710
35
+ version_requirements: *87101330
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: yard
38
- requirement: &75493850 !ruby/object:Gem::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: *75493850
46
+ version_requirements: *87100940
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &75467480 !ruby/object:Gem::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: *75467480
57
+ version_requirements: *87100480
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &75466850 !ruby/object:Gem::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: *75466850
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: -513056433
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.7.2
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