class SidekiqBulkJob::BulkJob

Public Instance Methods

perform(job_class_name, args_array) click to toggle source
# File lib/sidekiq_bulk_job/bulk_job.rb, line 12
def perform(job_class_name, args_array)
  target_name, method_name = SidekiqBulkJob::Utils.split_class_name_with_method job_class_name
  job = SidekiqBulkJob::Utils.constantize(target_name)
  error_handle = BulkErrorHandler.new(job_class_name, self.jid)
  args_array.each do |_args|
    begin
      args = SidekiqBulkJob::Utils.load _args
      if SidekiqBulkJob::Utils.class_with_method?(job_class_name)
        job.send(method_name, *args)
      else
        job.new.send(method_name, *args)
      end
    rescue Exception => e
      error_handle.add _args, e
      SidekiqBulkJob.logger.error("#{job_class_name} Args: #{args}, Error: #{e.respond_to?(:full_message) ? e.full_message : e.message}")
    end
  end
  if error_handle.failed?
    SidekiqBulkJob.fail_callback(job_class_name: job_class_name, args: error_handle.args, exception: error_handle.raise_error)
    SidekiqBulkJob::JobRetry.new(job, error_handle).push
  else
    error_handle.clear
  end
end