Class: Resque::Job

Inherits:
Object
  • Object
show all
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

Class Method Summary collapse

Instance Method Summary collapse

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

#payloadObject (readonly)

This job’s associated payload object.



26
27
28
# File 'lib/resque/job.rb', line 26

def payload
  @payload
end

#queueObject (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

#workerObject

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

#argsObject

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

#inspectObject

String representation



85
86
87
88
# File 'lib/resque/job.rb', line 85

def inspect
  obj = @payload
  "(Job{%s} | %s | %s)" % [ @queue, obj['class'], obj['args'].inspect ]
end

#payload_classObject

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

#performObject

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