Skip to content

Instantly share code, notes, and snippets.

@robsonmarques
Last active December 25, 2015 02:58
Show Gist options
  • Save robsonmarques/6905865 to your computer and use it in GitHub Desktop.
Save robsonmarques/6905865 to your computer and use it in GitHub Desktop.
Worker Notes - mhl_sidekiq_concern
class ActiveDebtReportWorker < BaseWorker
perform :report_repository do |object|
report_generator.generate object
end
protected
def report_repository
options[:report_repository] || ActiveDebtReport
end
def report_generator
options[:report_generator] || ActiveDebtReportGenerator
end
end
class BaseWorker
include Sidekiq::Worker
include CustomerHandleConnection
attr_accessor :customer_id, :object_id
delegate :mark_as_processed!, :mark_as_error_processing!, :to => :object, :prefix => true, :allow_nil => true
def initialize(options = {})
self.options = options
end
def self.perform(object_repository, &block)
module_eval do
define_method :perform_block, block
define_method object_repository do
raise NotImplementedError unless respond_to? object_repository
send object_repository
end
def perform(customer_id, object_id)
self.customer_id = customer_id
self.object_id = object_id
using_connection_for(customer_id) { perform_block object }
end
end
end
def object
object_repository.find object_id
end
def mark_as_processed!
using_connection_for(customer_id) { object_mark_as_processed! }
end
def mark_as_error_processing!
using_connection_for(customer_id) { object_mark_as_error_processing! }
end
protected
attr_accessor :options
end
class SidekiqErrorHandling
include CustomerHandleConnection
def call(worker, job, queue)
worker.mark_as_processed!
yield
rescue => exception
worker.mark_as_error_processing!
raise exception
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment