Class: Imouto::RatelimitedQueue

Inherits:
Object
  • Object
show all
Defined in:
lib/ratelimited_queue.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(messages_per_interval, interval_in_seconds) ⇒ RatelimitedQueue

Returns a new instance of RatelimitedQueue.



5
6
7
8
9
10
11
# File 'lib/ratelimited_queue.rb', line 5

def initialize(messages_per_interval, interval_in_seconds)
  @messages_per_interval = messages_per_interval
  @interval_in_seconds = interval_in_seconds
  @messages_this_interval = 0
  @current_interval = Time.now
  @items = []
end

Instance Attribute Details

#interval_in_secondsObject (readonly)

Returns the value of attribute interval_in_seconds.



3
4
5
# File 'lib/ratelimited_queue.rb', line 3

def interval_in_seconds
  @interval_in_seconds
end

#messages_per_intervalObject (readonly)

Returns the value of attribute messages_per_interval.



3
4
5
# File 'lib/ratelimited_queue.rb', line 3

def messages_per_interval
  @messages_per_interval
end

Instance Method Details

#dequeueObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/ratelimited_queue.rb', line 17

def dequeue
  loop {
    if @items.empty?
      sleep 1
      next
    end
    interval = Time.now
    if interval > @current_interval + @interval_in_seconds
      @current_interval = interval
      @messages_this_interval = 0
    end
    if @messages_this_interval < @messages_per_interval
      @messages_this_interval += 1
      yield @items.shift
    end
  }
end

#enqueue(item) ⇒ Object



13
14
15
# File 'lib/ratelimited_queue.rb', line 13

def enqueue(item)
  @items << item
end