class BeanstalkFarmer::Job
Attributes
args[RW]
job[RW]
name[RW]
response[RW]
Public Class Methods
handler_pool(reset=false)
click to toggle source
A pool of job handlers that can work on jobs in our queue
@param [Boolean] reset (false) When true, our collection of job handlers
will be purged from memory
@return [Hash] the collection of job handlers
# File lib/beanstalk_farmer/job.rb, line 52 def self.handler_pool(reset=false) @pool = nil if reset @pool ||= Hash.new end
new(job)
click to toggle source
@param [Beanstalk::Job] job A Beanstalk job that has been reserved to be
worked upon
# File lib/beanstalk_farmer/job.rb, line 12 def initialize(job) self.job = job set_name_and_arguments logger.info "JOB (#{name}) reserved" end
Public Instance Methods
handler()
click to toggle source
@return [#call] a class used to process the reserved job
# File lib/beanstalk_farmer/job.rb, line 19 def handler self.class.handler_pool[name] end
method_missing(name, *args, &block)
click to toggle source
Calls superclass method
# File lib/beanstalk_farmer/job.rb, line 32 def method_missing(name, *args, &block) if job.respond_to?(name) meth = job.method(name) if meth.arity > 0 meth.call(args, &block) else meth.call end else super end end
work()
click to toggle source
Performs work for this job
# File lib/beanstalk_farmer/job.rb, line 24 def work do_some_work rescue Timeout::Error handle_timeout! ensure handle_job_response end
Private Instance Methods
do_some_work()
click to toggle source
# File lib/beanstalk_farmer/job.rb, line 63 def do_some_work Timeout.timeout(job.ttr) do logger.info "JOB (#{name}) working" self.response = handler.call(args) end end
handle_job_response()
click to toggle source
# File lib/beanstalk_farmer/job.rb, line 75 def handle_job_response if response.is_a?(Array) && !response.empty? logger.info "JOB (#{name}) done. Response: #{response.inspect}" job.public_send(*response) else logger.info "JOB (#{name}) done. Deleting by default." delete end rescue NoMethodError => e logger.info "JOB (#{name}) done. Assuming delete from response: #{response.inspect}" delete end
handle_timeout!()
click to toggle source
# File lib/beanstalk_farmer/job.rb, line 70 def handle_timeout! logger.error "JOB (#{name}) out of time" raise TimedOut, "#{name} could not finish in #{job.ttr} seconds" end
set_name_and_arguments()
click to toggle source
# File lib/beanstalk_farmer/job.rb, line 59 def set_name_and_arguments self.name, self.args = MultiJson.decode(job.body) end