resque_unit 0.2.7 → 0.2.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/lib/resque_unit.rb +7 -1
- data/lib/resque_unit/helpers.rb +30 -0
- data/lib/resque_unit/resque.rb +12 -10
- data/lib/resque_unit/scheduler.rb +1 -1
- data/test/resque_unit_test.rb +4 -4
- data/test/sample_jobs.rb +1 -1
- metadata +23 -6
data/lib/resque_unit.rb
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
module ResqueUnit
|
2
2
|
end
|
3
3
|
|
4
|
+
begin
|
5
|
+
require 'yajl'
|
6
|
+
rescue LoadError
|
7
|
+
require 'json'
|
8
|
+
end
|
9
|
+
|
4
10
|
require 'test/unit'
|
11
|
+
require 'resque_unit/helpers'
|
5
12
|
require 'resque_unit/resque'
|
6
13
|
require 'resque_unit/errors'
|
7
14
|
require 'resque_unit/assertions'
|
8
15
|
|
9
|
-
|
10
16
|
Test::Unit::TestCase.send(:include, ResqueUnit::Assertions)
|
11
17
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Resque
|
2
|
+
module Helpers
|
3
|
+
# Given a Ruby object, returns a string suitable for storage in a
|
4
|
+
# queue.
|
5
|
+
def encode(object)
|
6
|
+
if defined? Yajl
|
7
|
+
Yajl::Encoder.encode(object)
|
8
|
+
else
|
9
|
+
object.to_json
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# Given a string, returns a Ruby object.
|
14
|
+
def decode(object)
|
15
|
+
return unless object
|
16
|
+
|
17
|
+
if defined? Yajl
|
18
|
+
begin
|
19
|
+
Yajl::Parser.parse(object, :check_utf8 => false)
|
20
|
+
rescue Yajl::ParseError
|
21
|
+
end
|
22
|
+
else
|
23
|
+
begin
|
24
|
+
JSON.parse(object)
|
25
|
+
rescue JSON::ParserError
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/resque_unit/resque.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
# The fake Resque class. This needs to be loaded after the real Resque
|
2
2
|
# for the assertions in +ResqueUnit::Assertions+ to work.
|
3
3
|
module Resque
|
4
|
+
include Helpers
|
5
|
+
extend self
|
4
6
|
|
5
7
|
# Resets all the queues to the empty state. This should be called in
|
6
8
|
# your test's +setup+ method until I can figure out a way for it to
|
7
9
|
# automatically be called.
|
8
10
|
#
|
9
11
|
# If <tt>queue_name</tt> is given, then resets only that queue.
|
10
|
-
def
|
12
|
+
def reset!(queue_name = nil)
|
11
13
|
if @queue && queue_name
|
12
14
|
@queue[queue_name] = []
|
13
15
|
else
|
@@ -19,13 +21,13 @@ module Resque
|
|
19
21
|
# element is of the form +{:klass => klass, :args => args}+ where
|
20
22
|
# +klass+ is the job's class and +args+ is an array of the arguments
|
21
23
|
# passed to the job.
|
22
|
-
def
|
24
|
+
def queue(queue_name)
|
23
25
|
self.reset! unless @queue
|
24
26
|
@queue[queue_name]
|
25
27
|
end
|
26
28
|
|
27
29
|
# Executes all jobs in all queues in an undefined order.
|
28
|
-
def
|
30
|
+
def run!
|
29
31
|
old_queue = @queue.dup
|
30
32
|
self.reset!
|
31
33
|
|
@@ -37,7 +39,7 @@ module Resque
|
|
37
39
|
end
|
38
40
|
|
39
41
|
# Executes all jobs in the given queue in an undefined order.
|
40
|
-
def
|
42
|
+
def run_for!(queue_name)
|
41
43
|
jobs = self.queue(queue_name)
|
42
44
|
self.reset!(queue_name)
|
43
45
|
|
@@ -49,7 +51,7 @@ module Resque
|
|
49
51
|
# 1. Execute all jobs in all queues in an undefined order,
|
50
52
|
# 2. Check if new jobs were announced, and execute them.
|
51
53
|
# 3. Repeat 3
|
52
|
-
def
|
54
|
+
def full_run!
|
53
55
|
until empty_queues?
|
54
56
|
@queue.each do |k, v|
|
55
57
|
while job = v.shift
|
@@ -60,26 +62,26 @@ module Resque
|
|
60
62
|
end
|
61
63
|
|
62
64
|
# Returns the size of the given queue
|
63
|
-
def
|
65
|
+
def size(queue_name)
|
64
66
|
self.reset! unless @queue
|
65
67
|
@queue[queue_name].length
|
66
68
|
end
|
67
69
|
|
68
70
|
# :nodoc:
|
69
|
-
def
|
71
|
+
def enqueue(klass, *args)
|
70
72
|
queue_name = queue_for(klass)
|
71
73
|
# Behaves like Resque, raise if no queue was specifed
|
72
74
|
raise NoQueueError.new("Jobs must be placed onto a queue.") unless queue_name
|
73
|
-
queue(queue_name) << {:klass => klass, :args => args}
|
75
|
+
queue(queue_name) << {:klass => klass, :args => decode(encode(args))}
|
74
76
|
end
|
75
77
|
|
76
78
|
# :nodoc:
|
77
|
-
def
|
79
|
+
def queue_for(klass)
|
78
80
|
klass.instance_variable_get(:@queue) || (klass.respond_to?(:queue) && klass.queue)
|
79
81
|
end
|
80
82
|
|
81
83
|
# :nodoc:
|
82
|
-
def
|
84
|
+
def empty_queues?
|
83
85
|
@queue.all? do |k, v|
|
84
86
|
v.empty?
|
85
87
|
end
|
@@ -19,7 +19,7 @@ module ResqueUnit
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def enqueue_with_timestamp(timestamp, klass, *args)
|
22
|
-
queue(queue_for(klass)) << {:klass => klass, :args => args, :timestamp => timestamp}
|
22
|
+
queue(queue_for(klass)) << {:klass => klass, :args => decode(encode(args)), :timestamp => timestamp}
|
23
23
|
end
|
24
24
|
|
25
25
|
end
|
data/test/resque_unit_test.rb
CHANGED
@@ -75,11 +75,11 @@ class ResqueUnitTest < Test::Unit::TestCase
|
|
75
75
|
|
76
76
|
context "A task that schedules a resque job with arguments" do
|
77
77
|
setup do
|
78
|
-
Resque.enqueue(JobWithArguments, 1,
|
78
|
+
Resque.enqueue(JobWithArguments, 1, :test, {:symbol => :symbol})
|
79
79
|
end
|
80
80
|
|
81
|
-
should "pass the assert_queued(job, *args) assertion if the args match" do
|
82
|
-
assert_queued(JobWithArguments, [1, "test"])
|
81
|
+
should "pass the assert_queued(job, *args) assertion if the args match and sees enqueued symbols as strings" do
|
82
|
+
assert_queued(JobWithArguments, [1, "test", {"symbol"=>"symbol"}])
|
83
83
|
end
|
84
84
|
|
85
85
|
should "pass the assert_queued(job) assertion with no args passed" do
|
@@ -98,7 +98,7 @@ class ResqueUnitTest < Test::Unit::TestCase
|
|
98
98
|
|
99
99
|
should "fail the assert_not_queued(job) assertion if the args match" do
|
100
100
|
assert_raise Test::Unit::AssertionFailedError do
|
101
|
-
assert_not_queued(JobWithArguments, [1, "test"])
|
101
|
+
assert_not_queued(JobWithArguments, [1, "test", {"symbol"=>"symbol"}])
|
102
102
|
end
|
103
103
|
end
|
104
104
|
end
|
data/test/sample_jobs.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque_unit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 8
|
10
|
+
version: 0.2.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Justin Weiss
|
@@ -15,13 +15,29 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-10
|
18
|
+
date: 2010-11-10 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: json
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 11
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 4
|
33
|
+
- 6
|
34
|
+
version: 1.4.6
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: shoulda
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
25
41
|
none: false
|
26
42
|
requirements:
|
27
43
|
- - ">="
|
@@ -31,7 +47,7 @@ dependencies:
|
|
31
47
|
- 0
|
32
48
|
version: "0"
|
33
49
|
type: :development
|
34
|
-
version_requirements: *
|
50
|
+
version_requirements: *id002
|
35
51
|
description:
|
36
52
|
email: justin@uberweiss.org
|
37
53
|
executables: []
|
@@ -43,6 +59,7 @@ extra_rdoc_files:
|
|
43
59
|
files:
|
44
60
|
- lib/resque_unit/assertions.rb
|
45
61
|
- lib/resque_unit/errors.rb
|
62
|
+
- lib/resque_unit/helpers.rb
|
46
63
|
- lib/resque_unit/resque.rb
|
47
64
|
- lib/resque_unit/scheduler.rb
|
48
65
|
- lib/resque_unit/scheduler_assertions.rb
|