pigeon 0.4.1 → 0.4.2
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/lib/pigeon/scheduler.rb +11 -0
- data/pigeon.gemspec +1 -1
- data/test/unit/pigeon_processor_test.rb +15 -9
- data/test/unit/pigeon_queue_test.rb +22 -16
- data/test/unit/pigeon_scheduler_test.rb +15 -7
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.2
|
data/lib/pigeon/scheduler.rb
CHANGED
@@ -30,6 +30,12 @@ class Pigeon::Scheduler
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
# Add a single task to the schedule. When subclassing, override the private
|
34
|
+
# enqueue_task method instead.
|
35
|
+
def <<(task)
|
36
|
+
enqueue_task(task)
|
37
|
+
end
|
38
|
+
|
33
39
|
# Returns the default queue used for scheduling.
|
34
40
|
def default_queue
|
35
41
|
@queues[nil]
|
@@ -78,6 +84,11 @@ class Pigeon::Scheduler
|
|
78
84
|
@state == :stopped
|
79
85
|
end
|
80
86
|
|
87
|
+
# Returns true if there are no scheduled tasks, false otherwise.
|
88
|
+
def empty?
|
89
|
+
self.queue_size == 0
|
90
|
+
end
|
91
|
+
|
81
92
|
# Returns the number of tasks that have been queued up.
|
82
93
|
def queue_length
|
83
94
|
@queues.inject(0) do |length, (name, queue)|
|
data/pigeon.gemspec
CHANGED
@@ -4,8 +4,8 @@ class PigeonProcessorTest < Test::Unit::TestCase
|
|
4
4
|
class TaggedTask < Pigeon::Task
|
5
5
|
attr_accessor :tag
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
super(
|
7
|
+
def initialize(tag, options = nil)
|
8
|
+
super(options)
|
9
9
|
@tag = tag
|
10
10
|
end
|
11
11
|
|
@@ -14,8 +14,14 @@ class PigeonProcessorTest < Test::Unit::TestCase
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
@engine
|
17
|
+
def setup
|
18
|
+
@engine = Pigeon::Engine.new
|
19
|
+
|
20
|
+
Pigeon::Engine.register_engine(@engine)
|
21
|
+
end
|
22
|
+
|
23
|
+
def teardown
|
24
|
+
Pigeon::Engine.unregister_engine(@engine)
|
19
25
|
end
|
20
26
|
|
21
27
|
def test_empty_processor
|
@@ -25,7 +31,7 @@ class PigeonProcessorTest < Test::Unit::TestCase
|
|
25
31
|
|
26
32
|
assert_equal false, processor.task?
|
27
33
|
|
28
|
-
assert_equal true, processor.accept?(Pigeon::Task.new
|
34
|
+
assert_equal true, processor.accept?(Pigeon::Task.new)
|
29
35
|
|
30
36
|
assert processor.id
|
31
37
|
end
|
@@ -39,12 +45,12 @@ class PigeonProcessorTest < Test::Unit::TestCase
|
|
39
45
|
|
40
46
|
assert_equal false, processor.task?
|
41
47
|
|
42
|
-
queue << TaggedTask.new(
|
48
|
+
queue << TaggedTask.new(0)
|
43
49
|
|
44
50
|
assert_equal false, processor.task?
|
45
51
|
assert_equal 1, queue.length
|
46
52
|
|
47
|
-
queue << TaggedTask.new(
|
53
|
+
queue << TaggedTask.new(1)
|
48
54
|
|
49
55
|
assert_equal true, processor.task?
|
50
56
|
assert_equal 1, queue.length
|
@@ -60,7 +66,7 @@ class PigeonProcessorTest < Test::Unit::TestCase
|
|
60
66
|
queue = Pigeon::Queue.new
|
61
67
|
|
62
68
|
100.times do |n|
|
63
|
-
queue << TaggedTask.new(
|
69
|
+
queue << TaggedTask.new(n)
|
64
70
|
end
|
65
71
|
|
66
72
|
processor = Pigeon::Processor.new(queue)
|
@@ -75,7 +81,7 @@ class PigeonProcessorTest < Test::Unit::TestCase
|
|
75
81
|
count = 10000
|
76
82
|
|
77
83
|
count.times do |n|
|
78
|
-
queue << TaggedTask.new(
|
84
|
+
queue << TaggedTask.new(n)
|
79
85
|
end
|
80
86
|
|
81
87
|
assert_equal count, queue.length
|
@@ -4,8 +4,8 @@ class PigeonQueueTest < Test::Unit::TestCase
|
|
4
4
|
class TaggedTask < Pigeon::Task
|
5
5
|
attr_accessor :tag
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
super(
|
7
|
+
def initialize(tag, options = nil)
|
8
|
+
super(options)
|
9
9
|
@tag = tag
|
10
10
|
end
|
11
11
|
|
@@ -14,8 +14,14 @@ class PigeonQueueTest < Test::Unit::TestCase
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
@engine
|
17
|
+
def setup
|
18
|
+
@engine = Pigeon::Engine.new
|
19
|
+
|
20
|
+
Pigeon::Engine.register_engine(@engine)
|
21
|
+
end
|
22
|
+
|
23
|
+
def teardown
|
24
|
+
Pigeon::Engine.unregister_engine(@engine)
|
19
25
|
end
|
20
26
|
|
21
27
|
def test_empty_state
|
@@ -30,7 +36,7 @@ class PigeonQueueTest < Test::Unit::TestCase
|
|
30
36
|
def test_cycling
|
31
37
|
queue = Pigeon::Queue.new
|
32
38
|
|
33
|
-
task = Pigeon::Task.new
|
39
|
+
task = Pigeon::Task.new
|
34
40
|
|
35
41
|
assert_equal task, queue << task
|
36
42
|
|
@@ -50,7 +56,7 @@ class PigeonQueueTest < Test::Unit::TestCase
|
|
50
56
|
queue = Pigeon::Queue.new
|
51
57
|
|
52
58
|
tasks = (0..9).to_a.collect do |n|
|
53
|
-
queue << TaggedTask.new(
|
59
|
+
queue << TaggedTask.new(n)
|
54
60
|
end
|
55
61
|
|
56
62
|
assert_equal (0..9).to_a, tasks.to_a.collect(&:tag)
|
@@ -83,7 +89,7 @@ class PigeonQueueTest < Test::Unit::TestCase
|
|
83
89
|
assert_equal 0, queue.length(:over_7)
|
84
90
|
assert_equal true, queue.empty?(:over_7)
|
85
91
|
|
86
|
-
new_task = queue << TaggedTask.new(
|
92
|
+
new_task = queue << TaggedTask.new(10)
|
87
93
|
|
88
94
|
assert_equal new_task, queue.peek(:over_7)
|
89
95
|
assert_equal 1, queue.length(:over_7)
|
@@ -100,7 +106,7 @@ class PigeonQueueTest < Test::Unit::TestCase
|
|
100
106
|
queue = Pigeon::Queue.new
|
101
107
|
|
102
108
|
tasks = (0..9).to_a.collect do |n|
|
103
|
-
queue << TaggedTask.new(
|
109
|
+
queue << TaggedTask.new(n)
|
104
110
|
end
|
105
111
|
|
106
112
|
queue.filter(:odd) do |task|
|
@@ -121,11 +127,11 @@ class PigeonQueueTest < Test::Unit::TestCase
|
|
121
127
|
added_odd = task
|
122
128
|
end
|
123
129
|
|
124
|
-
queue << TaggedTask.new(
|
130
|
+
queue << TaggedTask.new(10)
|
125
131
|
|
126
132
|
assert_equal nil, added_odd
|
127
133
|
|
128
|
-
odd_1 = queue << TaggedTask.new(
|
134
|
+
odd_1 = queue << TaggedTask.new(11)
|
129
135
|
|
130
136
|
assert_equal odd_1, added_odd
|
131
137
|
|
@@ -144,13 +150,13 @@ class PigeonQueueTest < Test::Unit::TestCase
|
|
144
150
|
assert_equal 7, queue.length
|
145
151
|
assert_equal 1, queue.length(:odd)
|
146
152
|
|
147
|
-
queue << TaggedTask.new(
|
153
|
+
queue << TaggedTask.new(12)
|
148
154
|
|
149
155
|
assert_equal nil, claimed_task
|
150
156
|
assert_equal 8, queue.length
|
151
157
|
assert_equal 1, queue.length(:odd)
|
152
158
|
|
153
|
-
odd_2 = queue << TaggedTask.new(
|
159
|
+
odd_2 = queue << TaggedTask.new(13)
|
154
160
|
|
155
161
|
# Adding a task that matches the filter triggers the callback.
|
156
162
|
assert_equal odd_2, claimed_task
|
@@ -162,12 +168,12 @@ class PigeonQueueTest < Test::Unit::TestCase
|
|
162
168
|
claimed_task = nil
|
163
169
|
has_run = false
|
164
170
|
|
165
|
-
queue << TaggedTask.new(
|
171
|
+
queue << TaggedTask.new(14)
|
166
172
|
|
167
173
|
assert_equal nil, claimed_task
|
168
174
|
assert_equal false, has_run
|
169
175
|
|
170
|
-
odd_2 = queue << TaggedTask.new(
|
176
|
+
odd_2 = queue << TaggedTask.new(15)
|
171
177
|
|
172
178
|
assert_equal odd_2, claimed_task
|
173
179
|
assert_equal true, has_run
|
@@ -183,11 +189,11 @@ class PigeonQueueTest < Test::Unit::TestCase
|
|
183
189
|
if (task.tag < 10)
|
184
190
|
queue.claim(task)
|
185
191
|
|
186
|
-
queue << TaggedTask.new(
|
192
|
+
queue << TaggedTask.new(task.tag + 1)
|
187
193
|
end
|
188
194
|
end
|
189
195
|
|
190
|
-
queue << TaggedTask.new(
|
196
|
+
queue << TaggedTask.new(0)
|
191
197
|
|
192
198
|
assert queue.peek
|
193
199
|
assert_equal 10, queue.peek.tag
|
@@ -4,8 +4,8 @@ class PigeonSchedulerTest < Test::Unit::TestCase
|
|
4
4
|
class TaggedTask < Pigeon::Task
|
5
5
|
attr_accessor :tag
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
super(
|
7
|
+
def initialize(tag, options = nil)
|
8
|
+
super(options)
|
9
9
|
@tag = tag
|
10
10
|
end
|
11
11
|
|
@@ -14,14 +14,22 @@ class PigeonSchedulerTest < Test::Unit::TestCase
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
@engine
|
17
|
+
def setup
|
18
|
+
@engine = Pigeon::Engine.new
|
19
|
+
|
20
|
+
Pigeon::Engine.register_engine(@engine)
|
21
|
+
end
|
22
|
+
|
23
|
+
def teardown
|
24
|
+
Pigeon::Engine.unregister_engine(@engine)
|
19
25
|
end
|
20
26
|
|
21
27
|
def test_defaults
|
22
28
|
scheduler = Pigeon::Scheduler.new
|
23
29
|
|
24
30
|
assert_equal true, scheduler.default_queue.empty?
|
31
|
+
assert_equal 0, scheduler.queue_size
|
32
|
+
assert_equal true, scheduler.empty?
|
25
33
|
end
|
26
34
|
|
27
35
|
def test_queued
|
@@ -32,7 +40,7 @@ class PigeonSchedulerTest < Test::Unit::TestCase
|
|
32
40
|
count = 1000
|
33
41
|
|
34
42
|
count.times do |n|
|
35
|
-
queue << TaggedTask.new(
|
43
|
+
queue << TaggedTask.new(n)
|
36
44
|
end
|
37
45
|
|
38
46
|
assert_eventually(5) do
|
@@ -52,8 +60,8 @@ class PigeonSchedulerTest < Test::Unit::TestCase
|
|
52
60
|
|
53
61
|
backlog = [ ]
|
54
62
|
count.times do |n|
|
55
|
-
scheduler.add(TaggedTask.new(
|
56
|
-
backlog << TaggedTask.new(
|
63
|
+
scheduler.add(TaggedTask.new(n * 2 + 1))
|
64
|
+
backlog << TaggedTask.new(n * 2)
|
57
65
|
end
|
58
66
|
|
59
67
|
scheduler.add(backlog)
|