Sha256: ced1ffbc3acb99f620dc4f783b83c1fb01d944360b2830af4cacae0fa9c98574

Contents?: true

Size: 1.48 KB

Versions: 8

Compression:

Stored size: 1.48 KB

Contents

# frozen_string_literal: true

module Mutant
  module Parallel
    # Parallel execution worker
    class Worker
      include Adamantium::Flat, Anima.new(
        :mailbox,
        :parent,
        :processor
      )

      # Run worker
      #
      # @param [Hash<Symbol, Object] attributes
      #
      # @return [self]
      def self.run(attributes)
        new(attributes).run
        self
      end

      private_class_method :new

      # Worker loop
      #
      # @return [self]
      #
      # rubocop:disable Lint/Loop
      def run
        begin
          parent.call(Actor::Message.new(:ready, mailbox.sender))
        end until handle(mailbox.receiver.call)
      end

    private

      # Handle job
      #
      # @param [Message] message
      #
      # @return [Boolean]
      def handle(message)
        type, payload = message.type, message.payload
        case message.type
        when :job
          handle_job(payload)
          nil
        when :stop
          true
        else
          fail Actor::ProtocolError, "Unknown command: #{type.inspect}"
        end
      end

      # Handle mutation
      #
      # @param [Job] job
      #
      # @return [undefined]
      def handle_job(job)
        result = processor.call(job.payload)

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

    end # Worker
  end # Parallel
end # Mutant

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
mutant-0.8.24 lib/mutant/parallel/worker.rb
mutant-0.8.23 lib/mutant/parallel/worker.rb
mutant-0.8.22 lib/mutant/parallel/worker.rb
mutant-0.8.21 lib/mutant/parallel/worker.rb
mutant-0.8.20 lib/mutant/parallel/worker.rb
mutant-0.8.19 lib/mutant/parallel/worker.rb
mutant-0.8.18 lib/mutant/parallel/worker.rb
mutant-0.8.17 lib/mutant/parallel/worker.rb