Sha256: 5c929f27a93ce0a4fa1f91bb964706d372cc03952d7e87bc4281fa05b90989cf

Contents?: true

Size: 1.35 KB

Versions: 7

Compression:

Stored size: 1.35 KB

Contents

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

      NoJobError = Class.new(RuntimeError)

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

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

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

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

          @next_index = 0
        end

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

        # Return next job
        #
        # @return [Object]
        #
        # @raise [NoJobError]
        #   when no next job is available
        #
        # @api private
        #
        def next
          fail NoJobError unless next?
          jobs.fetch(@next_index).tap do
            @next_index += 1
          end
        end

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

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
mutant-0.8.0 lib/mutant/parallel/source.rb
mutant-0.7.9 lib/mutant/parallel/source.rb
mutant-0.7.8 lib/mutant/parallel/source.rb
mutant-0.7.7 lib/mutant/parallel/source.rb
mutant-0.7.6 lib/mutant/parallel/source.rb
mutant-0.7.5 lib/mutant/parallel/source.rb
mutant-0.7.4 lib/mutant/parallel/source.rb