class Geary::Performer

Public Class Methods

new(address) click to toggle source
# File lib/geary/performer.rb, line 15
def initialize(address)
  @address = address
  configure_connection Gearman::Worker.method(:new_link)
end

Public Instance Methods

build_connection() click to toggle source
# File lib/geary/performer.rb, line 63
def build_connection
  @gearman = @connect.call(@address)
end
configure_connection(connection_routine) click to toggle source
# File lib/geary/performer.rb, line 67
def configure_connection(connection_routine)
  @connect = connection_routine
  reconnect(current_actor, nil)
end
disconnect() click to toggle source
# File lib/geary/performer.rb, line 52
def disconnect
  if @gearman
    @gearman.terminate if @gearman.alive?
  end
end
perform(packet) click to toggle source
# File lib/geary/performer.rb, line 37
def perform(packet)
  job = JSON.parse(packet.data)
  job_result = nil

  begin
    worker = ::Object.const_get(job['class']).new

    job_result = worker.perform(*job['args'])
  rescue => error
    @gearman.async.work_exception(packet.handle, error.message)
  else
    @gearman.async.work_complete(packet.handle, job_result)
  end
end
reconnect(actor, reason) click to toggle source
# File lib/geary/performer.rb, line 58
def reconnect(actor, reason)
  disconnect
  build_connection
end
start() click to toggle source
# File lib/geary/performer.rb, line 20
def start
  @gearman.can_do('Geary.default')

  loop do
    packet = @gearman.grab_job

    case packet
    when Gearman::Packet::JOB_ASSIGN
      perform(packet)
    when Gearman::Packet::NO_JOB
      @gearman.pre_sleep
    else
      break
    end
  end
end