Sha256: 2fc0dc4faf6a260528fa666a359bdede5d86295b9daf5d9fc17a3cecb3d0909e

Contents?: true

Size: 1.28 KB

Versions: 20

Compression:

Stored size: 1.28 KB

Contents

# frozen_string_literal: true

module Mutant
  module Parallel
    # Job source for parallel execution
    class Source
      include AbstractType

      class Job
        include Adamantium, Anima.new(:index, :payload)
      end

      NoJobError = Class.new(RuntimeError)

      # Next job
      #
      # @return [Object]
      #
      # @raise [NoJobError]
      #   when no next job is available
      abstract_method :next

      # Test if next job is available
      #
      # @return [Boolean]
      abstract_method :next?

      # Job source backed by a finite array
      class Array
        include Anima.new(:jobs)

        # Initialize objecto
        #
        # @return [undefined]
        def initialize(*)
          super

          @next_index = 0
        end

        # Test if next job is available
        #
        # @return [Boolean]
        def next?
          @next_index < jobs.length
        end

        # Next job
        #
        # @return [Job]
        #
        # @raise [NoJobError]
        #   when no next job is available
        def next
          fail NoJobError unless next?
          Job.new(index: @next_index, payload: jobs.fetch(@next_index)).tap do
            @next_index += 1
          end
        end

      end # Array
    end # Source
  end # Parallel
end # Mutant

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
mutant-0.12.4 lib/mutant/parallel/source.rb
mutant-0.12.3 lib/mutant/parallel/source.rb
mutant-0.12.2 lib/mutant/parallel/source.rb
mutant-0.12.0 lib/mutant/parallel/source.rb
mutant-0.11.34 lib/mutant/parallel/source.rb
mutant-0.11.33 lib/mutant/parallel/source.rb
mutant-0.11.32 lib/mutant/parallel/source.rb
mutant-0.11.31 lib/mutant/parallel/source.rb
mutant-0.11.30 lib/mutant/parallel/source.rb
mutant-0.11.29 lib/mutant/parallel/source.rb
mutant-0.11.28 lib/mutant/parallel/source.rb
mutant-0.11.27 lib/mutant/parallel/source.rb
mutant-0.11.26 lib/mutant/parallel/source.rb
mutant-0.11.25 lib/mutant/parallel/source.rb
mutant-0.11.24 lib/mutant/parallel/source.rb
mutant-0.11.23 lib/mutant/parallel/source.rb
mutant-0.11.22 lib/mutant/parallel/source.rb
mutant-0.11.21 lib/mutant/parallel/source.rb
mutant-0.11.20 lib/mutant/parallel/source.rb
mutant-0.11.19 lib/mutant/parallel/source.rb