Sha256: 5c719f2eab7098f0c7724c3464d9e61680cab0dbf08e13b1dfaa6e5b3554bc9d
Contents?: true
Size: 1.66 KB
Versions: 2
Compression:
Stored size: 1.66 KB
Contents
module Backburner # A single backburner job which can be processed and removed by the worker class Job include Backburner::Helpers # Raises when a job times out class JobTimeout < RuntimeError; end class JobNotFound < RuntimeError; end attr_accessor :task, :body, :name, :args # Construct a job to be parsed and processed # # task is a reserved object containing the json body in the form of # { :class => "NewsletterSender", :args => ["foo@bar.com"] } # # @example # Backburner::Job.new(payload) # def initialize(task) @task = task @body = task.body.is_a?(Hash) ? task.body : JSON.parse(task.body) @name, @args = body["class"], body["args"] end # Processes a job and handles any failure, deleting the job once complete # # @example # @task.process # def process timeout_job_after(task.ttr - 1) { job_class.perform(*args) } task.delete end # Bury a job out of the active queue if that job fails def bury task.bury end protected # Returns the class for the job handler # # @example # job_class # => NewsletterSender # def job_class handler = constantize(self.name) rescue nil raise(JobNotFound, self.name) unless handler handler end # Timeout job within specified block after given time. # # @example # timeout_job_after(3) { do_something! } # def timeout_job_after(secs, &block) begin Timeout::timeout(secs) { yield } rescue Timeout::Error raise JobTimeout, "#{name} hit #{secs}s timeout" end end end # Job end # Backburner
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
backburner-0.1.1 | lib/backburner/job.rb |
backburner-0.1.0 | lib/backburner/job.rb |