Class: Imouto::RatelimitedQueue
- Inherits:
-
Object
- Object
- Imouto::RatelimitedQueue
- Defined in:
- lib/ratelimited_queue.rb
Instance Attribute Summary collapse
-
#interval_in_seconds ⇒ Object
readonly
Returns the value of attribute interval_in_seconds.
-
#messages_per_interval ⇒ Object
readonly
Returns the value of attribute messages_per_interval.
Instance Method Summary collapse
- #dequeue ⇒ Object
- #enqueue(item) ⇒ Object
-
#initialize(messages_per_interval, interval_in_seconds) ⇒ RatelimitedQueue
constructor
A new instance of RatelimitedQueue.
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(, interval_in_seconds) @messages_per_interval = @interval_in_seconds = interval_in_seconds @messages_this_interval = 0 @current_interval = Time.now @items = [] end |
Instance Attribute Details
#interval_in_seconds ⇒ Object (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_interval ⇒ Object (readonly)
Returns the value of attribute messages_per_interval.
3 4 5 |
# File 'lib/ratelimited_queue.rb', line 3 def @messages_per_interval end |
Instance Method Details
#dequeue ⇒ Object
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 |