hotseat 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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