class Karousel

Implements karousel

Constants

STATUS
VERSION

Attributes

seats[R]
size[R]
time_interval[R]

Public Class Methods

new(klass, size = 10, time_interval = 0, data = nil) click to toggle source
# File lib/karousel.rb, line 17
def initialize(klass, size = 10, time_interval = 0, data = nil)
  @klass = klass
  @size = size
  @time_interval = time_interval
  @seats = []
  @klass.load(data) if data
end
version() click to toggle source
# File lib/karousel.rb, line 13
def self.version
  VERSION
end

Public Instance Methods

populate() click to toggle source
# File lib/karousel.rb, line 25
def populate
  new_seats = []
  @klass.populate(@size - @seats.size).each do |inst|
    new_seats << Job.new(inst)
  end
  @seats = new_seats + @seats
end
run() { || ... } click to toggle source
# File lib/karousel.rb, line 33
def run(&block)
  populate
  until @seats.empty?
    send_request
    sleep(@time_interval)
    check_response
    yield if block
    populate
  end
end

Private Instance Methods

check_response() click to toggle source
# File lib/karousel.rb, line 57
def check_response
  @seats = @seats[@cursor..-1] + @seats[0...@cursor] if @cursor != 0
  @seats.size.times do
    job = @seats.shift
    if job.status != :failure && job.finished?
      job.process
    else
      @seats.push(job)
    end
  end
  @cursor = 0
end
send_request() click to toggle source
# File lib/karousel.rb, line 46
def send_request
  @cursor = 0
  @seats.each_with_index do |job, index|
    if job.status == STATUS[:sent]
      @cursor = index
      break
    end
    job.send
  end
end