Sha256: 4608ece9eafe4558324f7938fa141a76af0337f131ce78ba01be7389e9eca93f

Contents?: true

Size: 1.17 KB

Versions: 5

Compression:

Stored size: 1.17 KB

Contents

Dir[File.join(File.dirname(__FILE__), "karousel", "*.rb")].each {|f| require f}


class Karousel
  attr_reader :size, :seats, :time_interval, :cycle_data

  def initialize(klass, size=10, time_interval = 0)
    @klass = klass
    @size = size
    @time_interval = time_interval
    @seats = []
    @cycle_data = []
  end

  def populate
    new_seats = []
    @klass.populate(@size - @seats.size).each do |inst|
      new_seats << Job.new(inst)
    end
    @seats = new_seats + @seats
  end

  def run(&block)
    populate
    until @seats.empty? do
      send_request
      sleep(@time_interval)
      check_response
      yield if block
      populate
    end
  end

  private

  def send_request
    @cursor = 0
    @seats.each_with_index do |job, index|
      if job.status == :sent
        @cursor = index
        break
      end
      job.send
    end
  end

  def check_response
    @cycle_data = []
    @seats = @seats[@cursor..-1] + @seats[0...@cursor] if @cursor != 0
    @seats.size.times do
      job = @seats.shift
      @cycle_data << job
      (job.status != :failure && job.finished? && job.status == :success) ? job.process : @seats.push(job)
    end
    @cursor = 0
  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
karousel-0.9.12 lib/karousel.rb
karousel-0.9.11 lib/karousel.rb
karousel-0.9.10 lib/karousel.rb
karousel-0.9.9 lib/karousel.rb
karousel-0.9.8 lib/karousel.rb