Class: Resque::Job
- Inherits:
-
Object
- Object
- Resque::Job
- Extended by:
- Helpers
- Includes:
- Helpers
- Defined in:
- lib/resque/job.rb
Overview
A Resque::Job represents a unit of work. Each job lives on a single queue and has an associated payload object. The payload is a hash with two attributes: class and args. The class is the name of the Ruby class which should be used to run the job. The args are an array of arguments which should be passed to the Ruby class’s perform class-level method.
You can manually run a job using this code:
job = Resque::Job.reserve(:high)
klass = Resque::Job.constantize(job.payload['class'])
klass.perform(*job.payload['args'])
Instance Attribute Summary collapse
-
#payload ⇒ Object
readonly
This job’s associated payload object.
-
#queue ⇒ Object
readonly
The name of the queue from which this job was pulled (or is to be placed).
-
#worker ⇒ Object
The worker object which is currently processing this job.
Class Method Summary collapse
-
.create(queue, klass, *args) ⇒ Object
Creates a job by placing it on a queue.
-
.reserve(queue) ⇒ Object
Given a string queue name, returns an instance of Resque::Job if any jobs are available.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Equality.
-
#args ⇒ Object
Returns an array of args represented in this job’s payload.
-
#fail(exception) ⇒ Object
Given an exception object, hands off the needed parameters to the Failure module.
-
#initialize(queue, payload) ⇒ Job
constructor
A new instance of Job.
-
#inspect ⇒ Object
String representation.
-
#payload_class ⇒ Object
Returns the actual class constant represented in this job’s payload.
-
#perform ⇒ Object
Attempts to perform the work represented by this job instance.
-
#recreate ⇒ Object
Creates an identical job, essentially placing this job back on the queue.
Methods included from Helpers
classify, constantize, decode, encode, redis
Constructor Details
#initialize(queue, payload) ⇒ Job
Returns a new instance of Job.
28 29 30 31 |
# File 'lib/resque/job.rb', line 28 def initialize(queue, payload) @queue = queue @payload = payload end |
Instance Attribute Details
#payload ⇒ Object (readonly)
This job’s associated payload object.
26 27 28 |
# File 'lib/resque/job.rb', line 26 def payload @payload end |
#queue ⇒ Object (readonly)
The name of the queue from which this job was pulled (or is to be placed)
23 24 25 |
# File 'lib/resque/job.rb', line 23 def queue @queue end |
#worker ⇒ Object
The worker object which is currently processing this job.
19 20 21 |
# File 'lib/resque/job.rb', line 19 def worker @worker end |
Class Method Details
.create(queue, klass, *args) ⇒ Object
Creates a job by placing it on a queue. Expects a string queue name, a string class name, and an optional array of arguments to pass to the class’ perform method.
Raises an exception if no queue or class is given.
38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/resque/job.rb', line 38 def self.create(queue, klass, *args) if queue.to_s.empty? raise NoQueueError.new("Jobs must be placed onto a queue.") end if klass.to_s.empty? raise NoClassError.new("Jobs must be given a class.") end Resque.push(queue, :class => klass.to_s, :args => args) end |
.reserve(queue) ⇒ Object
Given a string queue name, returns an instance of Resque::Job if any jobs are available. If not, returns nil.
52 53 54 55 |
# File 'lib/resque/job.rb', line 52 def self.reserve(queue) return unless payload = Resque.pop(queue) new(queue, payload) end |
Instance Method Details
#==(other) ⇒ Object
Equality
97 98 99 100 101 |
# File 'lib/resque/job.rb', line 97 def ==(other) queue == other.queue && payload_class = other.payload_class && args == other.args end |
#args ⇒ Object
Returns an array of args represented in this job’s payload.
70 71 72 |
# File 'lib/resque/job.rb', line 70 def args @payload['args'] end |
#fail(exception) ⇒ Object
Given an exception object, hands off the needed parameters to the Failure module.
76 77 78 79 80 81 82 |
# File 'lib/resque/job.rb', line 76 def fail(exception) Failure.create \ :payload => payload, :exception => exception, :worker => worker, :queue => queue end |
#inspect ⇒ Object
String representation
91 92 93 94 |
# File 'lib/resque/job.rb', line 91 def inspect obj = @payload "(Job{%s} | %s | %s)" % [ @queue, obj['class'], obj['args'].inspect ] end |
#payload_class ⇒ Object
Returns the actual class constant represented in this job’s payload.
65 66 67 |
# File 'lib/resque/job.rb', line 65 def payload_class @payload_class ||= constantize(@payload['class']) end |
#perform ⇒ Object
Attempts to perform the work represented by this job instance. Calls #perform on the class given in the payload with the arguments given in the payload.
60 61 62 |
# File 'lib/resque/job.rb', line 60 def perform args ? payload_class.perform(*args) : payload_class.perform end |
#recreate ⇒ Object
Creates an identical job, essentially placing this job back on the queue.
86 87 88 |
# File 'lib/resque/job.rb', line 86 def recreate self.class.create(queue, payload_class, *args) end |