class QC::Batches::Batch

Attributes

complete_args[RW]
complete_method[RW]
complete_q_name[RW]
created_at[RW]
id[RW]
queue[RW]

Public Class Methods

complete_if_finished(batch_id) click to toggle source
# File lib/queue_classic_batches/batch.rb, line 32
def self.complete_if_finished(batch_id)

  if Batch.finished?(batch_id)
    QC.default_conn_adapter.connection.transaction do |conn|
      batch = Batch.find(batch_id, lock: true)
      return unless batch
      batch.complete
    end
  end

end
create(attributes = nil) click to toggle source
# File lib/queue_classic_batches/batch.rb, line 60
def self.create(attributes = nil)
  attributes ||= {}
  complete_method = attributes[:complete_method]
  complete_args = attributes[:complete_args]
  if complete_args && !complete_method; raise 'args was passed but no method' end
  
  id = Queries.create_batch(attributes)
  new_attributes = attributes.clone
  new_attributes[:id] = id

  Batch.new(new_attributes)
end
find(id, lock=false) click to toggle source
# File lib/queue_classic_batches/batch.rb, line 73
def self.find(id, lock=false)
  if attributes = QC::Batches::Queries.find_batch(id, lock)
    return Batch.new(attributes)
  end
end
finished?(id) click to toggle source
# File lib/queue_classic_batches/batch.rb, line 83
def self.finished?(id)
  !QC::Batches::Queries.has_pending_jobs?(id)
end
new(args=nil) click to toggle source
# File lib/queue_classic_batches/batch.rb, line 11
def initialize(args=nil)
  args.each { |k,v|
    instance_variable_set("@#{k}", v) unless v.nil?
  } if args.is_a?(Hash)
  @queuing_complete = args[:queuing_complete] || false
end
perform_job(method, batch_id, args=nil) click to toggle source
# File lib/queue_classic_batches/batch.rb, line 87
def self.perform_job(method, batch_id, args=nil) 
  receiver_str, _, message = method.rpartition('.')
  receiver = eval(receiver_str)
  result = receiver.send(message, *args)

  return result
end

Public Instance Methods

complete() click to toggle source
# File lib/queue_classic_batches/batch.rb, line 44
def complete
  return unless queuing_complete? && finished?  
  if complete_method
    queue = complete_q_name ? Queue.new(complete_q_name) : QC
    queue.enqueue complete_method, *complete_args
  end
  delete

  time_to_complete = Integer((Time.now - created_at) * 1000)
  QC.log(:'time-to-complete-batch'=>time_to_complete, :source=>id)
end
delete() click to toggle source
# File lib/queue_classic_batches/batch.rb, line 56
def delete
  Queries.delete_batch(self.id)
end
enqueue(method, *args) click to toggle source
# File lib/queue_classic_batches/batch.rb, line 18
def enqueue(method, *args)
  (self.queue || QC).enqueue_batch method, self.id, args
end
finished?() click to toggle source
# File lib/queue_classic_batches/batch.rb, line 79
def finished?
  Batch.finished?(self.id)
end
queuing_complete() click to toggle source
# File lib/queue_classic_batches/batch.rb, line 26
def queuing_complete 
  @queuing_complete = true
  Queries.save_queuing_complete(self.id)
  Batch.complete_if_finished self.id
end
queuing_complete?() click to toggle source
# File lib/queue_classic_batches/batch.rb, line 22
def queuing_complete? 
  return @queuing_complete
end