class Limiter::RateQueue
Constants
- EPOCH
Public Class Methods
new(size, interval: 60, &blk)
click to toggle source
# File lib/limiter/rate_queue.rb, line 7 def initialize(size, interval: 60, &blk) @size = size @interval = interval @ring = Array.new(size, EPOCH) @head = 0 @mutex = Mutex.new @blk = blk end
Public Instance Methods
shift()
click to toggle source
# File lib/limiter/rate_queue.rb, line 17 def shift time = nil @mutex.synchronize do time = @ring[@head] sleep_until(time + @interval) @ring[@head] = clock.time @head = (@head + 1) % @size end time end
Private Instance Methods
clock()
click to toggle source
# File lib/limiter/rate_queue.rb, line 41 def clock Clock end
sleep_until(time)
click to toggle source
# File lib/limiter/rate_queue.rb, line 34 def sleep_until(time) interval = time - clock.time return unless interval.positive? @blk.call if @blk clock.sleep(interval) end