resque-scheduler 1.9.5 → 1.9.6

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY.md CHANGED
@@ -1,7 +1,12 @@
1
- ## 1.9.5 (???)
1
+ ## 1.9.6 (2010-10-08)
2
+
3
+ * Support for custom job classes (like resque-status) (mattetti)
4
+
5
+ ## 1.9.5 (2010-09-09)
2
6
 
3
7
  * Updated scheduler rake task to allow for an alternate setup task
4
8
  to avoid loading the entire stack. (chewbranca)
9
+ * Fixed sig issue on win32 (#25)
5
10
 
6
11
  ## 1.9.4 (2010-07-29)
7
12
 
data/README.markdown CHANGED
@@ -138,6 +138,40 @@ Multiple envs are allowed, separated by commas:
138
138
  NOTE: If you specify the `rails_env` arg without setting RAILS_ENV as an
139
139
  environment variable, the job won't be loaded.
140
140
 
141
+ ### Support for customized Job classes
142
+
143
+ Some Resque extensions like [resque-status](http://github.com/quirkey/resque-status) use custom job classes with a slightly different API signature.
144
+ Resque-scheduler isn't trying to support all existing and future custom job classes, instead it supports a schedule flag so you can extend your custom class
145
+ and make it support scheduled job.
146
+
147
+ Let's pretend we have a JobWithStatus class called FakeLeaderboard
148
+
149
+ class FakeLeaderboard < Resque::JobWithStatus
150
+ def perfom
151
+ # do something and keep track of the status
152
+ end
153
+ end
154
+
155
+ create_fake_leaderboards:
156
+ cron: "30 6 * * 1"
157
+ queue: scoring
158
+ custom_job_class: FakeLeaderboard
159
+ args:
160
+ rails_env: demo
161
+ description: "This job will auto-create leaderboards for our online demo and the status will update as the worker makes progress"
162
+
163
+ If your extension doesn't support scheduled job, you would need to extend the custom job class to support the #scheduled method:
164
+
165
+ module Resque
166
+ class JobWithStatus
167
+ # Wrapper API to forward a Resque::Job creation API call into a JobWithStatus call.
168
+ def self.scheduled(queue, klass, *args)
169
+ create(args)
170
+ end
171
+ end
172
+ end
173
+
174
+
141
175
  Resque-web additions
142
176
  --------------------
143
177
 
@@ -199,6 +233,10 @@ any nonempty value, they will take effect. `VERBOSE` simply dumps more output
199
233
  to stdout. `MUTE` does the opposite and silences all output. `MUTE` supercedes
200
234
  `VERBOSE`.
201
235
 
236
+ NOTE: You DO NOT want to run >1 instance of the scheduler. Doing so will result
237
+ in the same job being queued more than once. You only need one instnace of the
238
+ scheduler running per resque instance (regardless of number of machines).
239
+
202
240
 
203
241
  Plagurism alert
204
242
  ---------------
data/Rakefile CHANGED
@@ -1,4 +1,4 @@
1
- load 'tasks/resque_scheduler.rake'
1
+ load File.expand_path('tasks/resque_scheduler.rake')
2
2
 
3
3
  $LOAD_PATH.unshift 'lib'
4
4
 
@@ -7,7 +7,7 @@ task :default => :test
7
7
  desc "Run tests"
8
8
  task :test do
9
9
  Dir['test/*_test.rb'].each do |f|
10
- require f
10
+ require File.expand_path(f)
11
11
  end
12
12
  end
13
13
 
@@ -97,7 +97,13 @@ module Resque
97
97
  if item = Resque.next_item_for_timestamp(timestamp)
98
98
  log "queuing #{item['class']} [delayed]"
99
99
  queue = item['queue'] || Resque.queue_from_class(constantize(item['class']))
100
- Job.create(queue, item['class'], *item['args'])
100
+ # Support custom job classes like job with status
101
+ if (job_klass = item['custom_job_class']) && (job_klass != 'Resque::Job')
102
+ # custom job classes not supporting the same API calls must implement the #schedule method
103
+ constantize(job_klass).scheduled(queue, item['class'], *item['args'])
104
+ else
105
+ Resque::Job.create(queue, item['class'], *item['args'])
106
+ end
101
107
  end
102
108
  end
103
109
  # continue processing until there are no more ready items in this timestamp
@@ -116,7 +122,13 @@ module Resque
116
122
  klass_name = config['class'] || config[:class]
117
123
  params = args.nil? ? [] : Array(args)
118
124
  queue = config['queue'] || config[:queue] || Resque.queue_from_class(constantize(klass_name))
119
- Resque::Job.create(queue, klass_name, *params)
125
+ # Support custom job classes like job with status
126
+ if (job_klass = config['custom_job_class']) && (job_klass != 'Resque::Job')
127
+ # custom job classes not supporting the same API calls must implement the #schedule method
128
+ constantize(job_klass).scheduled(queue, klass_name, *params)
129
+ else
130
+ Resque::Job.create(queue, klass_name, *params)
131
+ end
120
132
  end
121
133
 
122
134
  def rufus_scheduler
@@ -1,3 +1,3 @@
1
1
  module ResqueScheduler
2
- Version = '1.9.5'
2
+ Version = '1.9.6'
3
3
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{resque-scheduler}
8
- s.version = "1.9.5"
8
+ s.version = "1.9.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ben VandenBos"]
12
- s.date = %q{2010-09-09}
12
+ s.date = %q{2010-10-08}
13
13
  s.description = %q{Light weight job scheduling on top of Resque.
14
14
  Adds methods enqueue_at/enqueue_in to schedule jobs in the future.
15
15
  Also supports queueing jobs on a fixed, cron-like schedule.}
@@ -2,6 +2,10 @@ require File.dirname(__FILE__) + '/test_helper'
2
2
 
3
3
  class Resque::SchedulerTest < Test::Unit::TestCase
4
4
 
5
+ class FakeJob
6
+ def self.scheduled(queue, klass, *args); end
7
+ end
8
+
5
9
  def setup
6
10
  Resque::Scheduler.clear_schedule!
7
11
  end
@@ -15,6 +19,11 @@ class Resque::SchedulerTest < Test::Unit::TestCase
15
19
  Resque::Job.stubs(:create).once.returns(true).with(:ivar, 'SomeIvarJob', '/tmp')
16
20
  Resque::Scheduler.enqueue_from_config('cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp")
17
21
  end
22
+
23
+ def test_enqueue_from_config_with_custom_class_job_in_the_resque_queue
24
+ FakeJob.stubs(:scheduled).once.returns(true).with(:ivar, 'SomeIvarJob', '/tmp')
25
+ Resque::Scheduler.enqueue_from_config('cron' => "* * * * *", 'class' => 'SomeIvarJob', 'custom_job_class' => 'Resque::SchedulerTest::FakeJob', 'args' => "/tmp")
26
+ end
18
27
 
19
28
  def test_enqueue_from_config_puts_stuff_in_the_resque_queue_when_env_match
20
29
  # The job should be loaded : its rails_env config matches the RAILS_ENV variable:
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- hash: 57
4
+ hash: 63
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 9
9
- - 5
10
- version: 1.9.5
9
+ - 6
10
+ version: 1.9.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ben VandenBos
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-09 00:00:00 -07:00
18
+ date: 2010-10-08 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency