mloughran-job_queue 0.0.7 → 0.0.8
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.yml +1 -1
- data/lib/job_queue/adapters/test_adapter.rb +39 -10
- data/spec/beanstalk_adapter_spec.rb +5 -25
- data/spec/common_adapter_spec.rb +54 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/test_adapter_spec.rb +8 -29
- metadata +3 -2
data/VERSION.yml
CHANGED
@@ -1,20 +1,49 @@
|
|
1
|
+
# This adapter is designed for testing purposes.
|
2
|
+
#
|
3
|
+
# Features supported:
|
4
|
+
#
|
5
|
+
# named queues: yes
|
6
|
+
# priority: no
|
7
|
+
# ttr: no
|
8
|
+
#
|
9
|
+
# Additionally this queue can be inspeced with JobQueue.adapter.queue('name')
|
10
|
+
#
|
1
11
|
class JobQueue::TestAdapter
|
2
12
|
def initialize(options = {})
|
3
|
-
@
|
13
|
+
@queues = {}
|
4
14
|
end
|
5
|
-
|
6
|
-
def put(string)
|
7
|
-
@queue
|
15
|
+
|
16
|
+
def put(string, queue, priority, ttr)
|
17
|
+
@queues[queue] ||= []
|
18
|
+
@queues[queue] << string
|
8
19
|
end
|
9
|
-
|
10
|
-
def subscribe(error_report, &block)
|
20
|
+
|
21
|
+
def subscribe(error_report, cleanup_task, queue, &block)
|
11
22
|
loop do
|
12
23
|
begin
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
24
|
+
if get_queue(queue).empty?
|
25
|
+
sleep 0.1
|
26
|
+
else
|
27
|
+
job = get_queue(queue).shift
|
28
|
+
yield job
|
29
|
+
end
|
30
|
+
rescue => e
|
31
|
+
error_report.call(job, e)
|
17
32
|
end
|
18
33
|
end
|
19
34
|
end
|
35
|
+
|
36
|
+
# Additional method for TestAdapter to allow easy queue inspection with
|
37
|
+
#
|
38
|
+
# JobQueue.adapter.queue('foo')
|
39
|
+
#
|
40
|
+
def queue(queue = 'default')
|
41
|
+
get_queue(queue)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def get_queue(queue)
|
47
|
+
@queues[queue] || []
|
48
|
+
end
|
20
49
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
require File.dirname(__FILE__) + '/common_adapter_spec'
|
2
3
|
|
3
4
|
describe JobQueue::BeanstalkAdapter do
|
4
5
|
before :each do
|
@@ -215,6 +216,10 @@ describe JobQueue::BeanstalkAdapter do
|
|
215
216
|
JobQueue.adapter = JobQueue::BeanstalkAdapter.new
|
216
217
|
end
|
217
218
|
|
219
|
+
describe "common" do
|
220
|
+
it_should_behave_like "JobQueue adapter named queues"
|
221
|
+
end
|
222
|
+
|
218
223
|
it "should write onto queue and fetch stuff back off" do
|
219
224
|
JobQueue.put("hello")
|
220
225
|
|
@@ -263,23 +268,6 @@ describe JobQueue::BeanstalkAdapter do
|
|
263
268
|
end
|
264
269
|
}
|
265
270
|
end
|
266
|
-
|
267
|
-
it "should put jobs onto a named queue and only read off that queue" do
|
268
|
-
JobQueue.put("hello", :queue => "test")
|
269
|
-
lambda {
|
270
|
-
Timeout.timeout(0.1) do
|
271
|
-
JobQueue.subscribe(:queue => "foo") do |job|
|
272
|
-
throw :stop
|
273
|
-
end
|
274
|
-
end
|
275
|
-
}.should raise_error(Timeout::Error)
|
276
|
-
should_not_timeout {
|
277
|
-
JobQueue.subscribe(:queue => "test") do |body|
|
278
|
-
body.should == 'hello'
|
279
|
-
throw :stop
|
280
|
-
end
|
281
|
-
}
|
282
|
-
end
|
283
271
|
end
|
284
272
|
|
285
273
|
describe "when connecting to multiple instances" do
|
@@ -327,11 +315,3 @@ describe JobQueue::BeanstalkAdapter do
|
|
327
315
|
end
|
328
316
|
end
|
329
317
|
end
|
330
|
-
|
331
|
-
def should_not_timeout(timeout = 0.1)
|
332
|
-
lambda {
|
333
|
-
Timeout.timeout(timeout) do
|
334
|
-
yield
|
335
|
-
end
|
336
|
-
}.should_not raise_error(Timeout::Error)
|
337
|
-
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
shared_examples_for 'JobQueue adapter basic' do
|
4
|
+
it "should write onto queue and fetch stuff back off" do
|
5
|
+
JobQueue.put("hello")
|
6
|
+
|
7
|
+
JobQueue.subscribe do |job|
|
8
|
+
@job = job
|
9
|
+
throw :stop
|
10
|
+
end
|
11
|
+
|
12
|
+
@job.should == "hello"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should pull items off in the order the were added" do
|
16
|
+
JobQueue.put("foo")
|
17
|
+
JobQueue.put("bar")
|
18
|
+
|
19
|
+
retrieved_jobs = []
|
20
|
+
|
21
|
+
begin
|
22
|
+
Timeout::timeout(0.5) do
|
23
|
+
JobQueue.subscribe do |job|
|
24
|
+
retrieved_jobs << job
|
25
|
+
end
|
26
|
+
end
|
27
|
+
rescue Timeout::Error
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
retrieved_jobs[0].should == "foo"
|
32
|
+
retrieved_jobs[1].should == "bar"
|
33
|
+
retrieved_jobs[2].should == nil
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
shared_examples_for "JobQueue adapter named queues" do
|
38
|
+
it "should put jobs onto a named queue and only read off that queue" do
|
39
|
+
JobQueue.put("hello", :queue => "test")
|
40
|
+
lambda {
|
41
|
+
Timeout.timeout(0.1) do
|
42
|
+
JobQueue.subscribe(:queue => "foo") do |job|
|
43
|
+
throw :stop
|
44
|
+
end
|
45
|
+
end
|
46
|
+
}.should raise_error(Timeout::Error)
|
47
|
+
should_not_timeout {
|
48
|
+
JobQueue.subscribe(:queue => "test") do |body|
|
49
|
+
body.should == 'hello'
|
50
|
+
throw :stop
|
51
|
+
end
|
52
|
+
}
|
53
|
+
end
|
54
|
+
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/test_adapter_spec.rb
CHANGED
@@ -1,39 +1,18 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
require File.dirname(__FILE__) + '/common_adapter_spec'
|
2
3
|
|
3
4
|
describe JobQueue::TestAdapter do
|
4
5
|
before :all do
|
5
6
|
JobQueue.adapter = JobQueue::TestAdapter.new
|
6
7
|
end
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
JobQueue.subscribe do |job|
|
12
|
-
@job = job
|
13
|
-
throw :stop
|
14
|
-
end
|
15
|
-
|
16
|
-
@job.should == "hello"
|
17
|
-
end
|
9
|
+
it_should_behave_like 'JobQueue adapter basic'
|
10
|
+
|
11
|
+
it_should_behave_like "JobQueue adapter named queues"
|
18
12
|
|
19
|
-
it "should
|
20
|
-
JobQueue.
|
21
|
-
JobQueue.put(
|
22
|
-
|
23
|
-
retrieved_jobs = []
|
24
|
-
|
25
|
-
begin
|
26
|
-
Timeout::timeout(0.5) do
|
27
|
-
JobQueue.subscribe do |job|
|
28
|
-
retrieved_jobs << job
|
29
|
-
end
|
30
|
-
end
|
31
|
-
rescue Timeout::Error
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
retrieved_jobs[0].should == "foo"
|
36
|
-
retrieved_jobs[1].should == "bar"
|
37
|
-
retrieved_jobs[2].should == nil
|
13
|
+
it "should allow queue inspection as a hash" do
|
14
|
+
JobQueue.adapter.queue.should == []
|
15
|
+
JobQueue.put('hello')
|
16
|
+
JobQueue.adapter.queue.should == ['hello']
|
38
17
|
end
|
39
18
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mloughran-job_queue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martyn Loughran
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-06-
|
12
|
+
date: 2009-06-24 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -34,6 +34,7 @@ files:
|
|
34
34
|
- lib/job_queue.rb
|
35
35
|
- spec/amqp_adapter_spec.rb
|
36
36
|
- spec/beanstalk_adapter_spec.rb
|
37
|
+
- spec/common_adapter_spec.rb
|
37
38
|
- spec/job_queue_spec.rb
|
38
39
|
- spec/spec_helper.rb
|
39
40
|
- spec/test_adapter_spec.rb
|