class Redrate::Queue

Constants

EPOCH

Public Class Methods

new(size, interval: 60, key: 'queue') click to toggle source
# File lib/redrate/queue.rb, line 9
def initialize(size, interval: 60, key: 'queue')
  @ring = Ring.new(size, key, EPOCH)
  @interval = interval
end

Public Instance Methods

shift() click to toggle source
# File lib/redrate/queue.rb, line 14
def shift
  time = nil

  @ring.lock do
    sleep_until(@ring.current + @interval)
    @ring.rotate!
  end

  time
end

Private Instance Methods

sleep_until(time) click to toggle source
# File lib/redrate/queue.rb, line 27
def sleep_until(time)
  interval = time - @ring.now
  return unless interval.positive?
  sleep(interval)
end