Class: Async::LimitedQueue
Overview
A queue which limits the number of items that can be enqueued.
Instance Attribute Summary collapse
- 
  
    
      #limit  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute limit. 
- #The maximum number of items that can be enqueued.(maximumnumberofitemsthatcanbeenqueued.) ⇒ Object readonly
Attributes inherited from Queue
#The items in the queue., #items
Instance Method Summary collapse
- 
  
    
      #<<(item)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Add an item to the queue. 
- 
  
    
      #dequeue  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Remove and return the next item from the queue. 
- 
  
    
      #enqueue(*items)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Add multiple items to the queue. 
- 
  
    
      #initialize(limit = 1, full: Notification.new, **options)  ⇒ LimitedQueue 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    Create a new limited queue. 
- #limited? ⇒ Boolean
Methods inherited from Queue
#async, #each, #empty?, #push, #signal, #size, #wait
Constructor Details
#initialize(limit = 1, full: Notification.new, **options) ⇒ LimitedQueue
Create a new limited queue.
| 108 109 110 111 112 113 | # File 'lib/async/queue.rb', line 108 def initialize(limit = 1, full: Notification.new, **) super(**) @limit = limit @full = full end | 
Instance Attribute Details
#limit ⇒ Object (readonly)
Returns the value of attribute limit.
| 116 117 118 | # File 'lib/async/queue.rb', line 116 def limit @limit end | 
#The maximum number of items that can be enqueued.(maximumnumberofitemsthatcanbeenqueued.) ⇒ Object (readonly)
| 116 | # File 'lib/async/queue.rb', line 116 attr :limit | 
Instance Method Details
#<<(item) ⇒ Object
Add an item to the queue.
If the queue is full, this method will block until there is space available.
| 128 129 130 131 132 133 134 | # File 'lib/async/queue.rb', line 128 def <<(item) while limited? @full.wait end super end | 
#dequeue ⇒ Object
Remove and return the next item from the queue.
If the queue is empty, this method will block until an item is available.
| 159 160 161 162 163 164 165 | # File 'lib/async/queue.rb', line 159 def dequeue item = super @full.signal return item end | 
#enqueue(*items) ⇒ Object
Add multiple items to the queue.
If the queue is full, this method will block until there is space available.
| 141 142 143 144 145 146 147 148 149 150 151 152 | # File 'lib/async/queue.rb', line 141 def enqueue(*items) while !items.empty? while limited? @full.wait end available = @limit - @items.size @items.concat(items.shift(available)) @available.signal unless self.empty? end end | 
#limited? ⇒ Boolean
| 119 120 121 | # File 'lib/async/queue.rb', line 119 def limited? @items.size >= @limit end |