hotseat 0.3.0 → 0.4.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 +2 -2
- data/lib/hotseat/queue.rb +26 -0
- data/spec/hotseat/queue_spec.rb +77 -0
- metadata +13 -13
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/hotseat.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "hotseat"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.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 = "
|
12
|
+
s.date = "2012-02-16"
|
13
13
|
s.email = "eladkehat@gmail.com"
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"LICENSE.txt",
|
data/lib/hotseat/queue.rb
CHANGED
@@ -106,6 +106,12 @@ module Hotseat
|
|
106
106
|
doc
|
107
107
|
end
|
108
108
|
|
109
|
+
def done?(doc)
|
110
|
+
if obj = doc[config[:object_name]]
|
111
|
+
obj.has_key? 'done'
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
109
115
|
def add(doc_id)
|
110
116
|
@db.update_doc(doc_id) do |doc|
|
111
117
|
patch doc
|
@@ -189,6 +195,26 @@ module Hotseat
|
|
189
195
|
}
|
190
196
|
end
|
191
197
|
|
198
|
+
def undo(doc_id)
|
199
|
+
@db.update_doc(doc_id) do |doc|
|
200
|
+
raise(QueueError, "Document is not done") unless done?(doc)
|
201
|
+
obj = doc[config[:object_name]]
|
202
|
+
obj.delete 'done'
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
def undo_bulk(doc_ids)
|
207
|
+
rows = @db.bulk_load(doc_ids)['rows']
|
208
|
+
docs, missing = rows.partition {|row| row['doc'] }
|
209
|
+
docs.map! {|row| row['doc'] }
|
210
|
+
done, not_done = docs.partition {|doc| done? doc }
|
211
|
+
done.each do |doc|
|
212
|
+
obj = doc[config[:object_name]]
|
213
|
+
obj.delete 'done'
|
214
|
+
end
|
215
|
+
@db.bulk_save done, use_uuids=false
|
216
|
+
end
|
217
|
+
|
192
218
|
def num_done
|
193
219
|
@db.view(done_view_name, :limit => 0)['total_rows']
|
194
220
|
end
|
data/spec/hotseat/queue_spec.rb
CHANGED
@@ -114,6 +114,27 @@ module Hotseat
|
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
|
+
describe "#done?" do
|
118
|
+
before(:each) do
|
119
|
+
reset_test_queue!
|
120
|
+
end
|
121
|
+
it "should be true if the document was marked as done" do
|
122
|
+
doc = @q.mark_done( @q.patch( sample_doc ) )
|
123
|
+
@q.done?(doc).should be_true
|
124
|
+
end
|
125
|
+
it "should be false for a patched document that was not marked as done" do
|
126
|
+
doc = @q.patch( sample_doc )
|
127
|
+
@q.done?(doc).should be_false
|
128
|
+
end
|
129
|
+
it "should be false for a locked document" do
|
130
|
+
doc = @q.add_lock( @q.patch( sample_doc ) )
|
131
|
+
@q.done?(doc).should be_false
|
132
|
+
end
|
133
|
+
it "should be false for an un-patched document (not part of the queue)" do
|
134
|
+
@q.done?(sample_doc).should be_false
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
117
138
|
describe "#add" do
|
118
139
|
before(:each) do
|
119
140
|
reset_test_queue!
|
@@ -418,6 +439,62 @@ module Hotseat
|
|
418
439
|
end
|
419
440
|
end
|
420
441
|
|
442
|
+
describe "#undo" do
|
443
|
+
before(:all) do
|
444
|
+
reset_test_queue!
|
445
|
+
doc_ids = create_some_docs(3)
|
446
|
+
enqueue doc_ids
|
447
|
+
@done_ids = [doc_ids[1]]
|
448
|
+
@undone_ids = [doc_ids[0], doc_ids[2]]
|
449
|
+
@done_ids.each do |done_id|
|
450
|
+
done_doc = DB.get done_id
|
451
|
+
@q.mark_done done_doc
|
452
|
+
done_doc.save
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
456
|
+
it "should mark the done document as pending again" do
|
457
|
+
@q.undo @done_ids.first
|
458
|
+
done_doc = DB.get @done_ids.first
|
459
|
+
patch = done_doc[@q.config[:object_name]]
|
460
|
+
patch.should_not have_key('done')
|
461
|
+
patch.should_not have_key('lock')
|
462
|
+
end
|
463
|
+
|
464
|
+
it "should raise an error if the document is not done" do
|
465
|
+
undone_doc = DB.get @undone_ids.first
|
466
|
+
expect {
|
467
|
+
@q.undo @undone_ids.first
|
468
|
+
}.to raise_error(Hotseat::QueueError)
|
469
|
+
end
|
470
|
+
end
|
471
|
+
|
472
|
+
describe "#undo_bulk" do
|
473
|
+
before(:each) do
|
474
|
+
reset_test_queue!
|
475
|
+
doc_ids = create_some_docs(5)
|
476
|
+
enqueue doc_ids
|
477
|
+
@done_docs = doc_ids[0..2].map{|id| DB.get id }
|
478
|
+
@done_docs.each do |doc|
|
479
|
+
@q.mark_done doc
|
480
|
+
doc.save
|
481
|
+
end
|
482
|
+
end
|
483
|
+
|
484
|
+
it "should mark all 'done' documents as pending again" do
|
485
|
+
@q.undo_bulk @done_docs.map{|doc| doc['_id']}
|
486
|
+
@q.num_done.should == 0
|
487
|
+
@q.num_pending.should == 5
|
488
|
+
end
|
489
|
+
|
490
|
+
it "should leave not-done documents intact" do
|
491
|
+
@q.lease
|
492
|
+
@q.undo_bulk @done_docs.map{|doc| doc['_id']}
|
493
|
+
@q.num_locked.should == 1
|
494
|
+
@q.num_pending.should == 4
|
495
|
+
end
|
496
|
+
end
|
497
|
+
|
421
498
|
describe "#num_done" do
|
422
499
|
it "should return the number of documents done" do
|
423
500
|
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.4.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:
|
12
|
+
date: 2012-02-16 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: couchrest
|
16
|
-
requirement: &
|
16
|
+
requirement: &76368530 !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: *76368530
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &76368010 !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: *76368010
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: yard
|
38
|
-
requirement: &
|
38
|
+
requirement: &76367640 !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: *76367640
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &76367340 !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: *76367340
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &76367000 !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: *76367000
|
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: -1012521073
|
107
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
108
|
none: false
|
109
109
|
requirements:
|