resque_spec 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,12 +1,14 @@
1
1
  ResqueSpec
2
2
  ==========
3
3
 
4
- A simple RSpec and Cucumber matcher for Resque.enqueue and Resque.enqueue_at (from `ResqueScheduler`), loosely based on
4
+ A simple RSpec and Cucumber matcher for Resque.enqueue and Resque.enqueue_at
5
+ (from `ResqueScheduler`), loosely based on
5
6
  [http://github.com/justinweiss/resque_unit](http://github.com/justinweiss/resque_unit).
6
7
 
7
- This should work with `Resque v1.6.0` and up and `RSpec v2.0.0.beta.12` and up.
8
+ This should work with `Resque v1.15.0` and up and `RSpec v2.5.0` and up.
8
9
 
9
- If you are using `RSpec ~> 1.3.0`, you should use version `~> 0.2.0`.
10
+ If you are using `RSpec ~> 1.3.0`, you should use version `~> 0.2.0`. This
11
+ branch is not actively maintained.
10
12
 
11
13
  Install
12
14
  -------
@@ -172,6 +174,19 @@ Or I write this spec using the `with_resque` helper
172
174
  end
173
175
  end
174
176
 
177
+ You can turn this behavior on by setting `ResqueSpec.inline = true`.
178
+
179
+ Hooks
180
+ -----
181
+
182
+ Resque will call a hook method on your class after a Job is enqueued. Name your
183
+ class method starting with the string `after_enqueue` (you can stop there if
184
+ you want) and it will be called with the arguments to the Job after it has been
185
+ placed on the queue. When you are using ResqueSpec, your `after_enqueue` hook
186
+ will be called.
187
+
188
+ The hooks around `perform` are not support by ResqueSpec (contributions welcome!)
189
+
175
190
  Note on Patches/Pull Requests
176
191
  =============================
177
192
 
@@ -186,4 +201,4 @@ Note on Patches/Pull Requests
186
201
  Copyright
187
202
  =========
188
203
 
189
- Copyright (c) 2010 Les Hill. See LICENSE for details.
204
+ Copyright (c) 2010-2011 Les Hill. See LICENSE for details.
data/lib/resque_spec.rb CHANGED
@@ -1,8 +1,63 @@
1
- require 'resque_spec/resque_spec'
2
- require 'resque_spec/resque_scheduler_spec'
1
+ require 'resque_spec/ext'
3
2
  require 'resque_spec/helpers'
4
3
  require 'resque_spec/matchers'
5
4
 
5
+ module ResqueSpec
6
+ extend self
7
+
8
+ attr_accessor :inline
9
+
10
+ def dequeue(queue_name, klass, *args)
11
+ queue_by_name(queue_name).delete_if do |job|
12
+ job[:klass] == klass.to_s && args.empty? || job[:args] == args
13
+ end
14
+ end
15
+
16
+ def enqueue(queue_name, klass, *args)
17
+ if inline
18
+ klass.send(:perform, *args)
19
+ else
20
+ queue_by_name(queue_name) << { :klass => klass.to_s, :args => args }
21
+ end
22
+ end
23
+
24
+ def queue_by_name(name)
25
+ queues[name]
26
+ end
27
+
28
+ def queue_for(klass)
29
+ queue_by_name(queue_name(klass))
30
+ end
31
+
32
+ def queue_name(klass)
33
+ if klass.is_a?(String)
34
+ klass = Kernel.const_get(klass) rescue nil
35
+ end
36
+
37
+ name_from_instance_var(klass) or
38
+ name_from_queue_accessor(klass) or
39
+ raise ::Resque::NoQueueError.new("Jobs must be placed onto a queue.")
40
+ end
41
+
42
+ def queues
43
+ @queues ||= Hash.new {|h,k| h[k] = []}
44
+ end
45
+
46
+ def reset!
47
+ queues.clear
48
+ end
49
+
50
+ private
51
+
52
+ def name_from_instance_var(klass)
53
+ klass.instance_variable_get(:@queue)
54
+ end
55
+
56
+ def name_from_queue_accessor(klass)
57
+ klass.respond_to?(:queue) and klass.queue
58
+ end
59
+ end
60
+
6
61
  config = RSpec.configuration
7
62
  config.include ResqueSpec::Helpers
8
63
 
@@ -0,0 +1,22 @@
1
+ require 'resque'
2
+
3
+ module Resque
4
+ class Job
5
+ def self.create(queue, klass, *args)
6
+ raise ::Resque::NoQueueError.new("Jobs must be placed onto a queue.") if !queue
7
+ raise ::Resque::NoClassError.new("Jobs must be given a class.") if klass.to_s.empty?
8
+ ResqueSpec.enqueue(queue, klass, *args)
9
+ end
10
+
11
+ def self.destroy(queue, klass, *args)
12
+ raise ::Resque::NoQueueError.new("Jobs must have been placed onto a queue.") if !queue
13
+ raise ::Resque::NoClassError.new("Jobs must have been given a class.") if klass.to_s.empty?
14
+
15
+ old_count = ResqueSpec.queues[queue].size
16
+
17
+ ResqueSpec.dequeue(queue, klass, *args)
18
+
19
+ old_count - ResqueSpec.queues[queue].size
20
+ end
21
+ end
22
+ end
@@ -2,26 +2,11 @@ module ResqueSpec
2
2
  module Helpers
3
3
 
4
4
  def with_resque
5
- enable_perform
6
- yield
7
- disable_perform
8
- end
9
-
10
- private
11
-
12
- def enable_perform
13
- ::Resque.module_eval do
14
- def self.enqueue(klass, *args)
15
- klass.perform(*args)
16
- end
17
- end
18
- end
19
-
20
- def disable_perform
21
- ::Resque.module_eval do
22
- def self.enqueue(klass, *args)
23
- ::Resque::Job.create(ResqueSpec.queue_name(klass), klass, *args)
24
- end
5
+ begin
6
+ ResqueSpec.inline = true
7
+ yield
8
+ ensure
9
+ ResqueSpec.inline = false
25
10
  end
26
11
  end
27
12
  end
@@ -1,18 +1,16 @@
1
1
  require 'resque_spec'
2
2
 
3
3
  module ResqueSpec
4
-
5
4
  def schedule_for(klass)
6
5
  name = "#{queue_name(klass)}_scheduled"
7
6
  queues[name]
8
7
  end
9
8
 
10
- module ResqueScheduler
9
+ module SchedulerExt
11
10
  def enqueue_at(time, klass, *args)
12
11
  ResqueSpec.schedule_for(klass) << {:klass => klass.to_s, :time => time, :args => args}
13
12
  end
14
13
  end
15
-
16
14
  end
17
15
 
18
- Resque.extend(ResqueSpec::ResqueScheduler)
16
+ Resque.extend(ResqueSpec::SchedulerExt)
@@ -1,3 +1,3 @@
1
1
  module ResqueSpec
2
- VERSION = "0.5.1"
2
+ VERSION = "0.6.0"
3
3
  end
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque_spec
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
5
4
  prerelease:
6
- segments:
7
- - 0
8
- - 5
9
- - 1
10
- version: 0.5.1
5
+ version: 0.6.0
11
6
  platform: ruby
12
7
  authors:
13
8
  - Les Hill
@@ -15,7 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-03-26 00:00:00 -07:00
13
+ date: 2011-04-08 00:00:00 -07:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
@@ -26,12 +21,7 @@ dependencies:
26
21
  requirements:
27
22
  - - ">="
28
23
  - !ruby/object:Gem::Version
29
- hash: 15
30
- segments:
31
- - 1
32
- - 6
33
- - 0
34
- version: 1.6.0
24
+ version: 1.15.0
35
25
  type: :runtime
36
26
  version_requirements: *id001
37
27
  - !ruby/object:Gem::Dependency
@@ -42,11 +32,6 @@ dependencies:
42
32
  requirements:
43
33
  - - ">="
44
34
  - !ruby/object:Gem::Version
45
- hash: 27
46
- segments:
47
- - 2
48
- - 5
49
- - 0
50
35
  version: 2.5.0
51
36
  type: :runtime
52
37
  version_requirements: *id002
@@ -59,10 +44,10 @@ extensions: []
59
44
  extra_rdoc_files: []
60
45
 
61
46
  files:
47
+ - lib/resque_spec/ext.rb
62
48
  - lib/resque_spec/helpers.rb
63
49
  - lib/resque_spec/matchers.rb
64
- - lib/resque_spec/resque_scheduler_spec.rb
65
- - lib/resque_spec/resque_spec.rb
50
+ - lib/resque_spec/scheduler.rb
66
51
  - lib/resque_spec/version.rb
67
52
  - lib/resque_spec.rb
68
53
  - LICENSE
@@ -82,20 +67,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
82
67
  requirements:
83
68
  - - ">="
84
69
  - !ruby/object:Gem::Version
85
- hash: 3
86
- segments:
87
- - 0
88
70
  version: "0"
89
71
  required_rubygems_version: !ruby/object:Gem::Requirement
90
72
  none: false
91
73
  requirements:
92
74
  - - ">="
93
75
  - !ruby/object:Gem::Version
94
- hash: 23
95
- segments:
96
- - 1
97
- - 3
98
- - 6
99
76
  version: 1.3.6
100
77
  requirements: []
101
78
 
@@ -1,84 +0,0 @@
1
- require 'resque'
2
-
3
- module ResqueSpec
4
- extend self
5
-
6
- def queue_by_name(name)
7
- queues[name]
8
- end
9
-
10
- def queue_for(klass)
11
- queue_by_name(queue_name(klass))
12
- end
13
-
14
- def queue_name(klass)
15
- if klass.is_a?(String)
16
- klass = Kernel.const_get(klass) rescue nil
17
- end
18
-
19
- name_from_instance_var(klass) or
20
- name_from_queue_accessor(klass) or
21
- raise ::Resque::NoQueueError.new("Jobs must be placed onto a queue.")
22
- end
23
-
24
- def queues
25
- @queues ||= Hash.new {|h,k| h[k] = []}
26
- end
27
-
28
- def reset!
29
- queues.clear
30
- end
31
-
32
- private
33
-
34
- def name_from_instance_var(klass)
35
- klass.instance_variable_get(:@queue)
36
- end
37
-
38
- def name_from_queue_accessor(klass)
39
- klass.respond_to?(:queue) and klass.queue
40
- end
41
-
42
- module Resque
43
- extend self
44
-
45
- def reset!
46
- ResqueSpec.reset!
47
- end
48
-
49
- module Job
50
- extend self
51
-
52
- def self.included(base)
53
- base.instance_eval do
54
-
55
- def create(queue, klass, *args)
56
- raise ::Resque::NoQueueError.new("Jobs must be placed onto a queue.") if !queue
57
- raise ::Resque::NoClassError.new("Jobs must be given a class.") if klass.to_s.empty?
58
- ResqueSpec.queues[queue] << {:klass => klass.to_s, :args => args}
59
- end
60
-
61
- def destroy(queue, klass, *args)
62
- raise ::Resque::NoQueueError.new("Jobs must have been placed onto a queue.") if !queue
63
- raise ::Resque::NoClassError.new("Jobs must have been given a class.") if klass.to_s.empty?
64
-
65
- old_count = ResqueSpec.queues[queue].size
66
-
67
- if args.empty?
68
- ResqueSpec.queues[queue].delete_if{ |job| job[:klass] == klass.to_s }
69
- else
70
- ResqueSpec.queues[queue].delete_if{ |job| job[:klass] == klass.to_s and job[:args].to_a == args.to_a }
71
- end
72
- old_count - ResqueSpec.queues[queue].size
73
- end
74
-
75
- end
76
- end
77
-
78
- end
79
-
80
- end
81
- end
82
-
83
- Resque.extend ResqueSpec::Resque
84
- Resque::Job.send :include, ResqueSpec::Resque::Job