Class: Resque::Plugins::Pertry

Inherits:
Object
  • Object
show all
Includes:
Resque::Pertry::Persistence, Resque::Pertry::Retry
Defined in:
lib/resque/plugins/pertry.rb

Constant Summary collapse

JOB_HASH =
:_pertry

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Resque::Pertry::Retry

#delay_before_retry, #exception_whitelisted?, #max_attempt_reached?, #retry!, #retry?, #ttl_expired?

Methods included from Resque::Pertry::Persistence

#audit_id, #model, #queue_time

Constructor Details

#initialize(arguments, job_properties) ⇒ Pertry

Returns a new instance of Pertry.



89
90
91
92
# File 'lib/resque/plugins/pertry.rb', line 89

def initialize(arguments, job_properties)
  set_job_arguments(arguments)
  set_job_properties(job_properties)
end

Instance Attribute Details

#exception_handledObject (readonly)

Returns the value of attribute exception_handled.



9
10
11
# File 'lib/resque/plugins/pertry.rb', line 9

def exception_handled
  @exception_handled
end

Class Method Details

.enqueue(args = {}) ⇒ Object

Enqueue a job

Raises:

  • (ArgumentError)


14
15
16
17
18
19
20
21
22
# File 'lib/resque/plugins/pertry.rb', line 14

def enqueue(args = {})
  raise ArgumentError, "Invalid arguments, expecting a Hash but got: #{args.inspect}" unless Hash === args

  args.symbolize_keys!
  args = check_arguments(args)
  raise ArgumentError, "Invalid arguments, #{JOB_HASH} is a reserved argument!" if args.key?(JOB_HASH)

  Resque.enqueue(self, args)
end

.in_queue(queue) ⇒ Object

Specificy job queue



45
46
47
# File 'lib/resque/plugins/pertry.rb', line 45

def in_queue(queue)
  @queue = queue.to_sym
end

.instance(args = {}) ⇒ Object

Raises:

  • (ArgumentError)


37
38
39
40
41
42
# File 'lib/resque/plugins/pertry.rb', line 37

def instance(args = {})
  args.symbolize_keys!
  raise ArgumentError, "Job is not supported, missing key #{JOB_HASH} from payload #{args.inspect}" unless args.key?(JOB_HASH)

  new(check_arguments(args), args[JOB_HASH])
end

.needs(*arguments) ⇒ Object

Define required job attributes



55
56
57
58
59
60
61
62
63
64
65
# File 'lib/resque/plugins/pertry.rb', line 55

def needs(*arguments)
  arguments.each do |argument|
    if Hash === argument
      argument.each do |key, default|
        self.required_arguments << { :name => key, :default => default }
      end
    else
      self.required_arguments << { :name => argument }
    end
  end
end

.perform(args = {}) ⇒ Object

Perform a job

Raises:

  • (ArgumentError)


25
26
27
28
29
30
31
32
33
34
35
# File 'lib/resque/plugins/pertry.rb', line 25

def perform(args = {})
  raise ArgumentError, "Invalid arguments, expecting a Hash but got: #{args.inspect}" unless Hash === args

  begin
    job = instance(args)
    job.perform
  rescue => e
    job.handle_exception(e)
    raise unless job.exception_handled
  end
end

.queueObject

Get job queue



50
51
52
# File 'lib/resque/plugins/pertry.rb', line 50

def queue
  @queue or raise ArgumentError, "No queue defined for job #{self.name}!"
end

.required_argumentsObject

List of required attributes



68
69
70
# File 'lib/resque/plugins/pertry.rb', line 68

def required_arguments
  @required_arguments ||= []
end

Instance Method Details

#argumentsObject



126
127
128
# File 'lib/resque/plugins/pertry.rb', line 126

def arguments
  @_arguments
end

#complete!Object Also known as: complete_job!

mark job as complete



121
122
123
# File 'lib/resque/plugins/pertry.rb', line 121

def complete!
  Resque::Pertry::ResquePertryPersistence.finnish_job(self.class, payload)
end

#exception_handled!Object



110
111
112
# File 'lib/resque/plugins/pertry.rb', line 110

def exception_handled!
  @exception_handled = true
end

#fail!Object Also known as: fail_job!

mark job as failed, won’t be retried



115
116
117
# File 'lib/resque/plugins/pertry.rb', line 115

def fail!
  Resque::Pertry::ResquePertryPersistence.fail_job(self.class, payload)
end

#handle_exception(exception) ⇒ Object



99
100
101
102
103
104
# File 'lib/resque/plugins/pertry.rb', line 99

def handle_exception(exception)
  # we don't handle exceptions by default, leave it for resque
  # when overridding this method, if you decide you want to completely
  # handle it, and not pass it back to resque, you'll need to call
  # exception_handled!
end

#payloadObject



130
131
132
# File 'lib/resque/plugins/pertry.rb', line 130

def payload
  @_arguments.merge(JOB_HASH => @_job_properties)
end

#performObject

Perform method needs to be overridden in job classes

Raises:

  • (NoMethodError)


95
96
97
# File 'lib/resque/plugins/pertry.rb', line 95

def perform
  raise NoMethodError, "No method #{self.class.name}#perform defined!"
end