Module: SuckerPunch::Job::ClassMethods

Defined in:
lib/sucker_punch/job.rb,
lib/sucker_punch/testing/inline.rb

Instance Method Summary collapse

Instance Method Details

#__run_perform(*args) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/sucker_punch/job.rb', line 52

def __run_perform(*args)
  SuckerPunch::Counter::Busy.new(self.to_s).increment
  result = self.new.perform(*args)
  SuckerPunch::Counter::Processed.new(self.to_s).increment
  result
rescue => ex
  SuckerPunch::Counter::Failed.new(self.to_s).increment
  SuckerPunch.exception_handler.call(ex, self, args)
ensure
  SuckerPunch::Counter::Busy.new(self.to_s).decrement
end

#perform_async(*args) ⇒ Object



33
34
35
36
37
# File 'lib/sucker_punch/job.rb', line 33

def perform_async(*args)
  return unless SuckerPunch::RUNNING.true?
  queue = SuckerPunch::Queue.find_or_create(self.to_s, num_workers)
  queue.post(args) { |job_args| __run_perform(*job_args) }
end

#perform_in(_, *args) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/sucker_punch/job.rb', line 39

def perform_in(interval, *args)
  return unless SuckerPunch::RUNNING.true?
  queue = SuckerPunch::Queue.find_or_create(self.to_s, num_workers)
  job = Concurrent::ScheduledTask.execute(interval.to_f, args: args, executor: queue) do
    __run_perform(*args)
  end
  job.pending?
end

#workers(num) ⇒ Object



48
49
50
# File 'lib/sucker_punch/job.rb', line 48

def workers(num)
  self.num_workers = num
end