module Reqless
  module JobReservers
    module Strategies
    end
  end
end

module Reqless::JobReservers::Strategies::Ordering
  # Shuffles the underlying enumerable
  # for each iteration.
  # @param [Enumerable] enumerable - underlying enumerator to iterate over
  def self.shuffled(enumerable)
    Enumerator.new do |yielder|
      enumerable.to_a.shuffle.each do |e|
        yielder << e
      end
    end
  end

  # Samples a subset of the underlying enumerable
  # for each iteration.
  # @param [Enumerable] enumerable - underlying enumerator to iterate over
  # @param [Integer] sample_size   - number of items to take per iteration
  def self.sampled(enumerable, sample_size = 5)
    Enumerator.new do |yielder|
      enumerable.to_a.sample(sample_size).each do |e|
        yielder << e
      end
    end
  end
end