hotseat 0.5.1 → 0.6.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.5.1
1
+ 0.6.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "hotseat"
8
- s.version = "0.5.1"
8
+ s.version = "0.6.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 = "2012-02-21"
12
+ s.date = "2012-02-27"
13
13
  s.email = "eladkehat@gmail.com"
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE.txt",
@@ -164,6 +164,21 @@ module Hotseat
164
164
  end
165
165
  end
166
166
 
167
+ def unlease_bulk(doc_ids)
168
+ rows = @db.bulk_load(doc_ids)['rows']
169
+ docs, missing = rows.partition {|row| row['doc'] }
170
+ docs.map! {|row| row['doc'] }
171
+ locked, unlocked = docs.partition {|doc| locked? doc }
172
+ locked.each do |doc|
173
+ remove_lock( doc )
174
+ end
175
+ @db.bulk_save locked, use_uuids=false
176
+ {'errors' =>
177
+ unlocked.map {|doc| {'id' => doc['_id'], 'error' => 'unlocked' } } +
178
+ missing.map {|row| {'id' => row['key'], 'error' => row['error']} }
179
+ }
180
+ end
181
+
167
182
  def remove(doc_id, opts={})
168
183
  @db.update_doc(doc_id) do |doc|
169
184
  raise(QueueError, "Document was already removed") unless locked?(doc)
@@ -318,6 +318,41 @@ module Hotseat
318
318
  end
319
319
  end
320
320
 
321
+ describe "#unlease_bulk" do
322
+ before(:each) do
323
+ reset_test_queue!
324
+ enqueue( create_some_docs(10) )
325
+ @leased = @q.lease 8
326
+ @doc_ids = @leased.take(5).map{|doc| doc['_id'] }
327
+ end
328
+
329
+ it "should unlock multiple leased documents" do
330
+ @q.unlease_bulk @doc_ids
331
+ docs = DB.get_bulk(@doc_ids)['rows'].map{|row| row['doc']}
332
+ docs.each do |doc|
333
+ doc.should have_key(@q.config[:object_name])
334
+ doc[@q.config[:object_name]].should_not have_key('lock')
335
+ end
336
+ end
337
+
338
+ it "should report docs whose lock was already removed" do
339
+ rem_ids = @doc_ids.take(2)
340
+ @q.unlease_bulk rem_ids
341
+ res = @q.unlease_bulk @doc_ids
342
+ res['errors'].should have(2).errors
343
+ res['errors'].map{|err| err['id']}.should == rem_ids
344
+ end
345
+
346
+ it "should report docs that are missing from the database" do
347
+ rem_ids = @doc_ids.take(2)
348
+ docs = rem_ids.map{|id| @q.db.get(id) }
349
+ docs.each {|doc| @q.db.delete_doc(doc) }
350
+ res = @q.unlease_bulk @doc_ids
351
+ res['errors'].should have(2).errors
352
+ res['errors'].map{|err| err['id']}.should == rem_ids
353
+ end
354
+ end
355
+
321
356
  describe "#remove" do
322
357
  before(:each) do
323
358
  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.5.1
4
+ version: 0.6.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: 2012-02-21 00:00:00.000000000Z
12
+ date: 2012-02-27 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: couchrest
16
- requirement: &84428420 !ruby/object:Gem::Requirement
16
+ requirement: &76050580 !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: *84428420
24
+ version_requirements: *76050580
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &84427770 !ruby/object:Gem::Requirement
27
+ requirement: &76049460 !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: *84427770
35
+ version_requirements: *76049460
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: yard
38
- requirement: &84414610 !ruby/object:Gem::Requirement
38
+ requirement: &76048250 !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: *84414610
46
+ version_requirements: *76048250
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &84413400 !ruby/object:Gem::Requirement
49
+ requirement: &76030030 !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: *84413400
57
+ version_requirements: *76030030
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &84412810 !ruby/object:Gem::Requirement
60
+ requirement: &76028720 !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: *84412810
68
+ version_requirements: *76028720
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: 121392801
106
+ hash: -832976563
107
107
  required_rubygems_version: !ruby/object:Gem::Requirement
108
108
  none: false
109
109
  requirements: