class Mutest::Parallel::Worker

Parallel execution worker

Public Class Methods

run(attributes) click to toggle source

Run worker

@param [Hash<Symbol, Object>] attributes

@return [self]

# File lib/mutest/parallel/worker.rb, line 17
def self.run(attributes)
  new(attributes).run
  self
end

Public Instance Methods

run() click to toggle source

Worker loop

@return [self]

rubocop:disable Lint/Loop

# File lib/mutest/parallel/worker.rb, line 29
def run
  begin
    parent.call(Actor::Message.new(:ready, mailbox.sender))
  end until handle(mailbox.receiver.call)
end

Private Instance Methods

handle(message) click to toggle source

Handle job

@param [Message] message

@return [Boolean]

# File lib/mutest/parallel/worker.rb, line 42
def handle(message) # rubocop:disable Metrics/MethodLength
  type    = message.type
  payload = message.payload

  case message.type
  when :job
    handle_job(payload)
    nil
  when :stop
    true
  else
    raise Actor::ProtocolError, "Unknown command: #{type.inspect}"
  end
end
handle_job(job) click to toggle source

Handle mutation

@param [Job] job

@return [undefined]

# File lib/mutest/parallel/worker.rb, line 62
def handle_job(job)
  result = processor.call(job.payload)

  parent.call(
    Actor::Message.new(
      :result,
      JobResult.new(
        job:     job,
        payload: result
      )
    )
  )
end